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

Delta Between Two Patch Sets: src/plugin/PluginClass.cpp

Issue 5168444685156352: Issue 1201 - Enabling/disabling ABP everywhere applies only in the next opened tab (Closed)
Left Patch Set: Created March 27, 2015, 7:34 a.m.
Right Patch Set: Only fix the issue, no refactoring Created April 13, 2015, 3:30 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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
50 CLOSETHEMEDATA pfnClose = NULL; 52 CLOSETHEMEDATA pfnClose = NULL;
51 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL; 53 DRAWTHEMEBACKGROUND pfnDrawThemeBackground = NULL;
52 OPENTHEMEDATA pfnOpenThemeData = NULL; 54 OPENTHEMEDATA pfnOpenThemeData = NULL;
53 55
54 ATOM CPluginClass::s_atomPaneClass = NULL; 56 ATOM CPluginClass::s_atomPaneClass = NULL;
55 HINSTANCE CPluginClass::s_hUxtheme = NULL; 57 HINSTANCE CPluginClass::s_hUxtheme = NULL;
56 std::set<CPluginClass*> CPluginClass::s_instances; 58 std::set<CPluginClass*> CPluginClass::s_instances;
57 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances; 59 std::map<DWORD, CPluginClass*> CPluginClass::s_threadInstances;
58 60
59 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal; 61 CComAutoCriticalSection CPluginClass::s_criticalSectionLocal;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 { 194 {
193 url = m_tab->GetDocumentUrl(); 195 url = m_tab->GetDocumentUrl();
194 } 196 }
195 return url; 197 return url;
196 } 198 }
197 199
198 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) 200 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr)
199 { 201 {
200 if (thisPtr == NULL) 202 if (thisPtr == NULL)
201 return 0; 203 return 0;
202 if (!((CPluginClass*)thisPtr)->InitObject(true)) 204 if (!((CPluginClass*)thisPtr)->InitObject())
203 { 205 {
204 ((CPluginClass*)thisPtr)->Unadvise(); 206 ((CPluginClass*)thisPtr)->Unadvise();
205 } 207 }
206 208
207 return 0; 209 return 0;
208 } 210 }
209 211
210 // This gets called when a new browser window is created (which also triggers th e 212 /*
211 // 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
212 // interface that represents the browser for the window. 214 * creates the object. The argument 'unknownSite' in is the OLE "site" of the ob ject,
213 // 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.
214 // 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 */
215 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite) 222 STDMETHODIMP CPluginClass::SetSite(IUnknown* unknownSite)
216 { 223 {
217 CPluginSettings* settings = CPluginSettings::GetInstance(); 224 try
218 225 {
219 MULTIPLE_VERSIONS_CHECK(); 226 if (unknownSite)
220 227 {
221 if (unknownSite) 228
222 { 229 DEBUG_GENERAL(L"========================================================== ======================\nNEW TAB UI\n============================================ ====================================")
223 230
224 DEBUG_GENERAL(L"============================================================ ====================\nNEW TAB UI\n============================================== ==================================") 231 HRESULT hr = ::CoInitialize(NULL);
225 232 if (FAILED(hr))
226 HRESULT hr = ::CoInitialize(NULL); 233 {
227 if (FAILED(hr)) 234 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, "Class::SetSite - CoInitialize");
228 { 235 }
229 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, " Class::SetSite - CoInitialize"); 236
230 } 237 s_criticalSectionBrowser.Lock();
231 238 {
232 s_criticalSectionBrowser.Lock(); 239 m_webBrowser2 = unknownSite;
233 { 240 }
234 m_webBrowser2 = unknownSite; 241 s_criticalSectionBrowser.Unlock();
235 } 242
236 s_criticalSectionBrowser.Unlock(); 243 //register the mimefilter
237 244 //and only mimefilter
238 //register the mimefilter 245 //on some few computers the mimefilter does not get properly registered wh en it is done on another thread
239 //and only mimefilter 246
240 //on some few computers the mimefilter does not get properly registered when it is done on another thread 247 s_criticalSectionLocal.Lock();
241 248 {
242 s_criticalSectionLocal.Lock(); 249 // Always register on startup, then check if we need to unregister in a separate thread
243 { 250 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
244 // Always register on startup, then check if we need to unregister in a se parate thread 251 s_asyncWebBrowser2 = unknownSite;
245 CPluginClientFactory::GetMimeFilterClientInstance(); 252 s_instances.insert(this);
246 s_asyncWebBrowser2 = unknownSite; 253 }
247 s_instances.insert(this); 254 s_criticalSectionLocal.Unlock();
248 } 255
249 s_criticalSectionLocal.Unlock(); 256 try
250 257 {
251 try 258 auto webBrowser = GetBrowser();
252 { 259 if (webBrowser)
253 // Check if loaded as BHO 260 {
254 auto webBrowser = GetBrowser(); 261 DEBUG_GENERAL("Loaded as BHO");
255 if (webBrowser) 262 HRESULT hr = DispEventAdvise(webBrowser);
256 { 263 if (SUCCEEDED(hr))
257 DEBUG_GENERAL("Loaded as BHO");
258 HRESULT hr = DispEventAdvise(webBrowser);
259 if (SUCCEEDED(hr))
260 {
261 m_isAdvised = true;
262 try
263 { 264 {
264 std::thread startInitObjectThread(StartInitObject, this); 265 m_isAdvised = true;
265 startInitObjectThread.detach(); // TODO: but actually we should wait for the thread in the dtr. 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 }
266 } 276 }
267 catch (const std::system_error& ex) 277 else
268 { 278 {
269 DEBUG_SYSTEM_EXCEPTION(ex, PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_TH READ_CREATE_PROCESS, 279 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADV ICE, "Class::SetSite - Advise");
270 "Class::Thread - Failed to create StartInitObject thread");
271 } 280 }
272 } 281 }
273 else 282 }
274 { 283 catch (const std::runtime_error& ex)
275 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_ADVIC E, "Class::SetSite - Advise"); 284 {
276 } 285 DEBUG_EXCEPTION(ex);
277 } 286 Unadvise();
278 else // Check if loaded as toolbar handler 287 }
279 { 288 }
280 DEBUG_GENERAL("Loaded as toolbar handler"); 289 else
281 CComPtr<IServiceProvider> pServiceProvider; 290 {
282
283 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider);
284 if (SUCCEEDED(hr))
285 {
286 if (pServiceProvider)
287 {
288 s_criticalSectionBrowser.Lock();
289 {
290 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _webBrowser2);
291 if (SUCCEEDED(hr))
292 {
293 if (m_webBrowser2)
294 {
295 InitObject(false);
296 }
297 }
298 else
299 {
300 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, "Class::SetSite - QueryService (IID_IWebBrowserApp)");
301 }
302 }
303 s_criticalSectionBrowser.Unlock();
304 }
305 }
306 else
307 {
308 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_QUERY _SERVICE_PROVIDER, "Class::SetSite - QueryInterface (service provider)");
309 }
310 }
311 }
312 catch (const std::runtime_error& ex)
313 {
314 DEBUG_EXCEPTION(ex);
315 Unadvise(); 291 Unadvise();
316 } 292
317 } 293 // Destroy window
318 else 294 if (m_pWndProcStatus)
319 { 295 {
320 Unadvise(); 296 ::SetWindowLongPtr(m_hStatusBarWnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)m_pWn dProcStatus);
321 297
322 // Destroy window 298 m_pWndProcStatus = NULL;
323 if (m_pWndProcStatus) 299 }
324 { 300
325 ::SetWindowLongPtr(m_hStatusBarWnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)m_pWndP rocStatus); 301 if (m_hPaneWnd)
326 302 {
327 m_pWndProcStatus = NULL; 303 DestroyWindow(m_hPaneWnd);
328 } 304 m_hPaneWnd = NULL;
329 305 }
330 if (m_hPaneWnd) 306
331 { 307 m_hTabWnd = NULL;
332 DestroyWindow(m_hPaneWnd); 308 m_hStatusBarWnd = NULL;
333 m_hPaneWnd = NULL; 309
334 } 310 // Remove instance from the list, shutdown threads
335 311 HANDLE hMainThread = NULL;
336 m_hTabWnd = NULL; 312 HANDLE hTabThread = NULL;
337 m_hStatusBarWnd = NULL; 313
338 314 s_criticalSectionLocal.Lock();
339 // Remove instance from the list, shutdown threads 315 {
340 HANDLE hMainThread = NULL; 316 s_instances.erase(this);
341 HANDLE hTabThread = NULL; 317
342 318 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::Ge tCurrentThreadId());
343 s_criticalSectionLocal.Lock(); 319 if (it != s_threadInstances.end())
344 { 320 {
345 s_instances.erase(this); 321 s_threadInstances.erase(it);
346 322 }
347 std::map<DWORD,CPluginClass*>::iterator it = s_threadInstances.find(::GetC urrentThreadId()); 323 if (s_instances.empty())
348 if (it != s_threadInstances.end()) 324 {
349 { 325 // TODO: Explicitly releasing a resource when a container becomes empt y looks like a job better suited for shared_ptr
350 s_threadInstances.erase(it); 326 CPluginClientFactory::ReleaseMimeFilterClientInstance();
351 } 327 }
352 if (s_instances.empty()) 328 }
353 { 329 s_criticalSectionLocal.Unlock();
354 // TODO: Explicitly releasing a resource when a container becomes empty looks like a job better suited for shared_ptr 330
355 CPluginClientFactory::ReleaseMimeFilterClientInstance(); 331 // Release browser interface
356 } 332 s_criticalSectionBrowser.Lock();
357 } 333 {
358 s_criticalSectionLocal.Unlock(); 334 m_webBrowser2.Release();
359 335 }
360 // Release browser interface 336 s_criticalSectionBrowser.Unlock();
361 s_criticalSectionBrowser.Lock(); 337
362 { 338 DEBUG_GENERAL("=========================================================== =====================\nNEW TAB UI - END\n======================================= =========================================")
363 m_webBrowser2.Release(); 339
364 } 340 ::CoUninitialize();
365 s_criticalSectionBrowser.Unlock(); 341 }
366 342
367 DEBUG_GENERAL("============================================================= ===================\nNEW TAB UI - END\n========================================= =======================================") 343 IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite);
368 344 }
369 ::CoUninitialize(); 345 catch (...)
370 } 346 {
371 347 }
372 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); 348 return S_OK;
373 } 349 }
374 350
375 bool CPluginClass::IsStatusBarEnabled() 351 bool CPluginClass::IsStatusBarEnabled()
376 { 352 {
377 DEBUG_GENERAL("IsStatusBarEnabled start"); 353 DEBUG_GENERAL("IsStatusBarEnabled start");
378 HKEY pHkey; 354 HKEY pHkey;
379 HKEY pHkeySub; 355 HKEY pHkeySub;
380 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey); 356 RegOpenCurrentUser(KEY_QUERY_VALUE, &pHkey);
381 DWORD truth = 1; 357 DWORD truth = 1;
382 DWORD truthSize = sizeof(truth); 358 DWORD truthSize = sizeof(truth);
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WINDOWSTATE_ENA BLED); 563 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WINDOWSTATE_ENA BLED);
588 if (newtabshown) 564 if (newtabshown)
589 { 565 {
590 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find( GetCurrentThreadId()); 566 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find( GetCurrentThreadId());
591 if (it == s_threadInstances.end()) 567 if (it == s_threadInstances.end())
592 { 568 {
593 s_threadInstances[::GetCurrentThreadId()] = this; 569 s_threadInstances[::GetCurrentThreadId()] = this;
594 if (!m_isInitializedOk) 570 if (!m_isInitializedOk)
595 { 571 {
596 m_isInitializedOk = true; 572 m_isInitializedOk = true;
597 InitObject(true); 573 InitObject();
598 UpdateStatusBar(); 574 UpdateStatusBar();
599 } 575 }
600 } 576 }
601 } 577 }
602 notificationMessage.Hide(); 578 notificationMessage.Hide();
603 DEBUG_GENERAL(L"WindowStateChanged (check tab changed) end"); 579 DEBUG_GENERAL(L"WindowStateChanged (check tab changed) end");
604 } 580 }
605 catch (...) 581 catch (...)
606 { 582 {
607 } 583 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 { 616 {
641 try 617 try
642 { 618 {
643 Unadvise(); 619 Unadvise();
644 } 620 }
645 catch (...) 621 catch (...)
646 { 622 {
647 } 623 }
648 } 624 }
649 625
650 bool CPluginClass::InitObject(bool bBHO) 626 bool CPluginClass::InitObject()
651 { 627 {
652 DEBUG_GENERAL("InitObject"); 628 DEBUG_GENERAL("InitObject");
653 CPluginSettings* settings = CPluginSettings::GetInstance(); 629 CPluginSettings* settings = CPluginSettings::GetInstance();
654 630
655 if (!settings->GetPluginEnabled()) 631 if (!settings->GetPluginEnabled())
656 { 632 {
657 CPluginClientFactory::ReleaseMimeFilterClientInstance(); 633 s_mimeFilter->Unregister();
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
658 } 634 }
659 635
660 // Load theme module 636 // Load theme module
661 s_criticalSectionLocal.Lock(); 637 s_criticalSectionLocal.Lock();
662 { 638 {
663 if (!s_hUxtheme) 639 if (!s_hUxtheme)
664 { 640 {
665 s_hUxtheme = ::GetModuleHandle(L"uxtheme.dll"); 641 s_hUxtheme = ::GetModuleHandle(L"uxtheme.dll");
666 if (s_hUxtheme) 642 if (s_hUxtheme)
667 { 643 {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 693
718 if (!GetAtomPaneClass()) 694 if (!GetAtomPaneClass())
719 { 695 {
720 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, "Class::InitObject - RegisterClassEx"); 696 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_REGISTE R_PANE_CLASS, "Class::InitObject - RegisterClassEx");
721 return false; 697 return false;
722 } 698 }
723 } 699 }
724 700
725 int ieVersion = AdblockPlus::IE::InstalledMajorVersion(); 701 int ieVersion = AdblockPlus::IE::InstalledMajorVersion();
726 // Create status pane 702 // Create status pane
727 if (bBHO && ieVersion > 6 && !CreateStatusBarPane()) 703 if (ieVersion > 6 && !CreateStatusBarPane())
728 { 704 {
729 return false; 705 return false;
730 } 706 }
731 707
732 s_criticalSectionLocal.Lock(); 708 s_criticalSectionLocal.Lock();
733 if (CPluginClient::GetInstance()->GetPref(L"currentVersion", L"0.0").find(L"si mpleadblock") != std::wstring::npos) 709 if (CPluginClient::GetInstance()->GetPref(L"currentVersion", L"0.0").find(L"si mpleadblock") != std::wstring::npos)
734 { 710 {
735 CPluginClient::GetInstance()->SetPref(L"isFromSimpleAdblock", true); 711 CPluginClient::GetInstance()->SetPref(L"isFromSimpleAdblock", true);
736 CPluginClient::GetInstance()->SetPref(L"currentVersion", std::wstring(IEPLUG IN_VERSION)); 712 CPluginClient::GetInstance()->SetPref(L"currentVersion", std::wstring(IEPLUG IN_VERSION));
737 } 713 }
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 { 1082 {
1107 CPluginSettings* settings = CPluginSettings::GetInstance(); 1083 CPluginSettings* settings = CPluginSettings::GetInstance();
1108 1084
1109 settings->TogglePluginEnabled(); 1085 settings->TogglePluginEnabled();
1110 1086
1111 // Enable / disable mime filter 1087 // Enable / disable mime filter
1112 s_criticalSectionLocal.Lock(); 1088 s_criticalSectionLocal.Lock();
1113 { 1089 {
1114 if (settings->GetPluginEnabled()) 1090 if (settings->GetPluginEnabled())
1115 { 1091 {
1116 CPluginClientFactory::GetMimeFilterClientInstance(); 1092 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
1117 } 1093 }
1118 else 1094 else
1119 { 1095 {
1096 s_mimeFilter = NULL;
1097
1120 CPluginClientFactory::ReleaseMimeFilterClientInstance(); 1098 CPluginClientFactory::ReleaseMimeFilterClientInstance();
1121 } 1099 }
1122 } 1100 }
1123 s_criticalSectionLocal.Unlock(); 1101 s_criticalSectionLocal.Unlock();
1124 } 1102 }
1125 break; 1103 break;
1126 case ID_MENU_SETTINGS: 1104 case ID_MENU_SETTINGS:
1127 { 1105 {
1128 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); 1106 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser();
1129 if (browser) 1107 if (browser)
(...skipping 15 matching lines...) Expand all
1145 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed") 1123 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_NAVIGATION, PLUGIN_ERROR_NAVIGATION _SETTINGS, "Navigation::Failed")
1146 } 1124 }
1147 } 1125 }
1148 } 1126 }
1149 break; 1127 break;
1150 } 1128 }
1151 case ID_MENU_DISABLE_ON_SITE: 1129 case ID_MENU_DISABLE_ON_SITE:
1152 { 1130 {
1153 CPluginSettings* settings = CPluginSettings::GetInstance(); 1131 CPluginSettings* settings = CPluginSettings::GetInstance();
1154 std::wstring urlString = GetTab()->GetDocumentUrl(); 1132 std::wstring urlString = GetTab()->GetDocumentUrl();
1155 if (client->IsWhitelistedUrl(urlString)) 1133 std::string filterText = client->GetWhitelistingFilter(urlString);
1156 { 1134 if (!filterText.empty())
1157 settings->RemoveWhiteListedDomain(ToCString(client->GetHostFromUrl(urlSt ring))); 1135 {
1136 client->RemoveFilter(filterText);
1158 } 1137 }
1159 else 1138 else
1160 { 1139 {
1161 settings->AddWhiteListedDomain(ToCString(client->GetHostFromUrl(urlStrin g))); 1140 settings->AddWhiteListedDomain(ToCString(client->GetHostFromUrl(urlStrin g)));
1162 } 1141 }
1163 GetBrowser()->Refresh(); 1142 GetBrowser()->Refresh();
1164 } 1143 }
1165 default: 1144 default:
1166 break; 1145 break;
1167 } 1146 }
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
1757 s_criticalSectionLocal.Unlock(); 1736 s_criticalSectionLocal.Unlock();
1758 1737
1759 } 1738 }
1760 } 1739 }
1761 } 1740 }
1762 1741
1763 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1742 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1764 } 1743 }
1765 return hTabWnd; 1744 return hTabWnd;
1766 } 1745 }
LEFTRIGHT
« no previous file | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld