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

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

Issue 4805561958793216: Noissue - Remove dead code in CPluginClass::SetSite (Closed)
Patch Set: rebased + removed more dead code Created March 17, 2015, 10:29 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/plugin/PluginClass.h ('k') | src/plugin/abp.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2015 Eyeo GmbH 3 * Copyright (C) 2006-2015 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 { 194 {
195 url = m_tab->GetDocumentUrl(); 195 url = m_tab->GetDocumentUrl();
196 } 196 }
197 return url; 197 return url;
198 } 198 }
199 199
200 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) 200 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr)
201 { 201 {
202 if (thisPtr == NULL) 202 if (thisPtr == NULL)
203 return 0; 203 return 0;
204 if (!((CPluginClass*)thisPtr)->InitObject(true)) 204 if (!((CPluginClass*)thisPtr)->InitObject())
205 { 205 {
206 ((CPluginClass*)thisPtr)->Unadvise(); 206 ((CPluginClass*)thisPtr)->Unadvise();
207 } 207 }
208 208
209 return 0; 209 return 0;
210 } 210 }
211 211
212 // This gets called when a new browser window is created (which also triggers th e 212 /*
213 // creation of this object). The pointer passed in should be to a IWebBrowser2 213 * IE calls this when it creates a new browser window or tab, immediately after it also
214 // interface that represents the browser for the window. 214 * creates the object. The argument 'unknownSite' in is the OLE "site" of the ob ject,
215 // it is also called when a tab is closed, this unknownSite will be null 215 * which is an IWebBrowser2 interface associated with the window/tab.
216 // so we should handle that it is called this way several times during a session 216 *
217 * IE also ordinarily calls this again when its window/tab is closed, in which c ase
218 * 'unknownSite' will be null. Extraordinarily, this is sometimes _not_ called w hen IE
219 * is shutting down. Thus 'SetSite(nullptr)' has some similarities with a destru ctor,
220 * but it is not a proper substitute for one.
221 */
sergei 2015/03/30 11:26:23 This comment
217 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) 222 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite)
218 { 223 {
219 CPluginSettings* settings = CPluginSettings::GetInstance(); 224 try
225 {
226 if (unknownSite)
227 {
220 228
221 MULTIPLE_VERSIONS_CHECK(); 229 DEBUG_GENERAL(L"========================================================== ======================\nNEW TAB UI\n============================================ ====================================")
222 230
223 if (unknownSite) 231 HRESULT hr = ::CoInitialize(NULL);
224 { 232 if (FAILED(hr))
233 {
234 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, "Class::SetSite - CoInitialize");
235 }
225 236
226 DEBUG_GENERAL(L"============================================================ ====================\nNEW TAB UI\n============================================== ==================================") 237 s_criticalSectionBrowser.Lock();
238 {
239 m_webBrowser2 = unknownSite;
240 }
241 s_criticalSectionBrowser.Unlock();
227 242
228 HRESULT hr = ::CoInitialize(NULL); 243 //register the mimefilter
229 if (FAILED(hr)) 244 //and only mimefilter
245 //on some few computers the mimefilter does not get properly registered wh en it is done on another thread
246
247 s_criticalSectionLocal.Lock();
248 {
249 // Always register on startup, then check if we need to unregister in a separate thread
250 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
251 s_asyncWebBrowser2 = unknownSite;
252 s_instances.insert(this);
253 }
254 s_criticalSectionLocal.Unlock();
255
256 try
257 {
258 auto webBrowser = GetBrowser();
259 if (webBrowser)
260 {
261 DEBUG_GENERAL("Loaded as BHO");
262 HRESULT hr = DispEventAdvise(webBrowser);
263 if (SUCCEEDED(hr))
264 {
265 m_isAdvised = true;
266 try
267 {
268 std::thread startInitObjectThread(StartInitObject, this);
269 startInitObjectThread.detach(); // TODO: but actually we should wa it for the thread in the dtr.
270 }
271 catch (const std::system_error& ex)
272 {
273 DEBUG_SYSTEM_EXCEPTION(ex, PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_ THREAD_CREATE_PROCESS,
274 "Class::Thread - Failed to create StartInitObject thread");
275 }
276 }
277 else
278 {
279 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADV ICE, "Class::SetSite - Advise");
280 }
281 }
282 }
283 catch (const std::runtime_error& ex)
284 {
285 DEBUG_EXCEPTION(ex);
286 Unadvise();
287 }
288 }
289 else
230 { 290 {
231 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, " Class::SetSite - CoInitialize"); 291 Unadvise();
292
293 // Destroy window
294 if (m_pWndProcStatus)
295 {
296 ::SetWindowLongPtr(m_hStatusBarWnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)m_pWn dProcStatus);
297
298 m_pWndProcStatus = NULL;
299 }
300
301 if (m_hPaneWnd)
302 {
303 DestroyWindow(m_hPaneWnd);
304 m_hPaneWnd = NULL;
305 }
306
307 m_hTabWnd = NULL;
308 m_hStatusBarWnd = NULL;
309
310 // Remove instance from the list, shutdown threads
311 HANDLE hMainThread = NULL;
312 HANDLE hTabThread = NULL;
313
314 s_criticalSectionLocal.Lock();
315 {
316 s_instances.erase(this);
317
318 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::Ge tCurrentThreadId());
319 if (it != s_threadInstances.end())
320 {
321 s_threadInstances.erase(it);
322 }
323 if (s_instances.empty())
324 {
325 // TODO: Explicitly releasing a resource when a container becomes empt y looks like a job better suited for shared_ptr
326 CPluginClientFactory::ReleaseMimeFilterClientInstance();
327 }
328 }
329 s_criticalSectionLocal.Unlock();
330
331 // Release browser interface
332 s_criticalSectionBrowser.Lock();
333 {
334 m_webBrowser2.Release();
335 }
336 s_criticalSectionBrowser.Unlock();
337
338 DEBUG_GENERAL("=========================================================== =====================\nNEW TAB UI - END\n======================================= =========================================")
339
340 ::CoUninitialize();
232 } 341 }
233 342
234 s_criticalSectionBrowser.Lock(); 343 IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite);
235 {
236 m_webBrowser2 = unknownSite;
237 }
238 s_criticalSectionBrowser.Unlock();
239
240 //register the mimefilter
241 //and only mimefilter
242 //on some few computers the mimefilter does not get properly registered when it is done on another thread
243
244 s_criticalSectionLocal.Lock();
245 {
246 // Always register on startup, then check if we need to unregister in a se parate thread
247 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
248 s_asyncWebBrowser2 = unknownSite;
249 s_instances.insert(this);
250 }
251 s_criticalSectionLocal.Unlock();
252
253 try
254 {
255 // Check if loaded as BHO
256 auto webBrowser = GetBrowser();
257 if (webBrowser)
258 {
259 DEBUG_GENERAL("Loaded as BHO");
260 HRESULT hr = DispEventAdvise(webBrowser);
261 if (SUCCEEDED(hr))
262 {
263 m_isAdvised = true;
264 try
265 {
266 std::thread startInitObjectThread(StartInitObject, this);
267 startInitObjectThread.detach(); // TODO: but actually we should wait for the thread in the dtr.
268 }
269 catch (const std::system_error& ex)
270 {
271 DEBUG_SYSTEM_EXCEPTION(ex, PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_TH READ_CREATE_PROCESS,
272 "Class::Thread - Failed to create StartInitObject thread");
273 }
274 }
275 else
276 {
277 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADVIC E, "Class::SetSite - Advise");
278 }
279 }
280 else // Check if loaded as toolbar handler
281 {
282 DEBUG_GENERAL("Loaded as toolbar handler");
283 CComPtr<IServiceProvider> pServiceProvider;
284
285 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider);
286 if (SUCCEEDED(hr))
287 {
288 if (pServiceProvider)
289 {
290 s_criticalSectionBrowser.Lock();
291 {
292 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _webBrowser2);
293 if (SUCCEEDED(hr))
294 {
295 if (m_webBrowser2)
296 {
297 InitObject(false);
298 }
299 }
300 else
301 {
302 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, "Class::SetSite - QueryService (IID_IWebBrowserApp)");
303 }
304 }
305 s_criticalSectionBrowser.Unlock();
306 }
307 }
308 else
309 {
310 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_QUERY _SERVICE_PROVIDER, "Class::SetSite - QueryInterface (service provider)");
311 }
312 }
313 }
314 catch (const std::runtime_error& ex)
315 {
316 DEBUG_EXCEPTION(ex);
317 Unadvise();
318 }
319 } 344 }
320 else 345 catch (...)
321 { 346 {
322 Unadvise();
323
324 // Destroy window
325 if (m_pWndProcStatus)
326 {
327 ::SetWindowLongPtr(m_hStatusBarWnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)m_pWndP rocStatus);
328
329 m_pWndProcStatus = NULL;
330 }
331
332 if (m_hPaneWnd)
333 {
334 DestroyWindow(m_hPaneWnd);
335 m_hPaneWnd = NULL;
336 }
337
338 m_hTabWnd = NULL;
339 m_hStatusBarWnd = NULL;
340
341 // Remove instance from the list, shutdown threads
342 HANDLE hMainThread = NULL;
343 HANDLE hTabThread = NULL;
344
345 s_criticalSectionLocal.Lock();
346 {
347 s_instances.erase(this);
348
349 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC urrentThreadId());
350 if (it != s_threadInstances.end())
351 {
352 s_threadInstances.erase(it);
353 }
354 if (s_instances.empty())
355 {
356 // TODO: Explicitly releasing a resource when a container becomes empty looks like a job better suited for shared_ptr
357 CPluginClientFactory::ReleaseMimeFilterClientInstance();
358 }
359 }
360 s_criticalSectionLocal.Unlock();
361
362 // Release browser interface
363 s_criticalSectionBrowser.Lock();
364 {
365 m_webBrowser2.Release();
366 }
367 s_criticalSectionBrowser.Unlock();
368
369 DEBUG_GENERAL("============================================================= ===================\nNEW TAB UI - END\n========================================= =======================================")
370
371 ::CoUninitialize();
372 } 347 }
373 348 return S_OK;
374 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite);
375 } 349 }
376 350
377 bool CPluginClass::IsStatusBarEnabled() 351 bool CPluginClass::IsStatusBarEnabled()
378 { 352 {
379 DEBUG_GENERAL("IsStatusBarEnabled start"); 353 DEBUG_GENERAL("IsStatusBarEnabled start");
380 HKEY pHkey; 354 HKEY pHkey;
381 HKEY pHkeySub; 355 HKEY pHkeySub;
382 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey); 356 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey);
383 DWORD truth = 1; 357 DWORD truth = 1;
384 DWORD truthSize = sizeof(truth); 358 DWORD truthSize = sizeof(truth);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WINDOWSTATE_ENA BLED); 568 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WINDOWSTATE_ENA BLED);
595 if (newtabshown) 569 if (newtabshown)
596 { 570 {
597 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find( GetCurrentThreadId()); 571 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find( GetCurrentThreadId());
598 if (it == s_threadInstances.end()) 572 if (it == s_threadInstances.end())
599 { 573 {
600 s_threadInstances[::GetCurrentThreadId()] = this; 574 s_threadInstances[::GetCurrentThreadId()] = this;
601 if (!m_isInitializedOk) 575 if (!m_isInitializedOk)
602 { 576 {
603 m_isInitializedOk = true; 577 m_isInitializedOk = true;
604 InitObject(true); 578 InitObject();
605 UpdateStatusBar(); 579 UpdateStatusBar();
606 } 580 }
607 } 581 }
608 } 582 }
609 notificationMessage.Hide(); 583 notificationMessage.Hide();
610 DEBUG_GENERAL(L"WindowStateChanged (check tab changed) end"); 584 DEBUG_GENERAL(L"WindowStateChanged (check tab changed) end");
611 } 585 }
612 catch (...) 586 catch (...)
613 { 587 {
614 } 588 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 { 621 {
648 try 622 try
649 { 623 {
650 Unadvise(); 624 Unadvise();
651 } 625 }
652 catch (...) 626 catch (...)
653 { 627 {
654 } 628 }
655 } 629 }
656 630
657 bool CPluginClass::InitObject(bool bBHO) 631 bool CPluginClass::InitObject()
658 { 632 {
659 DEBUG_GENERAL("InitObject"); 633 DEBUG_GENERAL("InitObject");
660 CPluginSettings* settings = CPluginSettings::GetInstance(); 634 CPluginSettings* settings = CPluginSettings::GetInstance();
661 635
662 if (!settings->GetPluginEnabled()) 636 if (!settings->GetPluginEnabled())
663 { 637 {
664 s_mimeFilter->Unregister(); 638 s_mimeFilter->Unregister();
665 } 639 }
666 640
667 // Load theme module 641 // Load theme module
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 698
725 if (!GetAtomPaneClass()) 699 if (!GetAtomPaneClass())
726 { 700 {
727 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, "Class::InitObject - RegisterClassEx"); 701 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, "Class::InitObject - RegisterClassEx");
728 return false; 702 return false;
729 } 703 }
730 } 704 }
731 705
732 int ieVersion = AdblockPlus::IE::InstalledMajorVersion(); 706 int ieVersion = AdblockPlus::IE::InstalledMajorVersion();
733 // Create status pane 707 // Create status pane
734 if (bBHO && ieVersion > 6 && !CreateStatusBarPane()) 708 if (ieVersion > 6 && !CreateStatusBarPane())
735 { 709 {
736 return false; 710 return false;
737 } 711 }
738 712
739 s_criticalSectionLocal.Lock(); 713 s_criticalSectionLocal.Lock();
740 int versionCompRes = CPluginClient::GetInstance()->CompareVersions(CPluginClie nt::GetInstance()->GetPref(L"currentVersion", L"0.0"), L"1.2"); 714 int versionCompRes = CPluginClient::GetInstance()->CompareVersions(CPluginClie nt::GetInstance()->GetPref(L"currentVersion", L"0.0"), L"1.2");
741 715
742 bool isFirstRun = CPluginClient::GetInstance()->IsFirstRun(); 716 bool isFirstRun = CPluginClient::GetInstance()->IsFirstRun();
743 CPluginClient::GetInstance()->SetPref(L"currentVersion", std::wstring(IEPLUGIN _VERSION)); 717 CPluginClient::GetInstance()->SetPref(L"currentVersion", std::wstring(IEPLUGIN _VERSION));
744 // This is the first time ABP was installed 718 // This is the first time ABP was installed
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after
1758 s_criticalSectionLocal.Unlock(); 1732 s_criticalSectionLocal.Unlock();
1759 1733
1760 } 1734 }
1761 } 1735 }
1762 } 1736 }
1763 1737
1764 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1738 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1765 } 1739 }
1766 return hTabWnd; 1740 return hTabWnd;
1767 } 1741 }
OLDNEW
« no previous file with comments | « src/plugin/PluginClass.h ('k') | src/plugin/abp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld