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

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

Issue 5168444685156352: Issue 1201 - Enabling/disabling ABP everywhere applies only in the next opened tab (Closed)
Patch Set: Created March 27, 2015, 7:34 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
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 29 matching lines...) Expand all
40 40
41 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); 41 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR);
42 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT); 42 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT);
43 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE); 43 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE);
44 44
45 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL }; 45 HICON CPluginClass::s_hIcons[ICON_MAX] = { NULL, NULL, NULL };
46 DWORD CPluginClass::s_hIconTypes[ICON_MAX] = { IDI_ICON_DISABLED, IDI_ICON_ENABL ED, IDI_ICON_DEACTIVATED }; 46 DWORD CPluginClass::s_hIconTypes[ICON_MAX] = { IDI_ICON_DISABLED, IDI_ICON_ENABL ED, IDI_ICON_DEACTIVATED };
47 uint32_t iconHeight = 32; 47 uint32_t iconHeight = 32;
48 uint32_t iconWidth = 32; 48 uint32_t iconWidth = 32;
49 49
50 CPluginMimeFilterClient* CPluginClass::s_mimeFilter = NULL;
51
52 CLOSETHEMEDATA pfnClose = NULL; 50 CLOSETHEMEDATA pfnClose = NULL;
53 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL; 51 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL;
54 OPENTHEMEDATA pfnOpenThemeData = NULL; 52 OPENTHEMEDATA pfnOpenThemeData = NULL;
55 53
56 ATOM CPluginClass::s_atomPaneClass = NULL; 54 ATOM CPluginClass::s_atomPaneClass = NULL;
57 HINSTANCE CPluginClass::s_hUxtheme = NULL; 55 HINSTANCE CPluginClass::s_hUxtheme = NULL;
58 std::set<CPluginClass*> CPluginClass::s_instances; 56 std::set<CPluginClass*> CPluginClass::s_instances;
59 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances; 57 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances;
60 58
61 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal; 59 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 } 235 }
238 s_criticalSectionBrowser.Unlock(); 236 s_criticalSectionBrowser.Unlock();
239 237
240 //register the mimefilter 238 //register the mimefilter
241 //and only mimefilter 239 //and only mimefilter
242 //on some few computers the mimefilter does not get properly registered when it is done on another thread 240 //on some few computers the mimefilter does not get properly registered when it is done on another thread
243 241
244 s_criticalSectionLocal.Lock(); 242 s_criticalSectionLocal.Lock();
245 { 243 {
246 // Always register on startup, then check if we need to unregister in a se parate thread 244 // Always register on startup, then check if we need to unregister in a se parate thread
247 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); 245 CPluginClientFactory::GetMimeFilterClientInstance();
248 s_asyncWebBrowser2 = unknownSite; 246 s_asyncWebBrowser2 = unknownSite;
249 s_instances.insert(this); 247 s_instances.insert(this);
250 } 248 }
251 s_criticalSectionLocal.Unlock(); 249 s_criticalSectionLocal.Unlock();
252 250
253 try 251 try
254 { 252 {
255 // Check if loaded as BHO 253 // Check if loaded as BHO
256 auto webBrowser = GetBrowser(); 254 auto webBrowser = GetBrowser();
257 if (webBrowser) 255 if (webBrowser)
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 { 502 {
505 return; 503 return;
506 } 504 }
507 if (!urlVariant || urlVariant->vt != VT_BSTR) 505 if (!urlVariant || urlVariant->vt != VT_BSTR)
508 { 506 {
509 return; 507 return;
510 } 508 }
511 std::wstring url(urlVariant->bstrVal, SysStringLen(urlVariant->bstrVal)); 509 std::wstring url(urlVariant->bstrVal, SysStringLen(urlVariant->bstrVal));
512 UnescapeUrl(url); 510 UnescapeUrl(url);
513 511
514 //Register a mime filter if it's not registered yet
Eric 2015/03/27 13:35:50 I'm assuming there was a reason to have this state
sergei 2015/04/01 18:49:32 It was indeed the issue here. We disable the plugi
515 if (s_mimeFilter == nullptr)
516 {
517 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
518 }
519 // If webbrowser2 is equal to top level browser (as set in SetSite), we are 512 // If webbrowser2 is equal to top level browser (as set in SetSite), we are
520 // navigating new page 513 // navigating new page
521 CPluginClient* client = CPluginClient::GetInstance(); 514 CPluginClient* client = CPluginClient::GetInstance();
522 if (url.find(L"javascript") == 0) 515 if (url.find(L"javascript") == 0)
523 { 516 {
524 } 517 }
525 else if (GetBrowser().IsEqualObject(webBrowser)) 518 else if (GetBrowser().IsEqualObject(webBrowser))
526 { 519 {
527 m_tab->OnNavigate(url); 520 m_tab->OnNavigate(url);
528 DEBUG_GENERAL( 521 DEBUG_GENERAL(
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 } 647 }
655 } 648 }
656 649
657 bool CPluginClass::InitObject(bool bBHO) 650 bool CPluginClass::InitObject(bool bBHO)
658 { 651 {
659 DEBUG_GENERAL("InitObject"); 652 DEBUG_GENERAL("InitObject");
660 CPluginSettings* settings = CPluginSettings::GetInstance(); 653 CPluginSettings* settings = CPluginSettings::GetInstance();
661 654
662 if (!settings->GetPluginEnabled()) 655 if (!settings->GetPluginEnabled())
663 { 656 {
664 s_mimeFilter->Unregister(); 657 CPluginClientFactory::ReleaseMimeFilterClientInstance();
Oleksandr 2015/03/27 08:02:29 This fixes the issue. Just calling Unregister() he
sergei 2015/04/01 18:49:32 No, it does not mean that our APP handlers remain
665 } 658 }
666 659
667 // Load theme module 660 // Load theme module
668 s_criticalSectionLocal.Lock(); 661 s_criticalSectionLocal.Lock();
669 { 662 {
670 if (!s_hUxtheme) 663 if (!s_hUxtheme)
671 { 664 {
672 s_hUxtheme = ::GetModuleHandle(L"uxtheme.dll"); 665 s_hUxtheme = ::GetModuleHandle(L"uxtheme.dll");
673 if (s_hUxtheme) 666 if (s_hUxtheme)
674 { 667 {
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 { 1106 {
1114 CPluginSettings* settings = CPluginSettings::GetInstance(); 1107 CPluginSettings* settings = CPluginSettings::GetInstance();
1115 1108
1116 settings->TogglePluginEnabled(); 1109 settings->TogglePluginEnabled();
1117 1110
1118 // Enable / disable mime filter 1111 // Enable / disable mime filter
1119 s_criticalSectionLocal.Lock(); 1112 s_criticalSectionLocal.Lock();
1120 { 1113 {
1121 if (settings->GetPluginEnabled()) 1114 if (settings->GetPluginEnabled())
1122 { 1115 {
1123 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); 1116 CPluginClientFactory::GetMimeFilterClientInstance();
1124 } 1117 }
1125 else 1118 else
1126 { 1119 {
1127 s_mimeFilter = NULL;
1128
1129 CPluginClientFactory::ReleaseMimeFilterClientInstance(); 1120 CPluginClientFactory::ReleaseMimeFilterClientInstance();
1130 } 1121 }
1131 } 1122 }
1132 s_criticalSectionLocal.Unlock(); 1123 s_criticalSectionLocal.Unlock();
1133 } 1124 }
1134 break; 1125 break;
1135 case ID_MENU_SETTINGS: 1126 case ID_MENU_SETTINGS:
1136 { 1127 {
1137 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); 1128 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser();
1138 if (browser) 1129 if (browser)
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
1766 s_criticalSectionLocal.Unlock(); 1757 s_criticalSectionLocal.Unlock();
1767 1758
1768 } 1759 }
1769 } 1760 }
1770 } 1761 }
1771 1762
1772 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1763 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1773 } 1764 }
1774 return hTabWnd; 1765 return hTabWnd;
1775 } 1766 }
OLDNEW

Powered by Google App Engine
This is Rietveld