| Index: src/plugin/PluginTabBase.cpp |
| =================================================================== |
| --- a/src/plugin/PluginTabBase.cpp |
| +++ b/src/plugin/PluginTabBase.cpp |
| @@ -46,9 +46,9 @@ |
| } |
| catch (const std::system_error& ex) |
| { |
| - auto errDescription = std::string("Tab::Thread - Failed to create tab thread") + |
| - ex.code().message() + ex.what(); |
| - DEBUG_ERROR_LOG(ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_TAB_THREAD_CREATE_PROCESS, errDescription.c_str()); |
| + std::wstring errDescription( L"Tab::Thread - Failed to create tab thread" ); |
| + errDescription += ABP::debug::widen( ex.code().message() + ex.what() ); |
| + DEBUG_ERROR_LOG( ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_TAB_THREAD_CREATE_PROCESS, errDescription ); |
| } |
| #ifdef SUPPORT_DOM_TRAVERSER |
| @@ -85,16 +85,15 @@ |
| { |
| void FilterLoader(CPluginTabBase* tabBase) |
| { |
| - tabBase->m_filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementHidingSelectors(tabBase->GetDocumentDomain().GetString())); |
| + tabBase->m_filter->LoadHideFilters(CPluginClient::GetInstance()->GetElementHidingSelectors(tabBase->GetDocumentDomain())); |
| SetEvent(tabBase->m_filter->hideFiltersLoadedEvent); |
| } |
| } |
| -void CPluginTabBase::OnNavigate(const CString& url) |
| +void CPluginTabBase::OnNavigate(const std::wstring & url) |
| { |
| SetDocumentUrl(url); |
| - |
| #ifdef SUPPORT_FRAME_CACHING |
| ClearFrameCache(GetDocumentDomain()); |
| #endif |
| @@ -108,9 +107,9 @@ |
| } |
| catch (const std::system_error& ex) |
| { |
| - auto errDescription = std::string("Class::Thread - Failed to start filter loader thread, ") + |
| - ex.code().message() + ex.what(); |
| - DEBUG_ERROR_LOG(ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_THREAD_CREATE_PROCESS, errDescription.c_str()); |
| + std::wstring errDescription( L"Class::Thread - Failed to start filter loader thread, "); |
| + errDescription += ABP::debug::widen( ex.code().message() + ex.what() ); |
| + DEBUG_ERROR_LOG( ex.code().value(), PLUGIN_ERROR_THREAD, PLUGIN_ERROR_MAIN_THREAD_CREATE_PROCESS, errDescription ); |
| } |
| #ifdef SUPPORT_DOM_TRAVERSER |
| @@ -118,15 +117,20 @@ |
| #endif |
| } |
| +namespace { |
| +} |
| + |
| void CPluginTabBase::InjectABP(IWebBrowser2* browser) |
| { |
| CriticalSection::Lock lock(m_csInject); |
| - CString url = GetDocumentUrl(); |
| - CString log; |
| - log.Format(L"InjectABP. Current URL: %s, settings URL: %s", url, UserSettingsFileUrl().c_str()); |
| - DEBUG_GENERAL(log); |
| - if (!(0 == url.CompareNoCase(CString(UserSettingsFileUrl().c_str())) || |
| - 0 == url.CompareNoCase(CString(FirstRunPageFileUrl().c_str())))) |
| + std::wstring url = GetDocumentUrl(); |
| + |
| + std::wostringstream log; |
| + log << L"InjectABP. Current URL: " << url << L", settings URL: " << UserSettingsFileUrl(); |
| + DEBUG_GENERAL( log.str() ); |
| + |
| + if( !ABP::util::wstring_equal_ci( url, UserSettingsFileUrl() ) |
| + && !ABP::util::wstring_equal_ci( url, FirstRunPageFileUrl() ) ) |
| { |
| DEBUG_GENERAL(L"Not injecting"); |
| return; |
| @@ -137,20 +141,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, L"CPluginTabBase::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, L"CPluginTabBase::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, L"CPluginTabBase::InjectABP - Failed to QI dispatch"); |
| return; |
| } |
| // Create "Settings" object in JavaScript. |
| @@ -159,12 +163,15 @@ |
| 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, L"CPluginTabBase::InjectABP - Failed to get dispatch"); |
| return; |
| } |
| - CComVariant var((IDispatch*)&m_pluginUserSettings); |
| - DEBUG_GENERAL("Injecting"); |
| + DEBUG_GENERAL(L"Injecting"); |
| + |
| + VARIANT var; |
| + var.vt = VT_DISPATCH; |
| + var.pdispVal = &m_pluginUserSettings; |
| DISPPARAMS params; |
| params.cArgs = 1; |
| @@ -172,40 +179,40 @@ |
| params.rgvarg = &var; |
| params.rgdispidNamedArgs = 0; |
| hr = pWndEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF, ¶ms, 0, 0, 0); |
| - DEBUG_GENERAL("Invoke"); |
| + DEBUG_GENERAL(L"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, L"CPluginTabBase::InjectABP - Failed to create Settings in JavaScript"); |
| } |
| } |
| void CPluginTabBase::OnDownloadComplete(IWebBrowser2* browser) |
| { |
| #ifdef SUPPORT_DOM_TRAVERSER |
| - if (!CPluginClient::GetInstance()->IsWhitelistedUrl(std::wstring(GetDocumentUrl()))) |
| + if (!CPluginClient::GetInstance()->IsWhitelistedUrl(GetDocumentUrl())) |
| { |
| - m_traverser->TraverseDocument(browser, GetDocumentDomain(), GetDocumentUrl()); |
| + m_traverser->TraverseDocument(browser, GetDocumentDomain(), GetDocumentUrl().c_str()); |
| } |
| #endif // SUPPORT_DOM_TRAVERSER |
| InjectABP(browser); |
| } |
| -void CPluginTabBase::OnDocumentComplete(IWebBrowser2* browser, const CString& url, bool isDocumentBrowser) |
| +void CPluginTabBase::OnDocumentComplete(IWebBrowser2* browser, const std::wstring url, bool isDocumentBrowser) |
| { |
| - CString documentUrl = GetDocumentUrl(); |
| + std::wstring documentUrl = GetDocumentUrl(); |
| if (isDocumentBrowser) |
| { |
| if (url != documentUrl) |
| { |
| - SetDocumentUrl(url); |
| + SetDocumentUrl( url ); |
| } |
| InjectABP(browser); |
| } |
| #ifdef SUPPORT_DOM_TRAVERSER |
| - if (url.Left(6) != "res://") |
| + if ( !ABP::util::begins_with( url, L"res://" ) ) |
| { |
| // Get document |
| CComPtr<IDispatch> pDocDispatch; |
| @@ -243,9 +250,9 @@ |
| #endif |
| } |
| -CString CPluginTabBase::GetDocumentDomain() |
| +std::wstring CPluginTabBase::GetDocumentDomain() |
| { |
| - CString domain; |
| + std::wstring domain; |
| m_criticalSection.Lock(); |
| { |
| @@ -256,19 +263,19 @@ |
| return domain; |
| } |
| -void CPluginTabBase::SetDocumentUrl(const CString& url) |
| +void CPluginTabBase::SetDocumentUrl(const std::wstring & url) |
| { |
| m_criticalSection.Lock(); |
| { |
| m_documentUrl = url; |
| - m_documentDomain = CString(CAdblockPlusClient::GetInstance()->GetHostFromUrl(url.GetString()).c_str()); |
| + m_documentDomain = CAdblockPlusClient::GetInstance()->GetHostFromUrl(url); |
| } |
| m_criticalSection.Unlock(); |
| } |
| -CString CPluginTabBase::GetDocumentUrl() |
| +std::wstring CPluginTabBase::GetDocumentUrl() |
| { |
| - CString url; |
| + std::wstring url; |
| m_criticalSection.Lock(); |
| { |
| @@ -286,7 +293,7 @@ |
| #ifdef SUPPORT_FRAME_CACHING |
| -bool CPluginTabBase::IsFrameCached(const CString& url) |
| +bool CPluginTabBase::IsFrameCached(const std::wstring & url) |
| { |
| bool isFrame; |
| @@ -299,7 +306,7 @@ |
| return isFrame; |
| } |
| -void CPluginTabBase::CacheFrame(const CString& url) |
| +void CPluginTabBase::CacheFrame(const std::wstring & url) |
| { |
| m_criticalSectionCache.Lock(); |
| { |
| @@ -308,11 +315,11 @@ |
| m_criticalSectionCache.Unlock(); |
| } |
| -void CPluginTabBase::ClearFrameCache(const CString& domain) |
| +void CPluginTabBase::ClearFrameCache(const std::wstring & domain) |
| { |
| m_criticalSectionCache.Lock(); |
| { |
| - if (domain.IsEmpty() || domain != m_cacheDomain) |
| + if (domain.empty() || domain != m_cacheDomain) |
| { |
| m_cacheFrames.clear(); |
| m_cacheDomain = domain; |
| @@ -331,16 +338,15 @@ |
| settings->SetWorkingThreadId(); |
| - CString threadInfo; |
| - threadInfo.Format(L"%d.%d", ::GetCurrentProcessId(), ::GetCurrentThreadId()); |
| + std::wostringstream thread_info; |
| + thread_info << ::GetCurrentProcessId() << L"." << ::GetCurrentThreadId(); |
| - CString debugText; |
| - |
| - debugText += L"================================================================================"; |
| - debugText += L"\nTAB THREAD " + threadInfo; |
| - debugText += L"\n================================================================================"; |
| - |
| - DEBUG_GENERAL(debugText) |
| + std::wstring t[] = { |
| + L"================================================================================", |
| + L"TAB THREAD " + thread_info.str(), |
| + L"================================================================================", |
| + }; |
| + DEBUG_GENERAL(t); |
| // -------------------------------------------------------------------- |
| // Tab loop |
| @@ -352,12 +358,11 @@ |
| while (this->m_continueThreadRunning) |
| { |
| #ifdef ENABLE_DEBUG_THREAD |
| - CStringA sTabLoopIteration; |
| - sTabLoopIteration.Format("%u", tabLoopIteration); |
| - |
| - DEBUG_THREAD("--------------------------------------------------------------------------------") |
| - DEBUG_THREAD("Loop iteration " + sTabLoopIteration); |
| - DEBUG_THREAD("--------------------------------------------------------------------------------") |
| + std::wostringstream message; |
| + message << L"Loop iteration " << tabLoopIteration; |
| + DEBUG_THREAD( L"--------------------------------------------------------------------------------" ); |
| + DEBUG_THREAD( message.str() ); |
| + DEBUG_THREAD( L"--------------------------------------------------------------------------------" ); |
| #endif |
| if (this->m_isActivated) |
| { |