Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginClass.h" | 3 #include "PluginClass.h" |
4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
5 #include "PluginSystem.h" | 5 #include "PluginSystem.h" |
6 #ifdef SUPPORT_FILTER | 6 #ifdef SUPPORT_FILTER |
7 #include "PluginFilter.h" | 7 #include "PluginFilter.h" |
8 #endif | 8 #endif |
9 #include "PluginMimeFilterClient.h" | 9 #include "PluginMimeFilterClient.h" |
10 #include "PluginClient.h" | 10 #include "PluginClient.h" |
11 #include "PluginClientFactory.h" | 11 #include "PluginClientFactory.h" |
12 #include "PluginMutex.h" | 12 #include "PluginMutex.h" |
13 #include "sddl.h" | 13 #include "sddl.h" |
14 #include "PluginUtil.h" | 14 #include "PluginUtil.h" |
15 #include "PluginUserSettings.h" | 15 #include "PluginUserSettings.h" |
16 #include "../shared/Utils.h" | 16 #include "../shared/Utils.h" |
17 #include "../shared/Dictionary.h" | 17 #include "../shared/Dictionary.h" |
18 #include <thread> | 18 #include <thread> |
19 | 19 |
20 #include "COM_Client.h" | |
21 #include "Wrapper.h" | |
22 | |
23 #ifdef DEBUG_HIDE_EL | 20 #ifdef DEBUG_HIDE_EL |
24 DWORD profileTime = 0; | 21 DWORD profileTime = 0; |
25 #endif | 22 #endif |
26 | 23 |
27 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); | 24 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); |
28 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT); | 25 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT); |
29 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE); | 26 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE); |
30 | 27 |
31 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL }; | 28 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL }; |
32 DWORD CPluginClass::s_hIconTypes[ICON_MAX] = { IDI_ICON_DISABLED, IDI_ICON_ENABL ED, IDI_ICON_DEACTIVATED }; | 29 DWORD CPluginClass::s_hIconTypes[ICON_MAX] = { IDI_ICON_DISABLED, IDI_ICON_ENABL ED, IDI_ICON_DEACTIVATED }; |
33 | 30 |
34 CPluginMimeFilterClient* CPluginClass::s_mimeFilter = NULL; | 31 CPluginMimeFilterClient* CPluginClass::s_mimeFilter = NULL; |
35 | 32 |
36 CLOSETHEMEDATA pfnClose = NULL; | 33 CLOSETHEMEDATA pfnClose = NULL; |
37 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL; | 34 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL; |
38 OPENTHEMEDATA pfnOpenThemeData = NULL; | 35 OPENTHEMEDATA pfnOpenThemeData = NULL; |
39 | 36 |
40 ATOM CPluginClass::s_atomPaneClass = NULL; | 37 ATOM CPluginClass::s_atomPaneClass = NULL; |
41 HINSTANCE CPluginClass::s_hUxtheme = NULL; | 38 HINSTANCE CPluginClass::s_hUxtheme = NULL; |
42 CSimpleArray<CPluginClass*> CPluginClass::s_instances; | 39 std::set<CPluginClass*> CPluginClass::s_instances; |
43 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances; | 40 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances; |
44 | 41 |
45 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal; | 42 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal; |
46 CComAutoCriticalSection CPluginClass::s_criticalSectionBrowser; | 43 CComAutoCriticalSection CPluginClass::s_criticalSectionBrowser; |
47 CComAutoCriticalSection CPluginClass::s_criticalSectionWindow; | 44 CComAutoCriticalSection CPluginClass::s_criticalSectionWindow; |
48 | 45 |
49 CComQIPtr<IWebBrowser2> CPluginClass::s_asyncWebBrowser2; | 46 CComQIPtr<IWebBrowser2> CPluginClass::s_asyncWebBrowser2; |
50 | 47 |
51 #ifdef SUPPORT_WHITELIST | 48 #ifdef SUPPORT_WHITELIST |
52 std::map<UINT,std::wstring> CPluginClass::s_menuDomains; | 49 std::map<UINT,CString> CPluginClass::s_menuDomains; |
53 #endif | 50 #endif |
54 | 51 |
55 //------------------------------------------------------- | 52 /* |
56 // Rectangle | 53 * Without namespace declaration, the identifier "Rectangle" is ambiguous |
57 //------------------------------------------------------- | 54 * See http://msdn.microsoft.com/en-us/library/windows/desktop/dd162898(v=vs.85) .aspx |
58 | 55 */ |
59 namespace { | 56 namespace AdblockPlus |
Oleksandr
2014/07/09 19:29:08
Nit: New line before {
|
Felix Dahlke
2014/07/24 07:24:17
This would normally be an anonymous namespace, so
|
60 // Without an extra namespace within the anonymous one, the identifier "Rectan gle" is ambiguous | 57 { |
Felix Dahlke
2014/07/10 04:49:03
Hm, guess it conflicts with this one?
http://msdn
Eric
2014/07/23 11:25:05
FYI. This URL is exhibited a defect in the code re
Eric
2014/07/23 12:03:18
Well, the base class is "RECT", and it doesn't see
| |
61 namespace Local { | 58 /** |
Oleksandr
2014/07/09 19:29:08
Nit: New line before {
| |
62 /** | 59 * Replacement for ATL type CRect. |
63 * Replacement for ATL type CRect. | 60 */ |
64 */ | 61 class Rectangle |
65 class Rectangle | 62 : public RECT |
66 : public RECT | 63 { |
67 { | 64 public: |
68 public: | 65 int Height() const |
69 // C++11 noexcept | 66 { |
Felix Dahlke
2014/07/10 04:49:03
I guess you're marking this so we can make it noex
Eric
2014/07/23 11:25:05
Yes.
| |
70 inline int Height() const | 67 return bottom - top; |
Felix Dahlke
2014/07/10 04:49:03
inline is redundant here, since this will only be
| |
71 { | 68 } |
72 return bottom - top; | 69 |
73 } | 70 int Width() const |
74 | 71 { |
75 // C++11 noexcept | 72 return right - left; |
76 inline int Width() const | 73 } |
77 { | 74 }; |
78 return right - left; | 75 } |
79 } | 76 |
80 }; | |
81 } | |
82 } | |
83 | |
84 //------------------------------------------------------- | |
85 // CPluginClass | |
Felix Dahlke
2014/07/10 04:49:03
We don't do class headers like this usually, I per
Oleksandr
2014/07/14 07:56:21
Visually I think it makes sense, and sometimes it'
| |
86 //------------------------------------------------------- | |
87 CPluginClass::CPluginClass() | 77 CPluginClass::CPluginClass() |
88 { | 78 { |
89 //Use this line to debug memory leaks | 79 //Use this line to debug memory leaks |
90 // _CrtDumpMemoryLeaks(); | 80 // _CrtDumpMemoryLeaks(); |
91 | 81 |
92 m_isAdviced = false; | 82 m_isAdviced = false; |
93 m_nConnectionID = 0; | 83 m_nConnectionID = 0; |
94 m_hTabWnd = NULL; | 84 m_hTabWnd = NULL; |
95 m_hStatusBarWnd = NULL; | 85 m_hStatusBarWnd = NULL; |
96 m_hPaneWnd = NULL; | 86 m_hPaneWnd = NULL; |
97 m_nPaneWidth = 0; | 87 m_nPaneWidth = 0; |
98 m_pWndProcStatus = NULL; | 88 m_pWndProcStatus = NULL; |
99 m_hTheme = NULL; | 89 m_hTheme = NULL; |
100 m_isInitializedOk = false; | 90 m_isInitializedOk = false; |
101 | 91 |
102 | 92 |
103 m_tab = new CPluginTab(this); | 93 m_tab = new CPluginTab(this); |
104 | 94 |
105 CPluginSystem* system = CPluginSystem::GetInstance(); | 95 CPluginSystem* system = CPluginSystem::GetInstance(); |
106 | 96 |
107 Dictionary::Create( system->GetBrowserLanguage() ); | 97 std::wstring locale((LPCWSTR)system->GetBrowserLanguage()); |
98 Dictionary::Create(locale); | |
108 } | 99 } |
109 | 100 |
110 CPluginClass::~CPluginClass() | 101 CPluginClass::~CPluginClass() |
111 { | 102 { |
112 delete m_tab; | 103 delete m_tab; |
113 } | 104 } |
114 | 105 |
115 | 106 |
116 ///////////////////////////////////////////////////////////////////////////// | 107 ///////////////////////////////////////////////////////////////////////////// |
117 // Initialization | 108 // Initialization |
(...skipping 20 matching lines...) Expand all Loading... | |
138 CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> pContaine r(GetBrowser()); | 129 CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> pContaine r(GetBrowser()); |
139 if (!pContainer) | 130 if (!pContainer) |
140 { | 131 { |
141 return NULL; | 132 return NULL; |
142 } | 133 } |
143 | 134 |
144 CComPtr<IConnectionPoint> pPoint; | 135 CComPtr<IConnectionPoint> pPoint; |
145 HRESULT hr = pContainer->FindConnectionPoint(DIID_DWebBrowserEvents2, &pPoint) ; | 136 HRESULT hr = pContainer->FindConnectionPoint(DIID_DWebBrowserEvents2, &pPoint) ; |
146 if (FAILED(hr)) | 137 if (FAILED(hr)) |
147 { | 138 { |
148 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_FIND_CONNEC TION_POINT, L"Class::GetConnectionPoint - FindConnectionPoint") | 139 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_FIND_CONNEC TION_POINT, "Class::GetConnectionPoint - FindConnectionPoint") |
149 return NULL; | 140 return NULL; |
150 } | 141 } |
151 | 142 |
152 return pPoint; | 143 return pPoint; |
153 } | 144 } |
154 | 145 |
155 // This method tries to get a 'connection point' from the stored browser, which can be | 146 // This method tries to get a 'connection point' from the stored browser, which can be |
156 // used to attach or detach from the stream of browser events | 147 // used to attach or detach from the stream of browser events |
157 CComPtr<IConnectionPoint> CPluginClass::GetConnectionPointPropSink() | 148 CComPtr<IConnectionPoint> CPluginClass::GetConnectionPointPropSink() |
158 { | 149 { |
159 CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> pContaine r(GetBrowser()); | 150 CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> pContaine r(GetBrowser()); |
160 if (!pContainer) | 151 if (!pContainer) |
161 { | 152 { |
162 return NULL; | 153 return NULL; |
163 } | 154 } |
164 | 155 |
165 CComPtr<IConnectionPoint> pPoint; | 156 CComPtr<IConnectionPoint> pPoint; |
166 HRESULT hr = pContainer->FindConnectionPoint(IID_IPropertyNotifySink, &pPoint) ; | 157 HRESULT hr = pContainer->FindConnectionPoint(IID_IPropertyNotifySink, &pPoint) ; |
167 if (FAILED(hr)) | 158 if (FAILED(hr)) |
168 { | 159 { |
169 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_FIND_CONNEC TION_POINT, L"Class::GetConnectionPoint - FindConnectionPoint") | 160 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_FIND_CONNEC TION_POINT, "Class::GetConnectionPoint - FindConnectionPoint") |
170 return NULL; | 161 return NULL; |
171 } | 162 } |
172 | 163 |
173 return pPoint; | 164 return pPoint; |
174 } | 165 } |
175 | 166 |
176 | 167 |
177 HWND CPluginClass::GetBrowserHWND() const | 168 HWND CPluginClass::GetBrowserHWND() const |
178 { | 169 { |
179 SHANDLE_PTR hBrowserWndHandle = NULL; | 170 SHANDLE_PTR hBrowserWndHandle = NULL; |
180 | 171 |
181 CComQIPtr<IWebBrowser2> browser = GetBrowser(); | 172 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
182 if (browser) | 173 if (browser) |
183 { | 174 { |
184 HRESULT hr = browser->get_HWND(&hBrowserWndHandle); | 175 HRESULT hr = browser->get_HWND(&hBrowserWndHandle); |
185 if (FAILED(hr)) | 176 if (FAILED(hr)) |
186 { | 177 { |
187 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, L "Class::GetBrowserHWND - failed") | 178 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, " Class::GetBrowserHWND - failed") |
188 } | 179 } |
189 } | 180 } |
190 | 181 |
191 return (HWND)hBrowserWndHandle; | 182 return (HWND)hBrowserWndHandle; |
192 } | 183 } |
193 | 184 |
194 | 185 |
195 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const | 186 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const |
196 { | 187 { |
197 CComQIPtr<IWebBrowser2> browser; | 188 CComQIPtr<IWebBrowser2> browser; |
(...skipping 14 matching lines...) Expand all Loading... | |
212 | 203 |
213 s_criticalSectionLocal.Lock(); | 204 s_criticalSectionLocal.Lock(); |
214 { | 205 { |
215 browser = s_asyncWebBrowser2; | 206 browser = s_asyncWebBrowser2; |
216 } | 207 } |
217 s_criticalSectionLocal.Unlock(); | 208 s_criticalSectionLocal.Unlock(); |
218 | 209 |
219 return browser; | 210 return browser; |
220 } | 211 } |
221 | 212 |
222 std::wstring CPluginClass::GetBrowserUrl() const | 213 CString CPluginClass::GetBrowserUrl() const |
223 { | 214 { |
224 std::wstring url; | 215 CString url; |
225 | 216 |
226 CComQIPtr<IWebBrowser2> ccom_browser = GetBrowser(); | 217 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
227 if (ccom_browser) | 218 if (browser) |
228 { | 219 { |
229 Wrapper::Browser browser( ccom_browser ); | 220 CComBSTR bstrURL; |
230 if ( browser.Location_URL( url ) ) | 221 |
231 { | 222 if (SUCCEEDED(browser->get_LocationURL(&bstrURL))) |
232 Wrapper::Unescape_URL( url ); | 223 { |
224 url = bstrURL; | |
225 CPluginClient::UnescapeUrl(url); | |
233 } | 226 } |
234 } | 227 } |
235 else | 228 else |
236 { | 229 { |
237 url = m_tab->GetDocumentUrl(); | 230 url = m_tab->GetDocumentUrl(); |
238 } | 231 } |
232 | |
239 return url; | 233 return url; |
240 } | 234 } |
241 | 235 |
242 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) | 236 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) |
243 { | 237 { |
244 if (thisPtr == NULL) | 238 if (thisPtr == NULL) |
245 return 0; | 239 return 0; |
246 if (!((CPluginClass*)thisPtr)->InitObject(true)) | 240 if (!((CPluginClass*)thisPtr)->InitObject(true)) |
247 { | 241 { |
248 ((CPluginClass*)thisPtr)->Unadvice(); | 242 ((CPluginClass*)thisPtr)->Unadvice(); |
(...skipping 11 matching lines...) Expand all Loading... | |
260 // so we should handle that it is called this way several times during a session | 254 // so we should handle that it is called this way several times during a session |
261 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) | 255 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) |
262 { | 256 { |
263 CPluginSettings* settings = CPluginSettings::GetInstance(); | 257 CPluginSettings* settings = CPluginSettings::GetInstance(); |
264 CPluginSystem* system = CPluginSystem::GetInstance(); | 258 CPluginSystem* system = CPluginSystem::GetInstance(); |
265 | 259 |
266 MULTIPLE_VERSIONS_CHECK(); | 260 MULTIPLE_VERSIONS_CHECK(); |
267 | 261 |
268 if (unknownSite) | 262 if (unknownSite) |
269 { | 263 { |
270 std::wstring t[] = { | 264 |
271 L"======================================================================== ========", | 265 DEBUG_GENERAL(L"============================================================ ====================\nNEW TAB UI\n============================================== ==================================") |
272 L"NEW TAB UI", | |
273 L"======================================================================== ========" | |
274 }; | |
275 DEBUG_GENERAL(t); | |
276 | 266 |
277 HRESULT hr = ::CoInitialize(NULL); | 267 HRESULT hr = ::CoInitialize(NULL); |
278 if (FAILED(hr)) | 268 if (FAILED(hr)) |
279 { | 269 { |
280 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, L "Class::SetSite - CoInitialize"); | 270 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, " Class::SetSite - CoInitialize"); |
281 } | 271 } |
282 | 272 |
283 s_criticalSectionBrowser.Lock(); | 273 s_criticalSectionBrowser.Lock(); |
284 { | 274 { |
285 m_webBrowser2 = unknownSite; | 275 m_webBrowser2 = unknownSite; |
286 } | 276 } |
287 s_criticalSectionBrowser.Unlock(); | 277 s_criticalSectionBrowser.Unlock(); |
288 | 278 |
289 //register the mimefilter | 279 //register the mimefilter |
290 //and only mimefilter | 280 //and only mimefilter |
291 //on some few computers the mimefilter does not get properly registered when it is done on another thread | 281 //on some few computers the mimefilter does not get properly registered when it is done on another thread |
292 | 282 |
293 s_criticalSectionLocal.Lock(); | 283 s_criticalSectionLocal.Lock(); |
294 { | 284 { |
295 // Always register on startup, then check if we need to unregister in a se parate thread | 285 // Always register on startup, then check if we need to unregister in a se parate thread |
296 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); | 286 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); |
297 s_asyncWebBrowser2 = unknownSite; | 287 s_asyncWebBrowser2 = unknownSite; |
298 s_instances.Add(this); | 288 s_instances.insert(this); |
299 } | 289 } |
300 s_criticalSectionLocal.Unlock(); | 290 s_criticalSectionLocal.Unlock(); |
301 | 291 |
302 try | 292 try |
303 { | 293 { |
304 // Check if loaded as BHO | 294 // Check if loaded as BHO |
305 if (GetBrowser()) | 295 if (GetBrowser()) |
306 { | 296 { |
307 DEBUG_GENERAL(L"Loaded as BHO"); | 297 DEBUG_GENERAL("Loaded as BHO"); |
308 CComPtr<IConnectionPoint> pPoint = GetConnectionPoint(); | 298 CComPtr<IConnectionPoint> pPoint = GetConnectionPoint(); |
309 if (pPoint) | 299 if (pPoint) |
310 { | 300 { |
311 HRESULT hr = pPoint->Advise((IDispatch*)this, &m_nConnectionID); | 301 HRESULT hr = pPoint->Advise((IDispatch*)this, &m_nConnectionID); |
312 if (SUCCEEDED(hr)) | 302 if (SUCCEEDED(hr)) |
313 { | 303 { |
314 m_isAdviced = true; | 304 m_isAdviced = true; |
315 | 305 |
316 try | 306 try |
317 { | 307 { |
318 std::thread startInitObjectThread(StartInitObject, this); | 308 std::thread startInitObjectThread(StartInitObject, this); |
319 startInitObjectThread.detach(); // TODO: but actually we should wa it for the thread in the dtr. | 309 startInitObjectThread.detach(); // TODO: but actually we should wa it for the thread in the dtr. |
320 } | 310 } |
321 catch (const std::system_error& ex) | 311 catch (const std::system_error& ex) |
322 { | 312 { |
323 std::wstring errDescription( L"Class::Thread - Failed to create St artInitObject thread, " ); | 313 auto errDescription = std::string("Class::Thread - Failed to creat e StartInitObject thread, ") + |
324 errDescription += ABP::debug::widen( ex.code().message() + ex.what () ); | 314 ex.code().message() + ex.what(); |
325 DEBUG_ERROR_LOG( ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ER ROR_MAIN_THREAD_CREATE_PROCESS, errDescription ); | 315 DEBUG_ERROR_LOG(ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERR OR_MAIN_THREAD_CREATE_PROCESS, errDescription.c_str()); |
326 } | 316 } |
327 } | 317 } |
328 else | 318 else |
329 { | 319 { |
330 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADV ICE, L"Class::SetSite - Advice"); | 320 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADV ICE, "Class::SetSite - Advice"); |
331 } | 321 } |
332 } | 322 } |
333 } | 323 } |
334 else // Check if loaded as toolbar handler | 324 else // Check if loaded as toolbar handler |
335 { | 325 { |
336 DEBUG_GENERAL(L"Loaded as toolbar handler"); | 326 DEBUG_GENERAL("Loaded as toolbar handler"); |
337 CComPtr<IServiceProvider> pServiceProvider; | 327 CComPtr<IServiceProvider> pServiceProvider; |
338 | 328 |
339 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider); | 329 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider); |
340 if (SUCCEEDED(hr)) | 330 if (SUCCEEDED(hr)) |
341 { | 331 { |
342 if (pServiceProvider) | 332 if (pServiceProvider) |
343 { | 333 { |
344 s_criticalSectionBrowser.Lock(); | 334 s_criticalSectionBrowser.Lock(); |
345 { | 335 { |
346 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _webBrowser2); | 336 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _webBrowser2); |
347 if (SUCCEEDED(hr)) | 337 if (SUCCEEDED(hr)) |
348 { | 338 { |
349 if (m_webBrowser2) | 339 if (m_webBrowser2) |
350 { | 340 { |
351 InitObject(false); | 341 InitObject(false); |
352 } | 342 } |
353 } | 343 } |
354 else | 344 else |
355 { | 345 { |
356 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, L"Class::SetSite - QueryService (IID_IWebBrowserApp)"); | 346 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, "Class::SetSite - QueryService (IID_IWebBrowserApp)"); |
357 } | 347 } |
358 } | 348 } |
359 s_criticalSectionBrowser.Unlock(); | 349 s_criticalSectionBrowser.Unlock(); |
360 } | 350 } |
361 } | 351 } |
362 else | 352 else |
363 { | 353 { |
364 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_QUERY _SERVICE_PROVIDER, L"Class::SetSite - QueryInterface (service provider)"); | 354 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_QUERY _SERVICE_PROVIDER, "Class::SetSite - QueryInterface (service provider)"); |
365 } | 355 } |
366 } | 356 } |
367 } | 357 } |
368 catch (std::runtime_error e) | 358 catch (std::runtime_error e) |
369 { | 359 { |
370 DEBUG_ERROR(e.what()); | 360 DEBUG_ERROR(e.what()); |
371 Unadvice(); | 361 Unadvice(); |
372 } | 362 } |
373 } | 363 } |
374 else | 364 else |
(...skipping 17 matching lines...) Expand all Loading... | |
392 | 382 |
393 m_hTabWnd = NULL; | 383 m_hTabWnd = NULL; |
394 m_hStatusBarWnd = NULL; | 384 m_hStatusBarWnd = NULL; |
395 | 385 |
396 // Remove instance from the list, shutdown threads | 386 // Remove instance from the list, shutdown threads |
397 HANDLE hMainThread = NULL; | 387 HANDLE hMainThread = NULL; |
398 HANDLE hTabThread = NULL; | 388 HANDLE hTabThread = NULL; |
399 | 389 |
400 s_criticalSectionLocal.Lock(); | 390 s_criticalSectionLocal.Lock(); |
401 { | 391 { |
402 s_instances.Remove(this); | 392 s_instances.erase(this); |
403 | 393 |
404 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC urrentThreadId()); | 394 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC urrentThreadId()); |
405 if (it != s_threadInstances.end()) | 395 if (it != s_threadInstances.end()) |
406 { | 396 { |
407 s_threadInstances.erase(it); | 397 s_threadInstances.erase(it); |
408 } | 398 } |
409 if (s_instances.GetSize() == 0) | 399 if (s_instances.empty()) |
410 { | 400 { |
411 CPluginClientFactory::ReleaseMimeFilterClientInstance(); | 401 CPluginClientFactory::ReleaseMimeFilterClientInstance(); |
412 } | 402 } |
413 } | 403 } |
414 s_criticalSectionLocal.Unlock(); | 404 s_criticalSectionLocal.Unlock(); |
415 | 405 |
416 // Release browser interface | 406 // Release browser interface |
417 s_criticalSectionBrowser.Lock(); | 407 s_criticalSectionBrowser.Lock(); |
418 { | 408 { |
419 m_webBrowser2.Release(); | 409 m_webBrowser2.Release(); |
420 } | 410 } |
421 s_criticalSectionBrowser.Unlock(); | 411 s_criticalSectionBrowser.Unlock(); |
422 | 412 |
423 std::wstring t[] = { | 413 DEBUG_GENERAL("============================================================= ===================\nNEW TAB UI - END\n========================================= =======================================") |
424 L"======================================================================== ========", | |
425 L"NEW TAB UI - END", | |
426 L"======================================================================== ========" | |
427 }; | |
428 DEBUG_GENERAL( t ); | |
429 | 414 |
430 ::CoUninitialize(); | 415 ::CoUninitialize(); |
431 } | 416 } |
432 | 417 |
433 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); | 418 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); |
434 } | 419 } |
435 | 420 |
436 bool CPluginClass::IsStatusBarEnabled() | 421 bool CPluginClass::IsStatusBarEnabled() |
437 { | 422 { |
438 DEBUG_GENERAL(L"IsStatusBarEnabled start"); | 423 DEBUG_GENERAL("IsStatusBarEnabled start"); |
439 HKEY pHkey; | 424 HKEY pHkey; |
440 HKEY pHkeySub; | 425 HKEY pHkeySub; |
441 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey); | 426 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey); |
442 DWORD trueth = 1; | 427 DWORD trueth = 1; |
443 DWORD truethSize = sizeof(DWORD); | 428 DWORD truethSize = sizeof(DWORD); |
444 RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\Main", &pHkeySub); | 429 RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\Main", &pHkeySub); |
445 LONG res = RegQueryValueEx(pHkeySub, L"StatusBarWeb", NULL, NULL, (BYTE*)&true th, &truethSize); | 430 LONG res = RegQueryValueEx(pHkeySub, L"StatusBarWeb", NULL, NULL, (BYTE*)&true th, &truethSize); |
446 RegCloseKey(pHkey); | 431 RegCloseKey(pHkey); |
447 if (res != ERROR_SUCCESS) | 432 if (res != ERROR_SUCCESS) |
448 { | 433 { |
449 res = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\MINIE", &p HkeySub); | 434 res = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\MINIE", &p HkeySub); |
450 if (res == ERROR_SUCCESS) | 435 if (res == ERROR_SUCCESS) |
451 { | 436 { |
452 LONG res = RegQueryValueEx(pHkeySub, L"ShowStatusBar", NULL, NULL, (BYTE*) &trueth, &truethSize); | 437 LONG res = RegQueryValueEx(pHkeySub, L"ShowStatusBar", NULL, NULL, (BYTE*) &trueth, &truethSize); |
453 if (res == ERROR_SUCCESS) | 438 if (res == ERROR_SUCCESS) |
454 { | 439 { |
455 RegCloseKey(pHkey); | 440 RegCloseKey(pHkey); |
456 } | 441 } |
457 } | 442 } |
458 } | 443 } |
459 DEBUG_GENERAL(L"IsStatusBarEnabled end"); | 444 DEBUG_GENERAL("IsStatusBarEnabled end"); |
460 return trueth == 1; | 445 return trueth == 1; |
461 } | 446 } |
462 | 447 |
463 void CPluginClass::ShowStatusBar() | 448 void CPluginClass::ShowStatusBar() |
464 { | 449 { |
465 DEBUG_GENERAL(L"ShowStatusBar start"); | 450 DEBUG_GENERAL("ShowStatusBar start"); |
466 | 451 |
467 VARIANT_BOOL isVisible; | 452 VARIANT_BOOL isVisible; |
468 | 453 |
469 | 454 |
470 CComQIPtr<IWebBrowser2> ccom_browser = GetAsyncBrowser(); | 455 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); |
471 if (ccom_browser) | 456 if (browser) |
472 { | 457 { |
473 Wrapper::Browser browser( ccom_browser ); | |
474 HRESULT hr = S_OK; | 458 HRESULT hr = S_OK; |
475 hr = ccom_browser->get_StatusBar(&isVisible); | 459 hr = browser->get_StatusBar(&isVisible); |
476 if (SUCCEEDED(hr)) | 460 if (SUCCEEDED(hr)) |
477 { | 461 { |
478 if (!isVisible) | 462 if (!isVisible) |
479 { | 463 { |
480 SHANDLE_PTR pBrowserHWnd; | 464 SHANDLE_PTR pBrowserHWnd; |
481 ccom_browser->get_HWND((SHANDLE_PTR*)&pBrowserHWnd); | 465 browser->get_HWND((SHANDLE_PTR*)&pBrowserHWnd); |
482 Dictionary* dictionary = Dictionary::GetInstance(); | 466 Dictionary* dictionary = Dictionary::GetInstance(); |
483 | 467 |
484 HKEY pHkey; | 468 HKEY pHkey; |
485 HKEY pHkeySub; | 469 HKEY pHkeySub; |
486 LSTATUS regRes = 0; | 470 LSTATUS regRes = 0; |
487 regRes = RegOpenCurrentUser(KEY_WRITE, &pHkey); | 471 regRes = RegOpenCurrentUser(KEY_WRITE, &pHkey); |
488 | 472 |
489 // Do we have enough rights to enable a status bar? | 473 // Do we have enough rights to enable a status bar? |
490 if (regRes != 0) | 474 if (regRes != 0) |
491 { | 475 { |
(...skipping 11 matching lines...) Expand all Loading... | |
503 MB_YESNO); | 487 MB_YESNO); |
504 if (res == IDYES) | 488 if (res == IDYES) |
505 { | 489 { |
506 DWORD trueth = 1; | 490 DWORD trueth = 1; |
507 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M INIE", &pHkeySub); | 491 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M INIE", &pHkeySub); |
508 regRes = RegSetValueEx(pHkeySub, L"ShowStatusBar", 0, REG_DWORD, (BYTE *)&trueth, sizeof(DWORD)); | 492 regRes = RegSetValueEx(pHkeySub, L"ShowStatusBar", 0, REG_DWORD, (BYTE *)&trueth, sizeof(DWORD)); |
509 regRes = RegCloseKey(pHkeySub); | 493 regRes = RegCloseKey(pHkeySub); |
510 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M ain", &pHkeySub); | 494 regRes = RegOpenKey(pHkey, L"Software\\Microsoft\\Internet Explorer\\M ain", &pHkeySub); |
511 regRes = RegSetValueEx(pHkeySub, L"StatusBarWeb", 0, REG_DWORD, (BYTE* )&trueth, sizeof(DWORD)); | 495 regRes = RegSetValueEx(pHkeySub, L"StatusBarWeb", 0, REG_DWORD, (BYTE* )&trueth, sizeof(DWORD)); |
512 regRes = RegCloseKey(pHkeySub); | 496 regRes = RegCloseKey(pHkeySub); |
513 hr = ccom_browser->put_StatusBar(TRUE); | 497 hr = browser->put_StatusBar(TRUE); |
514 if (FAILED(hr)) | 498 if (FAILED(hr)) |
515 { | 499 { |
516 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_PUT_STATUSBAR, L"Class::Enable statusbar"); | 500 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_PUT_STATUSBAR, "Class::Enable statusbar"); |
517 } | 501 } |
518 CreateStatusBarPane(); | 502 CreateStatusBarPane(); |
519 | 503 |
520 /* | 504 // We need to restart the tab now, to enable the status bar properly |
521 * We need to restart the tab now, to enable the status bar properly | 505 VARIANT vFlags; |
522 */ | 506 vFlags.vt = VT_I4; |
523 std::wstring location; | 507 vFlags.intVal = navOpenInNewTab; |
524 browser.Location_URL( location ); | 508 |
525 HRESULT hr = browser.navigate( location ); | 509 CComBSTR curLoc; |
526 if ( FAILED(hr) ) | 510 browser->get_LocationURL(&curLoc); |
511 HRESULT hr = browser->Navigate(curLoc, &vFlags, NULL, NULL, NULL); | |
512 if (FAILED(hr)) | |
527 { | 513 { |
528 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION , L"Navigation::Failed") | 514 vFlags.intVal = navOpenInNewWindow; |
515 | |
516 hr = browser->Navigate(CComBSTR(curLoc), &vFlags, NULL, NULL, NULL); | |
517 if (FAILED(hr)) | |
518 { | |
519 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATI ON, "Navigation::Failed") | |
520 } | |
529 } | 521 } |
530 ccom_browser->Quit(); | 522 browser->Quit(); |
531 } | 523 } |
532 } | 524 } |
533 } | 525 } |
534 else | 526 else |
535 { | 527 { |
536 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_STATUSBAR, L"Clas s::Get statusbar state"); | 528 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_STATUSBAR, "Class ::Get statusbar state"); |
537 } | 529 } |
538 } | 530 } |
539 DEBUG_GENERAL(L"ShowStatusBar end"); | 531 DEBUG_GENERAL("ShowStatusBar end"); |
540 } | 532 } |
541 | 533 |
542 void CPluginClass::BeforeNavigate2(DISPPARAMS* pDispParams) | 534 void CPluginClass::BeforeNavigate2(DISPPARAMS* pDispParams) |
543 { | 535 { |
544 | 536 |
545 if (pDispParams->cArgs < 7) | 537 if (pDispParams->cArgs < 7) |
546 { | 538 { |
547 return; | 539 return; |
548 } | 540 } |
549 //Register a mime filter if it's not registered yet | 541 //Register a mime filter if it's not registered yet |
550 if (s_mimeFilter == NULL) | 542 if (s_mimeFilter == NULL) |
551 { | 543 { |
552 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); | 544 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); |
553 } | 545 } |
554 | 546 |
555 // Get the IWebBrowser2 interface | 547 // Get the IWebBrowser2 interface |
556 CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> WebBrowser2Ptr; | 548 CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> WebBrowser2Ptr; |
557 VARTYPE vt = pDispParams->rgvarg[6].vt; | 549 VARTYPE vt = pDispParams->rgvarg[6].vt; |
558 if (vt == VT_DISPATCH) | 550 if (vt == VT_DISPATCH) |
559 { | 551 { |
560 // The implementation of this assignment operator contains the QueryInterfac e call. | |
561 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; | 552 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; |
562 } | 553 } |
563 else | 554 else |
564 { | 555 { |
565 // Wrong type, return. | 556 // Wrong type, return. |
566 return; | 557 return; |
567 } | 558 } |
568 | 559 |
569 // Get the URL | 560 // Get the URL |
570 std::wstring url; | 561 CString url; |
571 vt = pDispParams->rgvarg[5].vt; | 562 vt = pDispParams->rgvarg[5].vt; |
572 if (vt == VT_BYREF + VT_VARIANT) | 563 if (vt == VT_BYREF + VT_VARIANT) |
573 { | 564 { |
574 url = pDispParams->rgvarg[5].pvarVal->bstrVal; | 565 url = pDispParams->rgvarg[5].pvarVal->bstrVal; |
575 Wrapper::Unescape_URL( url ); | 566 |
567 CPluginClient::UnescapeUrl(url); | |
576 } | 568 } |
577 else | 569 else |
578 { | 570 { |
579 // Wrong type, return. | 571 // Wrong type, return. |
580 return; | 572 return; |
581 } | 573 } |
582 | 574 |
583 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page | 575 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page |
584 CPluginClient* client = CPluginClient::GetInstance(); | 576 CPluginClient* client = CPluginClient::GetInstance(); |
585 | 577 |
586 // This comparison means "begins with" | 578 if (url.Find(L"javascript") == 0) |
587 if ( url.compare( 0, 10, L"javascript" ) == 0 ) | |
588 { | 579 { |
589 } | 580 } |
590 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) | 581 else if (GetBrowser().IsEqualObject(WebBrowser2Ptr)) |
591 { | 582 { |
592 m_tab->OnNavigate( url ); | 583 m_tab->OnNavigate(url); |
593 | 584 |
594 std::wstring t[] = { | 585 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + url + "\n=================== =============================================================") |
595 L"======================================================================== ========", | |
596 L"Begin main navigation url:" + url, | |
597 L"======================================================================== ========" | |
598 }; | |
599 DEBUG_GENERAL( t ); | |
600 | 586 |
601 #ifdef ENABLE_DEBUG_RESULT | 587 #ifdef ENABLE_DEBUG_RESULT |
602 CPluginDebug::DebugResultDomain( url ); | 588 CPluginDebug::DebugResultDomain(url); |
603 #endif | 589 #endif |
604 | 590 |
605 UpdateStatusBar(); | 591 UpdateStatusBar(); |
606 } | 592 } |
607 else | 593 else |
608 { | 594 { |
609 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) | 595 DEBUG_NAVI(L"Navi::Begin navigation url:" + url) |
610 | 596 |
611 #ifdef SUPPORT_FRAME_CACHING | 597 #ifdef SUPPORT_FRAME_CACHING |
612 m_tab->CacheFrame( url ); | 598 m_tab->CacheFrame(url); |
613 #endif | 599 #endif |
614 } | 600 } |
615 } | 601 } |
616 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) | 602 STDMETHODIMP CPluginClass::OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags) |
617 { | 603 { |
618 DEBUG_GENERAL(L"Tab changed"); | 604 DEBUG_GENERAL("Tab changed"); |
619 bool newtabshown = pDispParams->rgvarg[1].intVal==3; | 605 bool newtabshown = pDispParams->rgvarg[1].intVal==3; |
620 if (newtabshown) | 606 if (newtabshown) |
621 { | 607 { |
622 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge tCurrentThreadId()); | 608 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge tCurrentThreadId()); |
623 if (it == s_threadInstances.end()) | 609 if (it == s_threadInstances.end()) |
624 { | 610 { |
625 s_threadInstances[::GetCurrentThreadId()] = this; | 611 s_threadInstances[::GetCurrentThreadId()] = this; |
626 | 612 |
627 | 613 |
628 if (!m_isInitializedOk) | 614 if (!m_isInitializedOk) |
629 { | 615 { |
630 m_isInitializedOk = true; | 616 m_isInitializedOk = true; |
631 if (!InitObject(true)) | 617 if (!InitObject(true)) |
632 { | 618 { |
633 // Unadvice(); | 619 // Unadvice(); |
634 } | 620 } |
635 UpdateStatusBar(); | 621 UpdateStatusBar(); |
636 } | 622 } |
637 } | 623 } |
638 } | 624 } |
639 notificationMessage.Hide(); | 625 notificationMessage.Hide(); |
640 DEBUG_GENERAL(L"Tab change end"); | 626 DEBUG_GENERAL("Tab change end"); |
641 return VARIANT_TRUE; | 627 return VARIANT_TRUE; |
642 } | 628 } |
643 | 629 |
644 // This gets called whenever there's a browser event | 630 // This gets called whenever there's a browser event |
645 STDMETHODIMP CPluginClass::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, W ORD wFlags, DISPPARAMS* pDispParams, VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) | 631 STDMETHODIMP CPluginClass::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, W ORD wFlags, DISPPARAMS* pDispParams, VARIANT* pvarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) |
646 { | 632 { |
647 WCHAR tmp[256]; | 633 WCHAR tmp[256]; |
648 wsprintf(tmp, L"Invoke: %d\n", dispidMember); | 634 wsprintf(tmp, L"Invoke: %d\n", dispidMember); |
649 DEBUG_GENERAL(tmp); | 635 DEBUG_GENERAL(tmp); |
650 switch (dispidMember) | 636 switch (dispidMember) |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
691 case DISPID_BEFORENAVIGATE: | 677 case DISPID_BEFORENAVIGATE: |
692 DEBUG_NAVI("Navi::BeforeNavigate") | 678 DEBUG_NAVI("Navi::BeforeNavigate") |
693 return VARIANT_TRUE; | 679 return VARIANT_TRUE; |
694 case DISPID_COMMANDSTATECHANGE: | 680 case DISPID_COMMANDSTATECHANGE: |
695 if (m_hPaneWnd == NULL) | 681 if (m_hPaneWnd == NULL) |
696 { | 682 { |
697 CreateStatusBarPane(); | 683 CreateStatusBarPane(); |
698 } | 684 } |
699 else | 685 else |
700 { | 686 { |
701 if ( ABP::IE::installed_major_version() > 6 ) | 687 if (CPluginClient::GetInstance()->GetIEVersion() > 6) |
702 { | 688 { |
703 RECT rect; | 689 RECT rect; |
704 BOOL rectRes = GetClientRect(m_hStatusBarWnd, &rect); | 690 BOOL rectRes = GetClientRect(m_hStatusBarWnd, &rect); |
705 if (rectRes == TRUE) | 691 if (rectRes == TRUE) |
706 { | 692 { |
707 MoveWindow(m_hPaneWnd, rect.right - 200, 0, m_nPaneWidth, rect.bottom - rect.top, TRUE); | 693 MoveWindow(m_hPaneWnd, rect.right - 200, 0, m_nPaneWidth, rect.bottom - rect.top, TRUE); |
708 } | 694 } |
709 } | 695 } |
710 } | 696 } |
711 break; | 697 break; |
(...skipping 19 matching lines...) Expand all Loading... | |
731 { | 717 { |
732 m_tab->OnDownloadComplete(browser); | 718 m_tab->OnDownloadComplete(browser); |
733 } | 719 } |
734 } | 720 } |
735 break; | 721 break; |
736 | 722 |
737 case DISPID_DOCUMENTCOMPLETE: | 723 case DISPID_DOCUMENTCOMPLETE: |
738 { | 724 { |
739 DEBUG_NAVI("Navi::Document Complete") | 725 DEBUG_NAVI("Navi::Document Complete") |
740 | 726 |
741 CComQIPtr<IWebBrowser2> ccom_browser = GetBrowser(); | 727 CComQIPtr<IWebBrowser2> browser = GetBrowser(); |
742 | 728 |
743 if (ccom_browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt = = VT_DISPATCH) | 729 if (browser && pDispParams->cArgs >= 2 && pDispParams->rgvarg[1].vt == VT_ DISPATCH) |
744 { | 730 { |
745 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; | 731 CComQIPtr<IWebBrowser2> pBrowser = pDispParams->rgvarg[1].pdispVal; |
746 if (pBrowser) | 732 if (pBrowser) |
747 { | 733 { |
748 Wrapper::Browser browser( pBrowser ); | 734 CString url; |
749 std::wstring url; | 735 CComBSTR bstrUrl; |
750 if ( browser.Location_URL( url ) && !url.empty() ) | 736 if (SUCCEEDED(pBrowser->get_LocationURL(&bstrUrl)) && ::SysStringLen(b strUrl) > 0) |
751 { | 737 { |
752 Wrapper::Unescape_URL(url); | 738 url = bstrUrl; |
753 m_tab->OnDocumentComplete(ccom_browser, url, ccom_browser.IsEqualObj ect(pBrowser)); | 739 |
740 CPluginClient::UnescapeUrl(url); | |
741 | |
742 m_tab->OnDocumentComplete(browser, url, browser.IsEqualObject(pBrows er)); | |
754 } | 743 } |
755 } | 744 } |
756 } | 745 } |
757 } | 746 } |
758 break; | 747 break; |
759 | 748 |
760 case DISPID_ONQUIT: | 749 case DISPID_ONQUIT: |
761 case DISPID_QUIT: | 750 case DISPID_QUIT: |
762 { | 751 { |
763 Unadvice(); | 752 Unadvice(); |
764 } | 753 } |
765 break; | 754 break; |
766 | 755 |
767 default: | 756 default: |
768 { | 757 { |
769 std::wostringstream msg; | 758 CString did; |
770 msg << L"Navi::Default DispId:"; | 759 did.Format(L"DispId:%u", dispidMember); |
771 msg << static_cast< unsigned long >( dispidMember ); | 760 |
772 DEBUG_NAVI( msg.str() ) | 761 DEBUG_NAVI(L"Navi::Default " + did) |
773 } | 762 } |
774 | 763 |
775 // do nothing | 764 // do nothing |
776 break; | 765 break; |
777 } | 766 } |
778 | 767 |
779 return VARIANT_TRUE; | 768 return VARIANT_TRUE; |
780 } | 769 } |
781 | 770 |
782 bool CPluginClass::InitObject(bool bBHO) | 771 bool CPluginClass::InitObject(bool bBHO) |
783 { | 772 { |
784 DEBUG_GENERAL(L"InitObject"); | 773 DEBUG_GENERAL("InitObject"); |
785 CPluginSettings* settings = CPluginSettings::GetInstance(); | 774 CPluginSettings* settings = CPluginSettings::GetInstance(); |
786 | 775 |
787 if (!settings->GetPluginEnabled()) | 776 if (!settings->GetPluginEnabled()) |
788 { | 777 { |
789 s_mimeFilter->Unregister(); | 778 s_mimeFilter->Unregister(); |
790 } | 779 } |
791 | 780 |
792 // Load theme module | 781 // Load theme module |
793 s_criticalSectionLocal.Lock(); | 782 s_criticalSectionLocal.Lock(); |
794 { | 783 { |
795 if (!s_hUxtheme) | 784 if (!s_hUxtheme) |
796 { | 785 { |
797 s_hUxtheme = ::GetModuleHandleW(L"uxtheme.dll"); | 786 s_hUxtheme = ::GetModuleHandle(_T("uxtheme.dll")); |
798 if (s_hUxtheme) | 787 if (s_hUxtheme) |
799 { | 788 { |
800 pfnClose = (CLOSETHEMEDATA)::GetProcAddress(s_hUxtheme, "CloseThemeData" ); | 789 pfnClose = (CLOSETHEMEDATA)::GetProcAddress(s_hUxtheme, "CloseThemeData" ); |
801 if (!pfnClose) | 790 if (!pfnClose) |
802 { | 791 { |
803 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_CLOSE, L"Class::InitObject - GetProcAddress(CloseThemeData)"); | 792 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_CLOSE, "Class::InitObject - GetProcAddress(CloseThemeData)"); |
804 } | 793 } |
805 | 794 |
806 pfnDrawThemeBackground = (DRAWTHEMEBACKGROUND)::GetProcAddress(s_hUxthem e, "DrawThemeBackground"); | 795 pfnDrawThemeBackground = (DRAWTHEMEBACKGROUND)::GetProcAddress(s_hUxthem e, "DrawThemeBackground"); |
807 if (!pfnDrawThemeBackground) | 796 if (!pfnDrawThemeBackground) |
808 { | 797 { |
809 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_DRAW_BACKGROUND, L"Class::InitObject - GetProcAddress(DrawThemeBackgrou nd)"); | 798 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_DRAW_BACKGROUND, "Class::InitObject - GetProcAddress(DrawThemeBackgroun d)"); |
810 } | 799 } |
811 | 800 |
812 pfnOpenThemeData = (OPENTHEMEDATA)::GetProcAddress(s_hUxtheme, "OpenThem eData"); | 801 pfnOpenThemeData = (OPENTHEMEDATA)::GetProcAddress(s_hUxtheme, "OpenThem eData"); |
813 if (!pfnOpenThemeData) | 802 if (!pfnOpenThemeData) |
814 { | 803 { |
815 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_OPEN, L"Class::InitObject - GetProcAddress(pfnOpenThemeData)"); | 804 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _UXTHEME_OPEN, "Class::InitObject - GetProcAddress(pfnOpenThemeData)"); |
816 } | 805 } |
817 } | 806 } |
818 else | 807 else |
819 { | 808 { |
820 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_U XTHEME, L"Class::InitObject - GetModuleHandle(uxtheme.dll)"); | 809 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_U XTHEME, "Class::InitObject - GetModuleHandle(uxtheme.dll)"); |
821 } | 810 } |
822 } | 811 } |
823 } | 812 } |
824 s_criticalSectionLocal.Unlock(); | 813 s_criticalSectionLocal.Unlock(); |
825 | 814 |
826 // Register pane class | 815 // Register pane class |
827 if (!GetAtomPaneClass()) | 816 if (!GetAtomPaneClass()) |
828 { | 817 { |
829 WNDCLASSEX wcex; | 818 WNDCLASSEX wcex; |
830 | 819 |
(...skipping 11 matching lines...) Expand all Loading... | |
842 wcex.hIconSm = NULL; | 831 wcex.hIconSm = NULL; |
843 | 832 |
844 s_criticalSectionLocal.Lock(); | 833 s_criticalSectionLocal.Lock(); |
845 { | 834 { |
846 s_atomPaneClass = ::RegisterClassEx(&wcex); | 835 s_atomPaneClass = ::RegisterClassEx(&wcex); |
847 } | 836 } |
848 s_criticalSectionLocal.Unlock(); | 837 s_criticalSectionLocal.Unlock(); |
849 | 838 |
850 if (!GetAtomPaneClass()) | 839 if (!GetAtomPaneClass()) |
851 { | 840 { |
852 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, L"Class::InitObject - RegisterClassEx"); | 841 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, "Class::InitObject - RegisterClassEx"); |
853 return false; | 842 return false; |
854 } | 843 } |
855 } | 844 } |
856 | 845 |
857 | 846 |
858 int ieVersion = ABP::IE::installed_major_version(); | 847 int ieVersion = CPluginClient::GetInstance()->GetIEVersion(); |
859 // Create status pane | 848 // Create status pane |
860 if (bBHO && ieVersion > 6 && !CreateStatusBarPane()) | 849 if (bBHO && ieVersion > 6 && !CreateStatusBarPane()) |
861 { | 850 { |
862 return false; | 851 return false; |
863 } | 852 } |
864 | 853 |
865 if (CPluginClient::GetInstance()->IsFirstRun()) | 854 if (CPluginClient::GetInstance()->IsFirstRun()) |
866 { | 855 { |
867 // IE6 can't be accessed from another thread, execute in current thread | 856 // IE6 can't be accessed from another thread, execute in current thread |
868 if (ieVersion < 7) | 857 if (ieVersion < 7) |
(...skipping 17 matching lines...) Expand all Loading... | |
886 { | 875 { |
887 CriticalSection::Lock lock(m_csStatusBar); | 876 CriticalSection::Lock lock(m_csStatusBar); |
888 | 877 |
889 CPluginClient* client = CPluginClient::GetInstance(); | 878 CPluginClient* client = CPluginClient::GetInstance(); |
890 | 879 |
891 TCHAR szClassName[MAX_PATH]; | 880 TCHAR szClassName[MAX_PATH]; |
892 // Get browser window and url | 881 // Get browser window and url |
893 HWND hBrowserWnd = GetBrowserHWND(); | 882 HWND hBrowserWnd = GetBrowserHWND(); |
894 if (!hBrowserWnd) | 883 if (!hBrowserWnd) |
895 { | 884 { |
896 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, L" Class::CreateStatusBarPane - No status bar") | 885 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::CreateStatusBarPane - No status bar") |
897 return false; | 886 return false; |
898 } | 887 } |
899 | 888 |
900 // Looking for a TabWindowClass window in IE7 | 889 // Looking for a TabWindowClass window in IE7 |
901 // the last one should be parent for statusbar | 890 // the last one should be parent for statusbar |
902 HWND hWndStatusBar = NULL; | 891 HWND hWndStatusBar = NULL; |
903 | 892 |
904 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); | 893 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); |
905 UINT amoundOfNewTabs = 0; | 894 UINT amoundOfNewTabs = 0; |
906 HWND uniqueNewTab = NULL; | 895 HWND uniqueNewTab = NULL; |
(...skipping 14 matching lines...) Expand all Loading... | |
921 if (hTabWnd2) | 910 if (hTabWnd2) |
922 { | 911 { |
923 DWORD nProcessId; | 912 DWORD nProcessId; |
924 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); | 913 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); |
925 if (::GetCurrentProcessId() == nProcessId) | 914 if (::GetCurrentProcessId() == nProcessId) |
926 { | 915 { |
927 bool bExistingTab = false; | 916 bool bExistingTab = false; |
928 | 917 |
929 s_criticalSectionLocal.Lock(); | 918 s_criticalSectionLocal.Lock(); |
930 { | 919 { |
931 for (int i = 0; i < s_instances.GetSize(); i++) | 920 for (auto instance : s_instances) |
932 { | 921 { |
933 if (s_instances[i]->m_hTabWnd == hTabWnd2) | 922 if (instance->m_hTabWnd == hTabWnd2) |
934 { | 923 { |
935 | |
936 bExistingTab = true; | 924 bExistingTab = true; |
937 break; | 925 break; |
938 } | 926 } |
939 } | 927 } |
940 } | 928 } |
941 s_criticalSectionLocal.Unlock(); | 929 s_criticalSectionLocal.Unlock(); |
942 | 930 |
943 if (!bExistingTab) | 931 if (!bExistingTab) |
944 { | 932 { |
945 amoundOfNewTabs ++; | 933 amoundOfNewTabs ++; |
(...skipping 22 matching lines...) Expand all Loading... | |
968 { | 956 { |
969 hWndStatusBar = hWnd; | 957 hWndStatusBar = hWnd; |
970 break; | 958 break; |
971 } | 959 } |
972 | 960 |
973 hWnd = ::GetWindow(hWnd, GW_HWNDNEXT); | 961 hWnd = ::GetWindow(hWnd, GW_HWNDNEXT); |
974 } | 962 } |
975 | 963 |
976 if (!hWndStatusBar) | 964 if (!hWndStatusBar) |
977 { | 965 { |
978 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_WIN, L"Clas s::CreateStatusBarPane - No status bar") | 966 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_WIN, "Class ::CreateStatusBarPane - No status bar") |
979 return true; | 967 return true; |
980 } | 968 } |
981 | 969 |
982 // Calculate pane height | 970 // Calculate pane height |
983 Local::Rectangle rcStatusBar; | 971 AdblockPlus::Rectangle rcStatusBar; |
984 ::GetClientRect(hWndStatusBar, &rcStatusBar); | 972 ::GetClientRect(hWndStatusBar, &rcStatusBar); |
985 | 973 |
986 if (rcStatusBar.Height() > 0) | 974 if (rcStatusBar.Height() > 0) |
987 { | 975 { |
988 #ifdef _DEBUG | 976 #ifdef _DEBUG |
989 m_nPaneWidth = 70; | 977 m_nPaneWidth = 70; |
990 #else | 978 #else |
991 m_nPaneWidth = min(rcStatusBar.Height(), 22); | 979 m_nPaneWidth = min(rcStatusBar.Height(), 22); |
992 #endif | 980 #endif |
993 } | 981 } |
(...skipping 12 matching lines...) Expand all Loading... | |
1006 _T(""), | 994 _T(""), |
1007 WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, | 995 WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, |
1008 rcStatusBar.Width() - 500,0,m_nPaneWidth,rcStatusBar.Height(), | 996 rcStatusBar.Width() - 500,0,m_nPaneWidth,rcStatusBar.Height(), |
1009 hWndStatusBar, | 997 hWndStatusBar, |
1010 (HMENU)3671, | 998 (HMENU)3671, |
1011 _Module.m_hInst, | 999 _Module.m_hInst, |
1012 NULL); | 1000 NULL); |
1013 | 1001 |
1014 if (!hWndNewPane) | 1002 if (!hWndNewPane) |
1015 { | 1003 { |
1016 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_CREATE_ST ATUSBAR_PANE, L"Class::CreateStatusBarPane - CreateWindowEx") | 1004 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_CREATE_ST ATUSBAR_PANE, "Class::CreateStatusBarPane - CreateWindowEx") |
1017 return false; | 1005 return false; |
1018 } | 1006 } |
1019 | 1007 |
1020 DEBUG_GENERAL(L"ABP window created"); | 1008 DEBUG_GENERAL("ABP window created"); |
1021 m_hTabWnd = hTabWnd; | 1009 m_hTabWnd = hTabWnd; |
1022 m_hStatusBarWnd = hWndStatusBar; | 1010 m_hStatusBarWnd = hWndStatusBar; |
1023 m_hPaneWnd = hWndNewPane; | 1011 m_hPaneWnd = hWndNewPane; |
1024 | 1012 |
1025 UpdateTheme(); | 1013 UpdateTheme(); |
1026 | 1014 |
1027 // Subclass status bar | 1015 // Subclass status bar |
1028 m_pWndProcStatus = (WNDPROC)SetWindowLongPtr(hWndStatusBar, GWLP_WNDPROC, (LPA RAM)(WNDPROC)NewStatusProc); | 1016 m_pWndProcStatus = (WNDPROC)SetWindowLongPtr(hWndStatusBar, GWLP_WNDPROC, (LPA RAM)(WNDPROC)NewStatusProc); |
1029 | 1017 |
1030 // Adjust pane | 1018 // Adjust pane |
(...skipping 12 matching lines...) Expand all Loading... | |
1043 HDC hdc = GetWindowDC(m_hStatusBarWnd); | 1031 HDC hdc = GetWindowDC(m_hStatusBarWnd); |
1044 SendMessage(m_hStatusBarWnd, WM_PAINT, (WPARAM)hdc, 0); | 1032 SendMessage(m_hStatusBarWnd, WM_PAINT, (WPARAM)hdc, 0); |
1045 ReleaseDC(m_hStatusBarWnd, hdc); | 1033 ReleaseDC(m_hStatusBarWnd, hdc); |
1046 | 1034 |
1047 return true; | 1035 return true; |
1048 } | 1036 } |
1049 | 1037 |
1050 void CPluginClass::FirstRunThread() | 1038 void CPluginClass::FirstRunThread() |
1051 { | 1039 { |
1052 CoInitialize(NULL); | 1040 CoInitialize(NULL); |
1053 | 1041 VARIANT vFlags; |
1054 Wrapper::Browser browser( GetAsyncBrowser() ); | 1042 vFlags.vt = VT_I4; |
1055 HRESULT hr = browser.navigate( FirstRunPageFileUrl() ); | 1043 vFlags.intVal = navOpenInNewTab; |
1056 if ( FAILED( hr ) ) | 1044 |
1057 { | 1045 CComBSTR navigatePath = CComBSTR(FirstRunPageFileUrl().c_str()); |
1058 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION_WELCOME , L"Navigation::Welcome page failed") | 1046 |
1059 } | 1047 HRESULT hr = GetAsyncBrowser()->Navigate(navigatePath, &vFlags, NULL, NULL, NU LL); |
1060 } | 1048 if (FAILED(hr)) |
1061 | 1049 { |
1050 vFlags.intVal = navOpenInNewWindow; | |
1051 hr = GetAsyncBrowser()->Navigate(navigatePath, &vFlags, NULL, NULL, NULL); | |
1052 } | |
1053 | |
1054 if (FAILED(hr)) | |
1055 { | |
1056 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION_WELCOME , "Navigation::Welcome page failed") | |
1057 } | |
1058 } | |
1062 void CPluginClass::CloseTheme() | 1059 void CPluginClass::CloseTheme() |
1063 { | 1060 { |
1064 if (m_hTheme) | 1061 if (m_hTheme) |
1065 { | 1062 { |
1066 if (pfnClose) | 1063 if (pfnClose) |
1067 { | 1064 { |
1068 pfnClose(m_hTheme); | 1065 pfnClose(m_hTheme); |
1069 } | 1066 } |
1070 | 1067 |
1071 m_hTheme = NULL; | 1068 m_hTheme = NULL; |
1072 } | 1069 } |
1073 } | 1070 } |
1074 | 1071 |
1075 void CPluginClass::UpdateTheme() | 1072 void CPluginClass::UpdateTheme() |
1076 { | 1073 { |
1077 CloseTheme(); | 1074 CloseTheme(); |
1078 | 1075 |
1079 if (pfnOpenThemeData) | 1076 if (pfnOpenThemeData) |
1080 { | 1077 { |
1081 m_hTheme = pfnOpenThemeData(m_hPaneWnd, L"STATUS"); | 1078 m_hTheme = pfnOpenThemeData(m_hPaneWnd, L"STATUS"); |
1082 if (!m_hTheme) | 1079 if (!m_hTheme) |
1083 { | 1080 { |
1084 } | 1081 } |
1085 } | 1082 } |
1086 } | 1083 } |
1087 | 1084 |
1088 | 1085 |
1089 CPluginClass* CPluginClass::FindInstance(HWND hStatusBarWnd) | 1086 CPluginClass* CPluginClass::FindInstance(HWND hStatusBarWnd) |
1090 { | 1087 { |
1091 CPluginClass* instance = NULL; | 1088 CPluginClass* return_instance = nullptr; |
1092 | 1089 |
1093 s_criticalSectionLocal.Lock(); | 1090 s_criticalSectionLocal.Lock(); |
1094 { | 1091 { |
1095 for (int i = 0; i < s_instances.GetSize(); i++) | 1092 for (auto instance : s_instances) |
1096 { | 1093 { |
1097 if (s_instances[i]->m_hStatusBarWnd == hStatusBarWnd) | 1094 if (instance->m_hStatusBarWnd == hStatusBarWnd) |
1098 { | 1095 { |
1099 instance = s_instances[i]; | 1096 return_instance = instance; |
1100 break; | 1097 break; |
1101 } | 1098 } |
1102 } | 1099 } |
1103 } | 1100 } |
1104 s_criticalSectionLocal.Unlock(); | 1101 s_criticalSectionLocal.Unlock(); |
1105 | 1102 |
1106 return instance; | 1103 return return_instance; |
1107 } | 1104 } |
1108 | 1105 |
1109 CPluginTab* CPluginClass::GetTab() | 1106 CPluginTab* CPluginClass::GetTab() |
1110 { | 1107 { |
1111 return m_tab; | 1108 return m_tab; |
1112 } | 1109 } |
1113 | 1110 |
1114 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId) | 1111 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId) |
1115 { | 1112 { |
1116 CPluginTab* tab = NULL; | 1113 CPluginTab* tab = NULL; |
(...skipping 15 matching lines...) Expand all Loading... | |
1132 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText) | 1129 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText) |
1133 { | 1130 { |
1134 if (cCmds == 0) return E_INVALIDARG; | 1131 if (cCmds == 0) return E_INVALIDARG; |
1135 if (prgCmds == 0) return E_POINTER; | 1132 if (prgCmds == 0) return E_POINTER; |
1136 | 1133 |
1137 prgCmds[0].cmdf = OLECMDF_ENABLED; | 1134 prgCmds[0].cmdf = OLECMDF_ENABLED; |
1138 | 1135 |
1139 return S_OK; | 1136 return S_OK; |
1140 } | 1137 } |
1141 | 1138 |
1142 HMENU CPluginClass::CreatePluginMenu(const std::wstring & url) | 1139 HMENU CPluginClass::CreatePluginMenu(const CString& url) |
1143 { | 1140 { |
1144 DEBUG_GENERAL(L"CreatePluginMenu"); | 1141 DEBUG_GENERAL("CreatePluginMenu"); |
1145 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); | 1142 HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance(); |
1146 | 1143 |
1147 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); | 1144 HMENU hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); |
1148 | 1145 |
1149 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); | 1146 HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0); |
1150 | 1147 |
1151 SetMenuBar(hMenuTrackPopup, url); | 1148 SetMenuBar(hMenuTrackPopup, url); |
1152 | 1149 |
1153 return hMenuTrackPopup; | 1150 return hMenuTrackPopup; |
1154 } | 1151 } |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1329 } | 1326 } |
1330 } | 1327 } |
1331 s_criticalSectionLocal.Unlock(); | 1328 s_criticalSectionLocal.Unlock(); |
1332 } | 1329 } |
1333 break; | 1330 break; |
1334 case ID_MENU_SETTINGS: | 1331 case ID_MENU_SETTINGS: |
1335 { | 1332 { |
1336 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); | 1333 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); |
1337 if (browser) | 1334 if (browser) |
1338 { | 1335 { |
1339 Wrapper::Browser b( browser ); | 1336 VARIANT vFlags; |
1340 HRESULT hr = b.navigate( UserSettingsFileUrl() ); | 1337 vFlags.vt = VT_I4; |
1341 if ( FAILED(hr) ) | 1338 vFlags.intVal = navOpenInNewTab; |
1339 | |
1340 BSTR urlToNavigate = BString(UserSettingsFileUrl()); | |
1341 HRESULT hr = browser->Navigate(urlToNavigate, &vFlags, NULL, NULL, NULL) ; | |
1342 if (FAILED(hr)) | |
1342 { | 1343 { |
1343 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION_S ETTINGS, L"Navigation::Failed") | 1344 vFlags.intVal = navOpenInNewWindow; |
1345 | |
1346 hr = browser->Navigate(urlToNavigate, &vFlags, NULL, NULL, NULL); | |
1347 if (FAILED(hr)) | |
1348 { | |
1349 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed") | |
1350 } | |
1344 } | 1351 } |
1345 } | 1352 } |
1346 break; | 1353 break; |
1347 } | 1354 } |
1348 case ID_MENU_DISABLE_ON_SITE: | 1355 case ID_MENU_DISABLE_ON_SITE: |
1349 { | 1356 { |
1350 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1357 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1351 std::wstring urlString = GetTab()->GetDocumentUrl(); | 1358 CString urlString = GetTab()->GetDocumentUrl(); |
1352 if (client->IsWhitelistedUrl(urlString)) | 1359 if (client->IsWhitelistedUrl(std::wstring(urlString))) |
1353 { | 1360 { |
1354 settings->RemoveWhiteListedDomain( client->GetHostFromUrl( urlString ).c _str() ); | 1361 settings->RemoveWhiteListedDomain(client->GetHostFromUrl(urlString.GetSt ring()).c_str()); |
1355 } | 1362 } |
1356 else | 1363 else |
1357 { | 1364 { |
1358 settings->AddWhiteListedDomain( client->GetHostFromUrl( urlString).c_str ()); | 1365 settings->AddWhiteListedDomain(client->GetHostFromUrl(urlString.GetStrin g()).c_str()); |
1359 } | 1366 } |
1360 GetBrowser()->Refresh(); | 1367 GetBrowser()->Refresh(); |
1361 } | 1368 } |
1362 default: | 1369 default: |
1363 break; | 1370 break; |
1364 } | 1371 } |
1365 | 1372 |
1366 // Invalidate and redraw the control | 1373 // Invalidate and redraw the control |
1367 UpdateStatusBar(); | 1374 UpdateStatusBar(); |
1368 } | 1375 } |
1369 | 1376 |
1370 | 1377 |
1371 bool CPluginClass::SetMenuBar(HMENU hMenu, const std::wstring & url) | 1378 bool CPluginClass::SetMenuBar(HMENU hMenu, const CString& url) |
1372 { | 1379 { |
1373 DEBUG_GENERAL(L"SetMenuBar"); | 1380 DEBUG_GENERAL("SetMenuBar"); |
1374 | 1381 |
1375 std::wstring ctext; | 1382 std::wstring ctext; |
1376 | 1383 |
1377 s_criticalSectionLocal.Lock(); | 1384 s_criticalSectionLocal.Lock(); |
1378 { | 1385 { |
1379 #ifdef SUPPORT_WHITELIST | 1386 #ifdef SUPPORT_WHITELIST |
1380 s_menuDomains.clear(); | 1387 s_menuDomains.clear(); |
1381 #endif | 1388 #endif |
1382 } | 1389 } |
1383 s_criticalSectionLocal.Unlock(); | 1390 s_criticalSectionLocal.Unlock(); |
(...skipping 12 matching lines...) Expand all Loading... | |
1396 miiSep.fType = MFT_SEPARATOR; | 1403 miiSep.fType = MFT_SEPARATOR; |
1397 | 1404 |
1398 CPluginClient* client = CPluginClient::GetInstance(); | 1405 CPluginClient* client = CPluginClient::GetInstance(); |
1399 | 1406 |
1400 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1407 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1401 | 1408 |
1402 #ifdef SUPPORT_WHITELIST | 1409 #ifdef SUPPORT_WHITELIST |
1403 { | 1410 { |
1404 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); | 1411 ctext = dictionary->Lookup("menu", "menu-disable-on-site"); |
1405 // Is domain in white list? | 1412 // Is domain in white list? |
1406 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url)); | 1413 ReplaceString(ctext, L"?1?", client->GetHostFromUrl(url.GetString())); |
1407 if (client->IsWhitelistedUrl(std::wstring(GetTab()->GetDocumentUrl()))) | 1414 if (client->IsWhitelistedUrl(std::wstring(GetTab()->GetDocumentUrl()))) |
1408 { | 1415 { |
1409 fmii.fState = MFS_CHECKED | MFS_ENABLED; | 1416 fmii.fState = MFS_CHECKED | MFS_ENABLED; |
1410 } | 1417 } |
1411 else | 1418 else |
1412 { | 1419 { |
1413 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; | 1420 fmii.fState = MFS_UNCHECKED | MFS_ENABLED; |
1414 } | 1421 } |
1415 fmii.fMask = MIIM_STRING | MIIM_STATE; | 1422 fmii.fMask = MIIM_STRING | MIIM_STATE; |
1416 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); | 1423 fmii.dwTypeData = const_cast<LPWSTR>(ctext.c_str()); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1585 HLOCAL hLocal = LocalAlloc(LHND, sizeof(int) * (nParts+1)); | 1592 HLOCAL hLocal = LocalAlloc(LHND, sizeof(int) * (nParts+1)); |
1586 LPINT lpParts = (LPINT)LocalLock(hLocal); | 1593 LPINT lpParts = (LPINT)LocalLock(hLocal); |
1587 memcpy(lpParts, (void*)lParam, wParam*sizeof(int)); | 1594 memcpy(lpParts, (void*)lParam, wParam*sizeof(int)); |
1588 | 1595 |
1589 for (unsigned i = 0; i < STATUSBAR_PANE_NUMBER; i++) | 1596 for (unsigned i = 0; i < STATUSBAR_PANE_NUMBER; i++) |
1590 { | 1597 { |
1591 lpParts[i] -= pClass->m_nPaneWidth; | 1598 lpParts[i] -= pClass->m_nPaneWidth; |
1592 } | 1599 } |
1593 LRESULT hRet = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPa ram, (LPARAM)lpParts); | 1600 LRESULT hRet = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPa ram, (LPARAM)lpParts); |
1594 | 1601 |
1595 Local::Rectangle rcPane; | 1602 AdblockPlus::Rectangle rcPane; |
1596 ::SendMessage(hWnd, SB_GETRECT, STATUSBAR_PANE_NUMBER, (LPARAM)&rcPane); | 1603 ::SendMessage(hWnd, SB_GETRECT, STATUSBAR_PANE_NUMBER, (LPARAM)&rcPane); |
1597 | 1604 |
1598 Local::Rectangle rcClient; | 1605 AdblockPlus::Rectangle rcClient; |
1599 ::GetClientRect(hWnd, &rcClient); | 1606 ::GetClientRect(hWnd, &rcClient); |
1600 | 1607 |
1601 ::MoveWindow( | 1608 ::MoveWindow( |
1602 pClass->m_hPaneWnd, | 1609 pClass->m_hPaneWnd, |
1603 lpParts[STATUSBAR_PANE_NUMBER] - pClass->m_nPaneWidth, | 1610 lpParts[STATUSBAR_PANE_NUMBER] - pClass->m_nPaneWidth, |
1604 0, | 1611 0, |
1605 pClass->m_nPaneWidth, | 1612 pClass->m_nPaneWidth, |
1606 rcClient.Height(), | 1613 rcClient.Height(), |
1607 TRUE); | 1614 TRUE); |
1608 | 1615 |
1609 ::LocalFree(hLocal); | 1616 ::LocalFree(hLocal); |
1610 | 1617 |
1611 | 1618 |
1612 return hRet; | 1619 return hRet; |
1613 } | 1620 } |
1614 | 1621 |
1615 default: | 1622 default: |
1616 break; | 1623 break; |
1617 } | 1624 } |
1618 | 1625 |
1619 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam); | 1626 LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wPara m, lParam); |
1620 | 1627 |
1621 | 1628 |
1622 return result; | 1629 return result; |
1623 | 1630 |
1624 } | 1631 } |
1625 | 1632 |
1626 | 1633 |
1627 HICON CPluginClass::GetStatusBarIcon(const std::wstring & url) | 1634 HICON CPluginClass::GetStatusBarIcon(const CString& url) |
1628 { | 1635 { |
1629 // use the disable icon as defualt, if the client doesn't exists | 1636 // use the disable icon as defualt, if the client doesn't exists |
1630 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); | 1637 HICON hIcon = GetIcon(ICON_PLUGIN_DEACTIVATED); |
1631 | 1638 |
1632 CPluginTab* tab = GetTab(::GetCurrentThreadId()); | 1639 CPluginTab* tab = GetTab(::GetCurrentThreadId()); |
1633 if (tab) | 1640 if (tab) |
1634 { | 1641 { |
1635 CPluginClient* client = CPluginClient::GetInstance(); | 1642 CPluginClient* client = CPluginClient::GetInstance(); |
1636 | 1643 |
1637 #ifdef PRODUCT_ADBLOCKPLUS | 1644 #ifdef PRODUCT_ADBLOCKPLUS |
1638 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) | 1645 if (!CPluginSettings::GetInstance()->IsPluginEnabled()) |
1639 { | 1646 { |
1640 } | 1647 } |
1641 #ifdef SUPPORT_WHITELIST | 1648 #ifdef SUPPORT_WHITELIST |
1642 else if (client->IsWhitelistedUrl( url )) | 1649 else if (client->IsWhitelistedUrl(std::wstring(url))) |
1643 { | 1650 { |
1644 hIcon = GetIcon(ICON_PLUGIN_DISABLED); | 1651 hIcon = GetIcon(ICON_PLUGIN_DISABLED); |
1645 } | 1652 } |
1646 #endif // SUPPORT_WHITELIST | 1653 #endif // SUPPORT_WHITELIST |
1647 else | 1654 else |
1648 { | 1655 { |
1649 CPluginSettings* settings = CPluginSettings::GetInstance(); | 1656 CPluginSettings* settings = CPluginSettings::GetInstance(); |
1650 hIcon = GetIcon(ICON_PLUGIN_ENABLED); | 1657 hIcon = GetIcon(ICON_PLUGIN_ENABLED); |
1651 } | 1658 } |
1652 | 1659 |
(...skipping 22 matching lines...) Expand all Loading... | |
1675 case WM_SETCURSOR: | 1682 case WM_SETCURSOR: |
1676 { | 1683 { |
1677 ::SetCursor(::LoadCursor(NULL, IDC_ARROW)); | 1684 ::SetCursor(::LoadCursor(NULL, IDC_ARROW)); |
1678 return TRUE; | 1685 return TRUE; |
1679 } | 1686 } |
1680 case WM_PAINT: | 1687 case WM_PAINT: |
1681 { | 1688 { |
1682 PAINTSTRUCT ps; | 1689 PAINTSTRUCT ps; |
1683 HDC hDC = ::BeginPaint(hWnd, &ps); | 1690 HDC hDC = ::BeginPaint(hWnd, &ps); |
1684 | 1691 |
1685 Local::Rectangle rcClient; | 1692 AdblockPlus::Rectangle rcClient; |
1686 ::GetClientRect(hWnd, &rcClient); | 1693 ::GetClientRect(hWnd, &rcClient); |
1687 | 1694 |
1688 int nDrawEdge = 0; | 1695 int nDrawEdge = 0; |
1689 | 1696 |
1690 // Old Windows background drawing | 1697 // Old Windows background drawing |
1691 if (pClass->m_hTheme == NULL) | 1698 if (pClass->m_hTheme == NULL) |
1692 { | 1699 { |
1693 ::FillRect(hDC, &rcClient, (HBRUSH)(COLOR_BTNFACE + 1)); | 1700 ::FillRect(hDC, &rcClient, (HBRUSH)(COLOR_BTNFACE + 1)); |
1694 ::DrawEdge(hDC, &rcClient, BDR_RAISEDINNER, BF_LEFT); | 1701 ::DrawEdge(hDC, &rcClient, BDR_RAISEDINNER, BF_LEFT); |
1695 | 1702 |
1696 nDrawEdge = 3; | 1703 nDrawEdge = 3; |
1697 rcClient.left += 3; | 1704 rcClient.left += 3; |
1698 | 1705 |
1699 ::DrawEdge(hDC, &rcClient, BDR_SUNKENOUTER, BF_RECT); | 1706 ::DrawEdge(hDC, &rcClient, BDR_SUNKENOUTER, BF_RECT); |
1700 } | 1707 } |
1701 // Themed background drawing | 1708 // Themed background drawing |
1702 else | 1709 else |
1703 { | 1710 { |
1704 // Draw background | 1711 // Draw background |
1705 if (pfnDrawThemeBackground) | 1712 if (pfnDrawThemeBackground) |
1706 { | 1713 { |
1707 Local::Rectangle rc = rcClient; | 1714 AdblockPlus::Rectangle rc = rcClient; |
1708 rc.right -= 2; | 1715 rc.right -= 2; |
1709 pfnDrawThemeBackground(pClass->m_hTheme, hDC, 0, 0, &rc, NULL); | 1716 pfnDrawThemeBackground(pClass->m_hTheme, hDC, 0, 0, &rc, NULL); |
1710 } | 1717 } |
1711 | 1718 |
1712 // Copy separator picture to left side | 1719 // Copy separator picture to left side |
1713 int nHeight = rcClient.Height(); | 1720 int nHeight = rcClient.Height(); |
1714 int nWidth = rcClient.Width() - 2; | 1721 int nWidth = rcClient.Width() - 2; |
1715 | 1722 |
1716 for (int i = 0; i < 2; i++) | 1723 for (int i = 0; i < 2; i++) |
1717 { | 1724 { |
1718 for (int j = 0; j < nHeight; j++) | 1725 for (int j = 0; j < nHeight; j++) |
1719 { | 1726 { |
1720 COLORREF clr = ::GetPixel(hDC, i + nWidth, j); | 1727 COLORREF clr = ::GetPixel(hDC, i + nWidth, j); |
1721 | 1728 |
1722 // Ignore black boxes (if source is obscured by other windows) | 1729 // Ignore black boxes (if source is obscured by other windows) |
1723 if (clr != -1 && (GetRValue(clr) > 8 || GetGValue(clr) > 8 || GetBVa lue(clr) > 8)) | 1730 if (clr != -1 && (GetRValue(clr) > 8 || GetGValue(clr) > 8 || GetBVa lue(clr) > 8)) |
1724 { | 1731 { |
1725 ::SetPixel(hDC, i, j, clr); | 1732 ::SetPixel(hDC, i, j, clr); |
1726 } | 1733 } |
1727 } | 1734 } |
1728 } | 1735 } |
1729 } | 1736 } |
1730 | 1737 |
1731 // Draw icon | 1738 // Draw icon |
1732 if (CPluginClient::GetInstance()) | 1739 if (CPluginClient::GetInstance()) |
1733 { | 1740 { |
1734 HICON hIcon = GetStatusBarIcon(pClass->GetTab()->GetDocumentUrl().c_str( )); | 1741 HICON hIcon = GetStatusBarIcon(pClass->GetTab()->GetDocumentUrl()); |
1735 | 1742 |
1736 int offx = (rcClient.Height() - 16)/2 + nDrawEdge; | 1743 int offx = (rcClient.Height() - 16)/2 + nDrawEdge; |
1737 if (hIcon) | 1744 if (hIcon) |
1738 { | 1745 { |
1739 ::DrawIconEx(hDC, offx, (rcClient.Height() - 16)/2 + 2, hIcon, 16, 16, NULL, NULL, DI_NORMAL); | 1746 ::DrawIconEx(hDC, offx, (rcClient.Height() - 16)/2 + 2, hIcon, 16, 16, NULL, NULL, DI_NORMAL); |
1740 offx += 22; | 1747 offx += 22; |
1741 } | 1748 } |
1742 #ifdef _DEBUG | 1749 #ifdef _DEBUG |
1743 // Display version | 1750 // Display version |
1744 HFONT hFont = (HFONT)::SendMessage(pClass->m_hStatusBarWnd, WM_GETFONT, 0, 0); | 1751 HFONT hFont = (HFONT)::SendMessage(pClass->m_hStatusBarWnd, WM_GETFONT, 0, 0); |
1745 HGDIOBJ hOldFont = ::SelectObject(hDC,hFont); | 1752 HGDIOBJ hOldFont = ::SelectObject(hDC,hFont); |
1746 | 1753 |
1747 Local::Rectangle rcText = rcClient; | 1754 AdblockPlus::Rectangle rcText = rcClient; |
1748 rcText.left += offx; | 1755 rcText.left += offx; |
1749 ::SetBkMode(hDC, TRANSPARENT); | 1756 ::SetBkMode(hDC, TRANSPARENT); |
1750 ::DrawTextW(hDC, IEPLUGIN_VERSION, -1, &rcText, DT_WORD_ELLIPSIS|DT_LEFT |DT_SINGLELINE|DT_VCENTER); | 1757 ::DrawTextW(hDC, IEPLUGIN_VERSION, -1, &rcText, DT_WORD_ELLIPSIS|DT_LEFT |DT_SINGLELINE|DT_VCENTER); |
1751 | 1758 |
1752 ::SelectObject(hDC, hOldFont); | 1759 ::SelectObject(hDC, hOldFont); |
1753 #endif // _DEBUG | 1760 #endif // _DEBUG |
1754 } | 1761 } |
1755 | 1762 |
1756 // Done! | 1763 // Done! |
1757 EndPaint(hWnd, &ps); | 1764 EndPaint(hWnd, &ps); |
1758 | 1765 |
1759 return 0; | 1766 return 0; |
1760 } | 1767 } |
1761 | 1768 |
1762 case WM_LBUTTONUP: | 1769 case WM_LBUTTONUP: |
1763 case WM_RBUTTONUP: | 1770 case WM_RBUTTONUP: |
1764 { | 1771 { |
1765 std::wstring url = pClass->GetBrowserUrl(); | 1772 CString strURL = pClass->GetBrowserUrl(); |
1766 if (url != pClass->GetTab()->GetDocumentUrl()) | 1773 if (strURL != pClass->GetTab()->GetDocumentUrl()) |
1767 { | 1774 { |
1768 pClass->GetTab()->SetDocumentUrl( url ); | 1775 pClass->GetTab()->SetDocumentUrl(strURL); |
1769 } | 1776 } |
1770 | 1777 |
1771 // Create menu | 1778 // Create menu |
1772 HMENU hMenu = pClass->CreatePluginMenu( url ); | 1779 HMENU hMenu = pClass->CreatePluginMenu(strURL); |
1773 if (!hMenu) | 1780 if (!hMenu) |
1774 { | 1781 { |
1775 return 0; | 1782 return 0; |
1776 } | 1783 } |
1777 | 1784 |
1778 // Display menu | 1785 // Display menu |
1779 POINT pt; | 1786 POINT pt; |
1780 ::GetCursorPos(&pt); | 1787 ::GetCursorPos(&pt); |
1781 | 1788 |
1782 RECT rc; | 1789 RECT rc; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1856 } | 1863 } |
1857 break; | 1864 break; |
1858 } | 1865 } |
1859 | 1866 |
1860 return DefWindowProc(hWnd, message, wParam, lParam); | 1867 return DefWindowProc(hWnd, message, wParam, lParam); |
1861 } | 1868 } |
1862 | 1869 |
1863 | 1870 |
1864 void CPluginClass::UpdateStatusBar() | 1871 void CPluginClass::UpdateStatusBar() |
1865 { | 1872 { |
1866 DEBUG_GENERAL(L"*** Updating statusbar") | 1873 DEBUG_GENERAL("*** Updating statusbar") |
1867 if (m_hPaneWnd == NULL) | 1874 if (m_hPaneWnd == NULL) |
1868 { | 1875 { |
1869 CreateStatusBarPane(); | 1876 CreateStatusBarPane(); |
1870 } | 1877 } |
1871 if ((m_hPaneWnd != NULL) && !::InvalidateRect(m_hPaneWnd, NULL, FALSE)) | 1878 if ((m_hPaneWnd != NULL) && !::InvalidateRect(m_hPaneWnd, NULL, FALSE)) |
1872 { | 1879 { |
1873 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_INVALID ATE_STATUSBAR, L"Class::Invalidate statusbar"); | 1880 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_INVALID ATE_STATUSBAR, "Class::Invalidate statusbar"); |
1874 } | 1881 } |
1875 } | 1882 } |
1876 | 1883 |
1877 | 1884 |
1878 void CPluginClass::Unadvice() | 1885 void CPluginClass::Unadvice() |
1879 { | 1886 { |
1880 s_criticalSectionLocal.Lock(); | 1887 s_criticalSectionLocal.Lock(); |
1881 { | 1888 { |
1882 if (m_isAdviced) | 1889 if (m_isAdviced) |
1883 { | 1890 { |
1884 CComPtr<IConnectionPoint> pPoint = GetConnectionPoint(); | 1891 CComPtr<IConnectionPoint> pPoint = GetConnectionPoint(); |
1885 if (pPoint) | 1892 if (pPoint) |
1886 { | 1893 { |
1887 HRESULT hr = pPoint->Unadvise(m_nConnectionID); | 1894 HRESULT hr = pPoint->Unadvise(m_nConnectionID); |
1888 if (FAILED(hr)) | 1895 if (FAILED(hr)) |
1889 { | 1896 { |
1890 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_UNADV ICE, L"Class::Unadvice - Unadvise"); | 1897 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_UNADV ICE, "Class::Unadvice - Unadvise"); |
1891 } | 1898 } |
1892 } | 1899 } |
1893 | 1900 |
1894 m_isAdviced = false; | 1901 m_isAdviced = false; |
1895 } | 1902 } |
1896 } | 1903 } |
1897 s_criticalSectionLocal.Unlock(); | 1904 s_criticalSectionLocal.Unlock(); |
1898 } | 1905 } |
1899 | 1906 |
1900 HICON CPluginClass::GetIcon(int type) | 1907 HICON CPluginClass::GetIcon(int type) |
1901 { | 1908 { |
1902 HICON icon = NULL; | 1909 HICON icon = NULL; |
1903 | 1910 |
1904 s_criticalSectionLocal.Lock(); | 1911 s_criticalSectionLocal.Lock(); |
1905 { | 1912 { |
1906 if (!s_hIcons[type]) | 1913 if (!s_hIcons[type]) |
1907 { | 1914 { |
1908 s_hIcons[type] = ::LoadIcon(_Module.m_hInst, MAKEINTRESOURCE(s_hIconTypes[ type])); | 1915 s_hIcons[type] = ::LoadIcon(_Module.m_hInst, MAKEINTRESOURCE(s_hIconTypes[ type])); |
1909 if (!s_hIcons[type]) | 1916 if (!s_hIcons[type]) |
1910 { | 1917 { |
1911 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_LOAD_ ICON, L"Class::GetIcon - LoadIcon") | 1918 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_LOAD_ ICON, "Class::GetIcon - LoadIcon") |
1912 } | 1919 } |
1913 } | 1920 } |
1914 | 1921 |
1915 icon = s_hIcons[type]; | 1922 icon = s_hIcons[type]; |
1916 } | 1923 } |
1917 s_criticalSectionLocal.Unlock(); | 1924 s_criticalSectionLocal.Unlock(); |
1918 | 1925 |
1919 return icon; | 1926 return icon; |
1920 } | 1927 } |
1921 | 1928 |
1922 ATOM CPluginClass::GetAtomPaneClass() | 1929 ATOM CPluginClass::GetAtomPaneClass() |
1923 { | 1930 { |
1924 return s_atomPaneClass; | 1931 return s_atomPaneClass; |
1925 } | 1932 } |
1926 | 1933 |
1927 HWND CPluginClass::GetTabHWND() const | 1934 HWND CPluginClass::GetTabHWND() const |
1928 { | 1935 { |
1929 | 1936 |
1930 TCHAR szClassName[MAX_PATH]; | 1937 TCHAR szClassName[MAX_PATH]; |
1931 // Get browser window and url | 1938 // Get browser window and url |
1932 HWND hBrowserWnd = GetBrowserHWND(); | 1939 HWND hBrowserWnd = GetBrowserHWND(); |
1933 if (!hBrowserWnd) | 1940 if (!hBrowserWnd) |
1934 { | 1941 { |
1935 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, L" Class::GetTabWindow - No tab window") | 1942 DEBUG_ERROR_LOG(0, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_NO_STATUSBAR_BROWSER, "C lass::GetTabWindow - No tab window") |
1936 s_criticalSectionWindow.Unlock(); | 1943 s_criticalSectionWindow.Unlock(); |
1937 | 1944 |
1938 return false; | 1945 return false; |
1939 } | 1946 } |
1940 | 1947 |
1941 // Looking for a TabWindowClass window in IE7 | 1948 // Looking for a TabWindowClass window in IE7 |
1942 | 1949 |
1943 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); | 1950 HWND hTabWnd = ::GetWindow(hBrowserWnd, GW_CHILD); |
1944 while (hTabWnd) | 1951 while (hTabWnd) |
1945 { | 1952 { |
(...skipping 12 matching lines...) Expand all Loading... | |
1958 if (hTabWnd2) | 1965 if (hTabWnd2) |
1959 { | 1966 { |
1960 DWORD nProcessId; | 1967 DWORD nProcessId; |
1961 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); | 1968 ::GetWindowThreadProcessId(hTabWnd2, &nProcessId); |
1962 if (::GetCurrentProcessId() == nProcessId) | 1969 if (::GetCurrentProcessId() == nProcessId) |
1963 { | 1970 { |
1964 bool bExistingTab = false; | 1971 bool bExistingTab = false; |
1965 s_criticalSectionLocal.Lock(); | 1972 s_criticalSectionLocal.Lock(); |
1966 | 1973 |
1967 { | 1974 { |
1968 for (int i = 0; i < s_instances.GetSize(); i++) | 1975 for (auto instance : s_instances) |
1969 { | 1976 { |
1970 if (s_instances[i]->m_hTabWnd == hTabWnd2) | 1977 if (instance->m_hTabWnd == hTabWnd2) |
1971 { | 1978 { |
1972 bExistingTab = true; | 1979 bExistingTab = true; |
1973 break; | 1980 break; |
1974 } | 1981 } |
1975 } | 1982 } |
1976 } | 1983 } |
1977 | 1984 |
1978 if (!bExistingTab) | 1985 if (!bExistingTab) |
1979 { | 1986 { |
1980 hBrowserWnd = hTabWnd2; | 1987 hBrowserWnd = hTabWnd2; |
1981 hTabWnd = hTabWnd2; | 1988 hTabWnd = hTabWnd2; |
1982 s_criticalSectionLocal.Unlock(); | 1989 s_criticalSectionLocal.Unlock(); |
1983 break; | 1990 break; |
1984 } | 1991 } |
1985 s_criticalSectionLocal.Unlock(); | 1992 s_criticalSectionLocal.Unlock(); |
1986 | 1993 |
1987 } | 1994 } |
1988 } | 1995 } |
1989 } | 1996 } |
1990 | 1997 |
1991 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); | 1998 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); |
1992 } | 1999 } |
1993 | 2000 |
1994 return hTabWnd; | 2001 return hTabWnd; |
1995 | 2002 |
1996 } | 2003 } |
LEFT | RIGHT |