Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/PluginClass.h

Issue 4937147073167360: Issue 1672 - Subscribe and listen COM events using ATL::IDispEventImpl and BEGIN_SINK_MAP (Closed)
Patch Set: fix-NITs Created Jan. 9, 2015, 4:06 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * http://msdn.microsoft.com/en-us/library/bb250436.aspx 2 * http://msdn.microsoft.com/en-us/library/bb250436.aspx
3 */ 3 */
4 4
5 #ifndef _PLUGIN_CLASS_H_ 5 #ifndef _PLUGIN_CLASS_H_
6 #define _PLUGIN_CLASS_H_ 6 #define _PLUGIN_CLASS_H_
7 7
8 8
9 #include "PluginTypedef.h" 9 #include "PluginTypedef.h"
10 #include "Plugin.h" 10 #include "Plugin.h"
11 #include "PluginTab.h" 11 #include "PluginTab.h"
12 #define _CRTDBG_MAP_ALLOC 12 #define _CRTDBG_MAP_ALLOC
13 #include <stdlib.h> 13 #include <stdlib.h>
14 #include <crtdbg.h> 14 #include <crtdbg.h>
15 #include <set> 15 #include <set>
16 16
17 #include "NotificationMessage.h" 17 #include "NotificationMessage.h"
18 18
19 #define ICON_PLUGIN_DISABLED 0 19 #define ICON_PLUGIN_DISABLED 0
20 #define ICON_PLUGIN_ENABLED 1 20 #define ICON_PLUGIN_ENABLED 1
21 #define ICON_PLUGIN_DEACTIVATED 2 21 #define ICON_PLUGIN_DEACTIVATED 2
22 #define ICON_MAX 3 22 #define ICON_MAX 3
23 23
24 #define WM_LAUNCH_INFO (WM_APP + 10) 24 #define WM_LAUNCH_INFO (WM_APP + 10)
25 25
26 class CPluginMimeFilterClient; 26 class CPluginMimeFilterClient;
27 27
28 28
29 class ATL_NO_VTABLE CPluginClass : 29 class ATL_NO_VTABLE CPluginClass :
30 public CComObjectRootEx<CComMultiThreadModel>, 30 public ATL::CComObjectRootEx<ATL::CComMultiThreadModel>,
31 public CComCoClass<CPluginClass, &CLSID_PluginClass>, 31 public ATL::CComCoClass<CPluginClass, &CLSID_PluginClass>,
32 public IObjectWithSiteImpl<CPluginClass>, 32 public ATL::IObjectWithSiteImpl<CPluginClass>,
33 public IDispatchImpl<IIEPlugin, &IID_IIEPlugin, &LIBID_PluginLib>, 33 public IOleCommandTarget,
34 public IOleCommandTarget 34 public ATL::IDispEventImpl<1, CPluginClass, &DIID_DWebBrowserEvents2, &LIBID_S HDocVw, 1, 1>
35 { 35 {
36 36
37 friend class CPluginTab; 37 friend class CPluginTab;
38 38
39 private: 39 private:
40 40
41 CPluginTab* m_tab; 41 CPluginTab* m_tab;
42 42
43 public: 43 public:
44 44
45 DECLARE_REGISTRY_RESOURCEID(IDR_PLUGIN_CLASS) 45 DECLARE_REGISTRY_RESOURCEID(IDR_PLUGIN_CLASS)
46 46
47 DECLARE_PROTECT_FINAL_CONSTRUCT() 47 DECLARE_PROTECT_FINAL_CONSTRUCT()
48 48
49 BEGIN_COM_MAP(CPluginClass) 49 BEGIN_COM_MAP(CPluginClass)
50 COM_INTERFACE_ENTRY(IIEPlugin)
51 COM_INTERFACE_ENTRY(IDispatch)
52 COM_INTERFACE_ENTRY(IObjectWithSite) 50 COM_INTERFACE_ENTRY(IObjectWithSite)
53 COM_INTERFACE_ENTRY(IOleCommandTarget) 51 COM_INTERFACE_ENTRY(IOleCommandTarget)
54 END_COM_MAP() 52 END_COM_MAP()
55 53
54 BEGIN_SINK_MAP(CPluginClass)
55 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, OnBeforeNa vigate2)
56 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, OnDownloadBe gin)
57 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE, OnDownloa dComplete)
58 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumen tComplete)
59 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_WINDOWSTATECHANGED, OnWindo wStateChanged)
60 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, OnComma ndStateChange)
61 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, Unadvise)
Eric 2015/01/12 14:18:07 I'd prefer to see an OnQuit function explicitly, e
62 END_SINK_MAP()
63
56 CPluginClass(); 64 CPluginClass();
57 ~CPluginClass(); 65 ~CPluginClass();
58 66
59 HRESULT FinalConstruct(); 67 HRESULT FinalConstruct();
60 void FinalRelease(); 68 void FinalRelease();
61 69
62 // IObjectWithSite 70 // IObjectWithSite
63 71
64 STDMETHOD(SetSite)(IUnknown *pUnkSite); 72 STDMETHOD(SetSite)(IUnknown *pUnkSite);
65 73
66 // IOleCommandTarget 74 // IOleCommandTarget
67 75
68 STDMETHOD(QueryStatus)(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT* pCmdText); 76 STDMETHOD(QueryStatus)(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT* pCmdText);
69 STDMETHOD(Exec)(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, VARIANTARG* pva Out); 77 STDMETHOD(Exec)(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, VARIANTARG* pva Out);
70 78
71 // IDispatch
72
73 STDMETHOD(Invoke)(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags,
74 DISPPARAMS * pdispparams, VARIANT * pvarResult,EXCEPINFO * pexcepinfo, UINT * puArgErr);
75 79
76 static CPluginTab* GetTab(DWORD dwThreadId); 80 static CPluginTab* GetTab(DWORD dwThreadId);
77 CPluginTab* GetTab(); 81 CPluginTab* GetTab();
78 82
79 void UpdateStatusBar(); 83 void UpdateStatusBar();
80 static DWORD WINAPI MainThreadProc(LPVOID pParam); 84 static DWORD WINAPI MainThreadProc(LPVOID pParam);
81 85
82 private: 86 private:
83 87
84 bool SetMenuBar(HMENU hMenu, const CString& url); 88 bool SetMenuBar(HMENU hMenu, const CString& url);
85 HMENU CreatePluginMenu(const CString& url); 89 HMENU CreatePluginMenu(const CString& url);
86 90
87 void DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, UINT nMenuFla gs); 91 void DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, UINT nMenuFla gs);
88 bool CreateStatusBarPane(); 92 bool CreateStatusBarPane();
89 93
90 CComPtr<IConnectionPoint> GetConnectionPoint();
91
92 public: 94 public:
93 HWND GetBrowserHWND() const; 95 HWND GetBrowserHWND() const;
94 HWND GetTabHWND() const; 96 HWND GetTabHWND() const;
95 CComQIPtr<IWebBrowser2> GetBrowser() const; 97 CComQIPtr<IWebBrowser2> GetBrowser() const;
96 98
97 STDMETHODIMP OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags);
98 99
99 static CPluginMimeFilterClient* s_mimeFilter; 100 static CPluginMimeFilterClient* s_mimeFilter;
100 101
101 private: 102 private:
102 103
103 CString GetBrowserUrl() const; 104 CString GetBrowserUrl() const;
104 105
105 106
106 static DWORD WINAPI StartInitObject(LPVOID thisPtr); 107 static DWORD WINAPI StartInitObject(LPVOID thisPtr);
107 bool InitObject(bool bBHO); 108 bool InitObject(bool bBHO);
108 void CloseTheme(); 109 void CloseTheme();
109 void UpdateTheme(); 110 void UpdateTheme();
110 111
111 static HICON GetStatusBarIcon(const CString& url); 112 static HICON GetStatusBarIcon(const CString& url);
112 static CPluginClass* FindInstance(HWND hStatusBarWnd); 113 static CPluginClass* FindInstance(HWND hStatusBarWnd);
113 static LRESULT CALLBACK NewStatusProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 114 static LRESULT CALLBACK NewStatusProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
114 static LRESULT CALLBACK PaneWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 115 static LRESULT CALLBACK PaneWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
115 static void FirstRunThread(); 116 static void FirstRunThread();
116 void BeforeNavigate2(DISPPARAMS* pDispParams);
117 117
118 void Unadvice(); 118 void STDMETHODCALLTYPE OnBeforeNavigate2(/* [in] */ IDispatch* pDisp,
119 /* [in] */ VARIANT* URL,
120 /* [in] */ VARIANT* Flags,
121 /* [in] */ VARIANT* TargetFrameName,
122 /* [in] */ VARIANT* PostData,
123 /* [in] */ VARIANT* Headers,
124 /* [in, out] */ VARIANT_BOOL* Cancel);
125 void STDMETHODCALLTYPE OnDownloadBegin();
126 void STDMETHODCALLTYPE OnDownloadComplete();
127 void STDMETHODCALLTYPE OnDocumentComplete(IDispatch* frameBrowserDisp, VARIANT * /*urlOrPidl*/);
128 void STDMETHODCALLTYPE OnWindowStateChanged(unsigned long flags, unsigned long validFlagsMask);
129 void STDMETHODCALLTYPE OnCommandStateChange(long command, VARIANT_BOOL enable) ;
130 // OnOnQuit
131 void STDMETHODCALLTYPE Unadvise();
119 132
120 void ShowStatusBar(); 133 void ShowStatusBar();
121 bool IsStatusBarEnabled(); 134 bool IsStatusBarEnabled();
122 135
123 public: 136 public:
124 CComQIPtr<IWebBrowser2> m_webBrowser2; 137 CComQIPtr<IWebBrowser2> m_webBrowser2;
125 private: 138 private:
126 DWORD m_nConnectionID;
127 HWND m_hBrowserWnd; 139 HWND m_hBrowserWnd;
128 HWND m_hTabWnd; 140 HWND m_hTabWnd;
129 HWND m_hStatusBarWnd; 141 HWND m_hStatusBarWnd;
130 HWND m_hPaneWnd; 142 HWND m_hPaneWnd;
131 143
132 WNDPROC m_pWndProcStatus; 144 WNDPROC m_pWndProcStatus;
133 int m_nPaneWidth; 145 int m_nPaneWidth;
134 HANDLE m_hTheme; 146 HANDLE m_hTheme;
135 147
136 CriticalSection m_csStatusBar; 148 CriticalSection m_csStatusBar;
137 149
138 NotificationMessage notificationMessage; 150 NotificationMessage notificationMessage;
139 151
140 bool m_isAdviced; 152 bool m_isAdvised;
141 bool m_isInitializedOk; 153 bool m_isInitializedOk;
142 154
143 // Atom pane class 155 // Atom pane class
144 static ATOM s_atomPaneClass; 156 static ATOM s_atomPaneClass;
145 157
146 static ATOM GetAtomPaneClass(); 158 static ATOM GetAtomPaneClass();
147 159
148 // Icons 160 // Icons
149 static HICON s_hIcons[ICON_MAX]; 161 static HICON s_hIcons[ICON_MAX];
150 static DWORD s_hIconTypes[ICON_MAX]; 162 static DWORD s_hIconTypes[ICON_MAX];
(...skipping 16 matching lines...) Expand all
167 179
168 // Async browser 180 // Async browser
169 static CComQIPtr<IWebBrowser2> s_asyncWebBrowser2; 181 static CComQIPtr<IWebBrowser2> s_asyncWebBrowser2;
170 static CComQIPtr<IWebBrowser2> GetAsyncBrowser(); 182 static CComQIPtr<IWebBrowser2> GetAsyncBrowser();
171 }; 183 };
172 184
173 OBJECT_ENTRY_AUTO(__uuidof(PluginClass), CPluginClass) 185 OBJECT_ENTRY_AUTO(__uuidof(PluginClass), CPluginClass)
174 186
175 187
176 #endif // _PLUGIN_CLASS_H_ 188 #endif // _PLUGIN_CLASS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld