| Index: src/plugin/PluginTabBase.cpp |
| =================================================================== |
| --- a/src/plugin/PluginTabBase.cpp |
| +++ b/src/plugin/PluginTabBase.cpp |
| @@ -25,13 +25,11 @@ |
| #include "../shared/Utils.h" |
| #include <Mshtmhst.h> |
| -CPluginTabBase::CPluginTabBase(CPluginClass* plugin) |
| - : m_plugin(plugin) |
| - , m_isActivated(false) |
| +CPluginTab::CPluginTab() |
| + : m_isActivated(false) |
| , m_continueThreadRunning(true) |
| { |
| - m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); |
| - m_filter->hideFiltersLoadedEvent = CreateEvent(NULL, true, false, NULL); |
| + m_filter.hideFiltersLoadedEvent = CreateEvent(NULL, true, false, NULL); |
| CPluginClient* client = CPluginClient::GetInstance(); |
| if (AdblockPlus::IE::InstalledMajorVersion() < 10) |
| @@ -41,7 +39,7 @@ |
| try |
| { |
| - m_thread = std::thread(&CPluginTabBase::ThreadProc, this); |
| + m_thread = std::thread(&CPluginTab::ThreadProc, this); |
| } |
| catch (const std::system_error& ex) |
| { |
| @@ -52,7 +50,7 @@ |
| } |
| -CPluginTabBase::~CPluginTabBase() |
| +CPluginTab::~CPluginTab() |
| { |
| delete m_traverser; |
| m_traverser = NULL; |
| @@ -62,13 +60,13 @@ |
| } |
| } |
| -void CPluginTabBase::OnActivate() |
| +void CPluginTab::OnActivate() |
| { |
| m_isActivated = true; |
| } |
| -void CPluginTabBase::OnUpdate() |
| +void CPluginTab::OnUpdate() |
| { |
| m_isActivated = true; |
| } |
| @@ -76,12 +74,12 @@ |
| namespace |
| { |
| // Entry Point |
| - void FilterLoader(CPluginTabBase* tabBase) |
| + void FilterLoader(CPluginFilter* filter, const std::wstring& domain) |
| { |
| try |
| { |
| - tabBase->m_filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementHidingSelectors(tabBase->GetDocumentDomain())); |
| - SetEvent(tabBase->m_filter->hideFiltersLoadedEvent); |
| + filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementHidingSelectors(domain)); |
| + SetEvent(filter->hideFiltersLoadedEvent); |
| } |
| catch (...) |
| { |
| @@ -90,15 +88,15 @@ |
| } |
| } |
| -void CPluginTabBase::OnNavigate(const std::wstring& url) |
| +void CPluginTab::OnNavigate(const std::wstring& url) |
| { |
| SetDocumentUrl(url); |
| ClearFrameCache(GetDocumentDomain()); |
| std::wstring domainString = GetDocumentDomain(); |
| - ResetEvent(m_filter->hideFiltersLoadedEvent); |
| + ResetEvent(m_filter.hideFiltersLoadedEvent); |
| try |
| { |
| - std::thread filterLoaderThread(&FilterLoader, this); |
| + std::thread filterLoaderThread(&FilterLoader, &m_filter, GetDocumentDomain()); |
| filterLoaderThread.detach(); // TODO: but actually we should wait for the thread in the dtr. |
| } |
| catch (const std::system_error& ex) |
| @@ -147,7 +145,7 @@ |
| } |
| } |
| -void CPluginTabBase::InjectABP(IWebBrowser2* browser) |
| +void CPluginTab::InjectABP(IWebBrowser2* browser) |
| { |
| CriticalSection::Lock lock(m_csInject); |
| auto url = GetDocumentUrl(); |
| @@ -162,20 +160,20 @@ |
| CComQIPtr<IHTMLDocument2> pDoc2(pDocDispatch); |
| if (!pDoc2) |
| { |
| - DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to QI document"); |
| + DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTab::InjectABP - Failed to QI document"); |
| return; |
| } |
| CComPtr<IHTMLWindow2> pWnd2; |
| pDoc2->get_parentWindow(&pWnd2); |
| if (!pWnd2) |
| { |
| - DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to get parent window"); |
| + DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTab::InjectABP - Failed to get parent window"); |
| return; |
| } |
| CComQIPtr<IDispatchEx> pWndEx(pWnd2); |
| if (!pWndEx) |
| { |
| - DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to QI dispatch"); |
| + DEBUG_ERROR_LOG(0, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTab::InjectABP - Failed to QI dispatch"); |
| return; |
| } |
| // Create "Settings" object in JavaScript. |
| @@ -184,7 +182,7 @@ |
| HRESULT hr = pWndEx->GetDispID(L"Settings", fdexNameEnsure, &dispid); |
| if (FAILED(hr)) |
| { |
| - DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to get dispatch"); |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTab::InjectABP - Failed to get dispatch"); |
| return; |
| } |
| CComVariant var((IDispatch*)&m_pluginUserSettings); |
| @@ -200,7 +198,7 @@ |
| DEBUG_GENERAL("Invoke"); |
| if (FAILED(hr)) |
| { |
| - DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTabBase::InjectABP - Failed to create Settings in JavaScript"); |
| + DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT, PLUGIN_ERROR_CREATE_SETTINGS_JAVASCRIPT_INVOKE, "CPluginTab::InjectABP - Failed to create Settings in JavaScript"); |
| } |
| } |
| @@ -250,7 +248,7 @@ |
| } |
| } |
| -void CPluginTabBase::OnDownloadComplete(IWebBrowser2* browser) |
| +void CPluginTab::OnDownloadComplete(IWebBrowser2* browser) |
| { |
| CPluginClient* client = CPluginClient::GetInstance(); |
| std::wstring url = GetDocumentUrl(); |
| @@ -261,7 +259,7 @@ |
| InjectABP(browser); |
| } |
| -void CPluginTabBase::OnDocumentComplete(IWebBrowser2* browser, const std::wstring& url, bool isDocumentBrowser) |
| +void CPluginTab::OnDocumentComplete(IWebBrowser2* browser, const std::wstring& url, bool isDocumentBrowser) |
| { |
| std::wstring documentUrl = GetDocumentUrl(); |
| @@ -273,44 +271,44 @@ |
| } |
| InjectABP(browser); |
| } |
| - CString urlLegacy = ToCString(url); |
| - if (urlLegacy.Left(6) != "res://") |
| + if (BeginsWith(url, L"res://")) |
| { |
| - // Get document |
| - CComPtr<IDispatch> pDocDispatch; |
| - HRESULT hr = browser->get_Document(&pDocDispatch); |
| - if (FAILED(hr) || !pDocDispatch) |
| + return; |
| + } |
| + // Get document |
| + CComPtr<IDispatch> pDocDispatch; |
| + HRESULT hr = browser->get_Document(&pDocDispatch); |
| + if (FAILED(hr) || !pDocDispatch) |
| + { |
| + return; |
| + } |
| + |
| + CComQIPtr<IHTMLDocument2> pDoc(pDocDispatch); |
| + if (!pDoc) |
| + { |
| + return; |
| + } |
| + |
| + CComPtr<IOleObject> pOleObj; |
| + pDocDispatch->QueryInterface(&pOleObj); |
| + if (!pOleObj) |
| + { |
| + return; |
| + } |
| + CComPtr<IOleClientSite> pClientSite; |
| + pOleObj->GetClientSite(&pClientSite); |
| + if (pClientSite != NULL) |
| + { |
| + CComPtr<IDocHostUIHandler> docHostUIHandler; |
| + pClientSite->QueryInterface(&docHostUIHandler); |
| + if (docHostUIHandler != NULL) |
| { |
| - return; |
| - } |
| - |
| - CComQIPtr<IHTMLDocument2> pDoc(pDocDispatch); |
| - if (!pDoc) |
| - { |
| - return; |
| - } |
| - |
| - CComPtr<IOleObject> pOleObj; |
| - pDocDispatch->QueryInterface(&pOleObj); |
| - if (!pOleObj) |
| - { |
| - return; |
| - } |
| - CComPtr<IOleClientSite> pClientSite; |
| - pOleObj->GetClientSite(&pClientSite); |
| - if (pClientSite != NULL) |
| - { |
| - CComPtr<IDocHostUIHandler> docHostUIHandler; |
| - pClientSite->QueryInterface(&docHostUIHandler); |
| - if (docHostUIHandler != NULL) |
| - { |
| - docHostUIHandler->UpdateUI(); |
| - } |
| + docHostUIHandler->UpdateUI(); |
| } |
| } |
| } |
| -std::wstring CPluginTabBase::GetDocumentDomain() |
| +std::wstring CPluginTab::GetDocumentDomain() |
| { |
| std::wstring domain; |
| @@ -323,7 +321,7 @@ |
| return domain; |
| } |
| -void CPluginTabBase::SetDocumentUrl(const std::wstring& url) |
| +void CPluginTab::SetDocumentUrl(const std::wstring& url) |
| { |
| m_criticalSection.Lock(); |
| { |
| @@ -333,7 +331,7 @@ |
| m_criticalSection.Unlock(); |
| } |
| -std::wstring CPluginTabBase::GetDocumentUrl() |
| +std::wstring CPluginTab::GetDocumentUrl() |
| { |
| std::wstring url; |
| @@ -350,7 +348,7 @@ |
| // ============================================================================ |
| // Frame caching |
| // ============================================================================ |
| -bool CPluginTabBase::IsFrameCached(const std::wstring& url) |
| +bool CPluginTab::IsFrameCached(const std::wstring& url) |
| { |
| bool isFrame; |
| @@ -363,7 +361,7 @@ |
| return isFrame; |
| } |
| -void CPluginTabBase::CacheFrame(const std::wstring& url) |
| +void CPluginTab::CacheFrame(const std::wstring& url) |
| { |
| m_criticalSectionCache.Lock(); |
| { |
| @@ -372,7 +370,7 @@ |
| m_criticalSectionCache.Unlock(); |
| } |
| -void CPluginTabBase::ClearFrameCache(const std::wstring& domain) |
| +void CPluginTab::ClearFrameCache(const std::wstring& domain) |
| { |
| m_criticalSectionCache.Lock(); |
| { |
| @@ -385,7 +383,7 @@ |
| m_criticalSectionCache.Unlock(); |
| } |
| -void CPluginTabBase::ThreadProc() |
| +void CPluginTab::ThreadProc() |
| { |
| // Force loading/creation of settings |
| CPluginSettings::GetInstance()->SetWorkingThreadId(); |