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

Unified Diff: src/plugin/AdblockPlusClient.cpp

Issue 5750789393874944: [IE] First round of ATL removal (Closed)
Patch Set: Created June 20, 2014, 9:22 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/plugin/AdblockPlusClient.cpp
===================================================================
--- a/src/plugin/AdblockPlusClient.cpp
+++ b/src/plugin/AdblockPlusClient.cpp
@@ -10,12 +10,51 @@
#include "../shared/Utils.h"
+#include <memory>
+
namespace
{
+ /**
+ * A temporary wchar buffer, initialized from a wstring.
+ * Used to pass parameters to CreateProcess* API functions, which may modify the buffer contents.
+ *
+ * This class is a wrapper around unique_ptr.
+ */
+ class temporary_wchar_buffer {
sergei 2014/07/08 11:58:34 Despite below it's mentioned that we can proceed e
Eric 2014/07/08 17:46:37 On 2014/07/08 11:58:34, sergei wrote: < this class
+ /**
+ * Length of input string, not including terminating null character.
+ */
+ size_t len ;
+
+ /**
+ * The underlying unique_ptr
+ */
+ std::unique_ptr< wchar_t[] > buffer ;
Oleksandr 2014/06/26 00:48:43 Nit: Here and in other places no space after < and
+
+ public:
+ /**
+ * Ordinary constructor.
+ */
+ temporary_wchar_buffer( std::wstring s )
sergei 2014/07/08 11:58:34 Just in case, it's safer to have such constructors
Eric 2014/07/08 17:46:37 I have no problem with that.
+ : len( s.length() ), buffer( new wchar_t[ len + 1 ] )
+ {
+ s.copy( buffer.get(), len );
+ buffer[ len ] = L'\0' ;
+ }
+
+ /**
+ * Conversion operator returns pointer to allocated buffer.
+ */
+ operator wchar_t *()
+ {
+ return buffer.get();
+ }
+ };
+
void SpawnAdblockPlusEngine()
{
std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe";
- CString params = L"AdblockPlusEngine.exe " + CPluginSystem::GetInstance()->GetBrowserLanguage();
+ temporary_wchar_buffer params( L"AdblockPlusEngine.exe " + CPluginSystem::GetInstance()->GetBrowserLanguage() );
STARTUPINFO startupInfo = {};
PROCESS_INFORMATION processInformation = {};
@@ -46,7 +85,7 @@
{
// We need to break out from AppContainer. Launch with default security - registry entry will eat the user prompt
// See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_elebp
- createProcRes = CreateProcessW(engineExecutablePath.c_str(), params.GetBuffer(params.GetLength() + 1),
+ createProcRes = CreateProcessW(engineExecutablePath.c_str(), (LPWSTR) params,
Oleksandr 2014/06/26 00:48:43 We've had a similar issue (a need to get a writabl
Eric 2014/06/26 15:13:56 This issue is not contiguous memory. Rather, it's
Felix Dahlke 2014/06/30 13:35:39 c_str() returns a const char, but we using &params
sergei 2014/07/08 11:58:34 I also vote for `&params[0]`.
Eric 2014/07/08 17:46:37 We have two issues: 1) Contiguous memory. 2) Writa
0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation);
}
else
@@ -69,7 +108,7 @@
STARTUPINFO startupInfo = {};
PROCESS_INFORMATION processInformation = {};
- createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(), params.GetBuffer(params.GetLength() + 1),
+ createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(), (LPWSTR) params,
sergei 2014/07/08 11:58:34 First of all, the compile should understand that t
Eric 2014/07/08 17:46:37 I have to admit that the C-style cast is copied fr
0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation);
}
@@ -157,7 +196,7 @@
bool CAdblockPlusClient::CallEngine(Communication::OutputBuffer& message, Communication::InputBuffer& inputBuffer)
{
- DEBUG_GENERAL("CallEngine start");
+ DEBUG_GENERAL(L"CallEngine start");
CriticalSection::Lock lock(enginePipeLock);
try
{
@@ -168,10 +207,10 @@
}
catch (const std::exception& e)
{
- DEBUG_GENERAL(e.what());
+ DEBUG_GENERAL( ABP::debug::widen( e.what() ) );
return false;
}
- DEBUG_GENERAL("CallEngine end");
+ DEBUG_GENERAL(L"CallEngine end");
return true;
}
@@ -209,7 +248,7 @@
}
-bool CAdblockPlusClient::ShouldBlock(CString src, int contentType, const CString& domain, bool addDebug)
+bool CAdblockPlusClient::ShouldBlock( std::wstring src, int contentType, const std::wstring & domain, bool addDebug)
Oleksandr 2014/06/26 00:48:43 Nit: no space after const std::wstring
{
bool isBlocked = false;
@@ -219,7 +258,7 @@
m_criticalSectionCache.Lock();
{
- std::map<CString,bool>::iterator it = m_cacheBlockedSources.find(src);
+ std::map< std::wstring, bool >::iterator it = m_cacheBlockedSources.find(src);
isCached = it != m_cacheBlockedSources.end();
if (isCached)
@@ -253,7 +292,7 @@
return isBlocked;
}
-bool CAdblockPlusClient::IsElementHidden(const CString& tag, IHTMLElement* pEl, const CString& domain, const CString& indent, CPluginFilter* filter)
+bool CAdblockPlusClient::IsElementHidden(const std::wstring & tag, IHTMLElement* pEl, const std::wstring & domain, const std::wstring & indent, CPluginFilter* filter)
{
bool isHidden;
m_criticalSectionFilter.Lock();
@@ -266,7 +305,7 @@
bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url)
{
- DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" start").c_str());
+ DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" start");
Communication::OutputBuffer request;
request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url);
@@ -277,7 +316,7 @@
bool isWhitelisted;
response >> isWhitelisted;
- DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" end").c_str());
+ DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" end");
return isWhitelisted;
}
@@ -365,7 +404,7 @@
bool CAdblockPlusClient::IsFirstRun()
{
- DEBUG_GENERAL("IsFirstRun");
+ DEBUG_GENERAL(L"IsFirstRun");
Communication::InputBuffer response;
if (!CallEngine(Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED, response)) return false;
bool res;
@@ -413,7 +452,7 @@
}
std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const std::wstring& defaultValue)
{
- DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" start");
Communication::OutputBuffer request;
request << Communication::PROC_GET_PREF << ToUtf8String(name);
@@ -426,19 +465,19 @@
{
std::string value;
response >> value;
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return ToUtf16String(value);
}
else
{
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return defaultValue;
}
}
bool CAdblockPlusClient::GetPref(const std::wstring& name, bool defaultValue)
{
- DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" start");
Communication::OutputBuffer request;
request << Communication::PROC_GET_PREF << ToUtf8String(name);
@@ -451,18 +490,18 @@
{
bool value;
response >> value;
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return value;
}
else
{
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return defaultValue;
}
}
int64_t CAdblockPlusClient::GetPref(const std::wstring& name, int64_t defaultValue)
{
- DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" start");
Communication::OutputBuffer request;
request << Communication::PROC_GET_PREF << ToUtf8String(name);
@@ -475,12 +514,12 @@
{
int64_t value;
response >> value;
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return value;
}
else
{
- DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str());
+ DEBUG_GENERAL(L"GetPref: " + name + L" end");
return defaultValue;
}
}
@@ -494,7 +533,7 @@
std::wstring CAdblockPlusClient::GetDocumentationLink()
{
- DEBUG_GENERAL("GetDocumentationLink");
+ DEBUG_GENERAL(L"GetDocumentationLink");
Communication::InputBuffer response;
if (!CallEngine(Communication::PROC_GET_DOCUMENTATION_LINK, response))
return L"";
@@ -505,7 +544,7 @@
bool CAdblockPlusClient::TogglePluginEnabled()
{
- DEBUG_GENERAL("TogglePluginEnabled");
+ DEBUG_GENERAL(L"TogglePluginEnabled");
Communication::InputBuffer response;
if (!CallEngine(Communication::PROC_TOGGLE_PLUGIN_ENABLED, response))
return false;
@@ -515,7 +554,7 @@
}
std::wstring CAdblockPlusClient::GetHostFromUrl(const std::wstring& url)
{
- DEBUG_GENERAL("GetHostFromUrl");
+ DEBUG_GENERAL(L"GetHostFromUrl");
Communication::OutputBuffer request;
request << Communication::PROC_GET_HOST << ToUtf8String(url);

Powered by Google App Engine
This is Rietveld