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

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

Issue 5750789393874944: [IE] First round of ATL removal (Closed)
Patch Set: Created June 20, 2014, 9:22 p.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 #include "PluginStdAfx.h" 1 #include "PluginStdAfx.h"
2 #include "PluginSettings.h" 2 #include "PluginSettings.h"
3 #include "PluginSystem.h" 3 #include "PluginSystem.h"
4 #include "PluginFilter.h" 4 #include "PluginFilter.h"
5 #include "PluginClientFactory.h" 5 #include "PluginClientFactory.h"
6 #include "PluginMutex.h" 6 #include "PluginMutex.h"
7 #include "PluginClass.h" 7 #include "PluginClass.h"
8 8
9 #include "AdblockPlusClient.h" 9 #include "AdblockPlusClient.h"
10 10
11 #include "../shared/Utils.h" 11 #include "../shared/Utils.h"
12 12
13 #include <memory>
14
13 namespace 15 namespace
14 { 16 {
17 /**
18 * A temporary wchar buffer, initialized from a wstring.
19 * Used to pass parameters to CreateProcess* API functions, which may modify t he buffer contents.
20 *
21 * This class is a wrapper around unique_ptr.
22 */
23 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
24 /**
25 * Length of input string, not including terminating null character.
26 */
27 size_t len ;
28
29 /**
30 * The underlying unique_ptr
31 */
32 std::unique_ptr< wchar_t[] > buffer ;
Oleksandr 2014/06/26 00:48:43 Nit: Here and in other places no space after < and
33
34 public:
35 /**
36 * Ordinary constructor.
37 */
38 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.
39 : len( s.length() ), buffer( new wchar_t[ len + 1 ] )
40 {
41 s.copy( buffer.get(), len );
42 buffer[ len ] = L'\0' ;
43 }
44
45 /**
46 * Conversion operator returns pointer to allocated buffer.
47 */
48 operator wchar_t *()
49 {
50 return buffer.get();
51 }
52 };
53
15 void SpawnAdblockPlusEngine() 54 void SpawnAdblockPlusEngine()
16 { 55 {
17 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; 56 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe";
18 CString params = L"AdblockPlusEngine.exe " + CPluginSystem::GetInstance()->G etBrowserLanguage(); 57 temporary_wchar_buffer params( L"AdblockPlusEngine.exe " + CPluginSystem::Ge tInstance()->GetBrowserLanguage() );
19 58
20 STARTUPINFO startupInfo = {}; 59 STARTUPINFO startupInfo = {};
21 PROCESS_INFORMATION processInformation = {}; 60 PROCESS_INFORMATION processInformation = {};
22 61
23 HANDLE token; 62 HANDLE token;
24 OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT | TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY, &token); 63 OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT | TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY, &token);
25 64
26 TOKEN_APPCONTAINER_INFORMATION *acs = NULL; 65 TOKEN_APPCONTAINER_INFORMATION *acs = NULL;
27 DWORD length = 0; 66 DWORD length = 0;
28 67
(...skipping 10 matching lines...) Expand all
39 throw std::runtime_error("Out of memory"); 78 throw std::runtime_error("Out of memory");
40 } 79 }
41 } 80 }
42 81
43 BOOL createProcRes = 0; 82 BOOL createProcRes = 0;
44 // Running inside AppContainer or in Windows XP 83 // Running inside AppContainer or in Windows XP
45 if ((acs != NULL && acs->TokenAppContainer != NULL) || (!IsWindowsVistaOrLat er())) 84 if ((acs != NULL && acs->TokenAppContainer != NULL) || (!IsWindowsVistaOrLat er()))
46 { 85 {
47 // We need to break out from AppContainer. Launch with default security - registry entry will eat the user prompt 86 // We need to break out from AppContainer. Launch with default security - registry entry will eat the user prompt
48 // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_ elebp 87 // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_ elebp
49 createProcRes = CreateProcessW(engineExecutablePath.c_str(), params.GetBuf fer(params.GetLength() + 1), 88 createProcRes = CreateProcessW(engineExecutablePath.c_str(), (LPWSTR) para ms,
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
50 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation); 89 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation);
51 } 90 }
52 else 91 else
53 { 92 {
54 // Launch with Low Integrity explicitly 93 // Launch with Low Integrity explicitly
55 HANDLE newToken; 94 HANDLE newToken;
56 DuplicateTokenEx(token, 0, 0, SecurityImpersonation, TokenPrimary, &newTok en); 95 DuplicateTokenEx(token, 0, 0, SecurityImpersonation, TokenPrimary, &newTok en);
57 96
58 PSID integritySid = 0; 97 PSID integritySid = 0;
59 ConvertStringSidToSid(L"S-1-16-4096", &integritySid); 98 ConvertStringSidToSid(L"S-1-16-4096", &integritySid);
60 std::tr1::shared_ptr<SID> sharedIntegritySid(static_cast<SID*>(integritySi d), FreeSid); // Just to simplify cleanup 99 std::tr1::shared_ptr<SID> sharedIntegritySid(static_cast<SID*>(integritySi d), FreeSid); // Just to simplify cleanup
61 100
62 TOKEN_MANDATORY_LABEL tml = {}; 101 TOKEN_MANDATORY_LABEL tml = {};
63 tml.Label.Attributes = SE_GROUP_INTEGRITY; 102 tml.Label.Attributes = SE_GROUP_INTEGRITY;
64 tml.Label.Sid = integritySid; 103 tml.Label.Sid = integritySid;
65 104
66 // Set the process integrity level 105 // Set the process integrity level
67 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(TOKEN_MAND ATORY_LABEL) + GetLengthSid(integritySid)); 106 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(TOKEN_MAND ATORY_LABEL) + GetLengthSid(integritySid));
68 107
69 STARTUPINFO startupInfo = {}; 108 STARTUPINFO startupInfo = {};
70 PROCESS_INFORMATION processInformation = {}; 109 PROCESS_INFORMATION processInformation = {};
71 110
72 createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str( ), params.GetBuffer(params.GetLength() + 1), 111 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
73 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation); 112 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo, &processInformation);
74 } 113 }
75 114
76 if (!createProcRes) 115 if (!createProcRes)
77 { 116 {
78 throw std::runtime_error("Failed to start Adblock Plus Engine"); 117 throw std::runtime_error("Failed to start Adblock Plus Engine");
79 } 118 }
80 119
81 CloseHandle(processInformation.hProcess); 120 CloseHandle(processInformation.hProcess);
82 CloseHandle(processInformation.hThread); 121 CloseHandle(processInformation.hThread);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 189
151 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; 190 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL;
152 191
153 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() 192 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase()
154 { 193 {
155 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); 194 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter());
156 } 195 }
157 196
158 bool CAdblockPlusClient::CallEngine(Communication::OutputBuffer& message, Commun ication::InputBuffer& inputBuffer) 197 bool CAdblockPlusClient::CallEngine(Communication::OutputBuffer& message, Commun ication::InputBuffer& inputBuffer)
159 { 198 {
160 DEBUG_GENERAL("CallEngine start"); 199 DEBUG_GENERAL(L"CallEngine start");
161 CriticalSection::Lock lock(enginePipeLock); 200 CriticalSection::Lock lock(enginePipeLock);
162 try 201 try
163 { 202 {
164 if (!enginePipe) 203 if (!enginePipe)
165 enginePipe.reset(OpenEnginePipe()); 204 enginePipe.reset(OpenEnginePipe());
166 enginePipe->WriteMessage(message); 205 enginePipe->WriteMessage(message);
167 inputBuffer = enginePipe->ReadMessage(); 206 inputBuffer = enginePipe->ReadMessage();
168 } 207 }
169 catch (const std::exception& e) 208 catch (const std::exception& e)
170 { 209 {
171 DEBUG_GENERAL(e.what()); 210 DEBUG_GENERAL( ABP::debug::widen( e.what() ) );
172 return false; 211 return false;
173 } 212 }
174 DEBUG_GENERAL("CallEngine end"); 213 DEBUG_GENERAL(L"CallEngine end");
175 return true; 214 return true;
176 } 215 }
177 216
178 bool CAdblockPlusClient::CallEngine(Communication::ProcType proc, Communication: :InputBuffer& inputBuffer) 217 bool CAdblockPlusClient::CallEngine(Communication::ProcType proc, Communication: :InputBuffer& inputBuffer)
179 { 218 {
180 Communication::OutputBuffer message; 219 Communication::OutputBuffer message;
181 message << proc; 220 message << proc;
182 return CallEngine(message, inputBuffer); 221 return CallEngine(message, inputBuffer);
183 } 222 }
184 223
(...skipping 17 matching lines...) Expand all
202 } 241 }
203 242
204 instance = s_instance; 243 instance = s_instance;
205 } 244 }
206 s_criticalSectionLocal.Unlock(); 245 s_criticalSectionLocal.Unlock();
207 246
208 return instance; 247 return instance;
209 } 248 }
210 249
211 250
212 bool CAdblockPlusClient::ShouldBlock(CString src, int contentType, const CString & domain, bool addDebug) 251 bool CAdblockPlusClient::ShouldBlock( std::wstring src, int contentType, const s td::wstring & domain, bool addDebug)
Oleksandr 2014/06/26 00:48:43 Nit: no space after const std::wstring
213 { 252 {
214 bool isBlocked = false; 253 bool isBlocked = false;
215 254
216 bool isCached = false; 255 bool isCached = false;
217 256
218 CPluginSettings* settings = CPluginSettings::GetInstance(); 257 CPluginSettings* settings = CPluginSettings::GetInstance();
219 258
220 m_criticalSectionCache.Lock(); 259 m_criticalSectionCache.Lock();
221 { 260 {
222 std::map<CString,bool>::iterator it = m_cacheBlockedSources.find(src); 261 std::map< std::wstring, bool >::iterator it = m_cacheBlockedSources.find(src );
223 262
224 isCached = it != m_cacheBlockedSources.end(); 263 isCached = it != m_cacheBlockedSources.end();
225 if (isCached) 264 if (isCached)
226 { 265 {
227 isBlocked = it->second; 266 isBlocked = it->second;
228 } 267 }
229 } 268 }
230 m_criticalSectionCache.Unlock(); 269 m_criticalSectionCache.Unlock();
231 270
232 if (!isCached) 271 if (!isCached)
(...skipping 13 matching lines...) Expand all
246 m_cacheBlockedSources[src] = isBlocked; 285 m_cacheBlockedSources[src] = isBlocked;
247 } 286 }
248 m_criticalSectionCache.Unlock(); 287 m_criticalSectionCache.Unlock();
249 } 288 }
250 } 289 }
251 290
252 291
253 return isBlocked; 292 return isBlocked;
254 } 293 }
255 294
256 bool CAdblockPlusClient::IsElementHidden(const CString& tag, IHTMLElement* pEl, const CString& domain, const CString& indent, CPluginFilter* filter) 295 bool CAdblockPlusClient::IsElementHidden(const std::wstring & tag, IHTMLElement* pEl, const std::wstring & domain, const std::wstring & indent, CPluginFilter* f ilter)
257 { 296 {
258 bool isHidden; 297 bool isHidden;
259 m_criticalSectionFilter.Lock(); 298 m_criticalSectionFilter.Lock();
260 { 299 {
261 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent); 300 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent);
262 } 301 }
263 m_criticalSectionFilter.Unlock(); 302 m_criticalSectionFilter.Unlock();
264 return isHidden; 303 return isHidden;
265 } 304 }
266 305
267 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url) 306 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url)
268 { 307 {
269 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" start").c_str()); 308 DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" start");
270 Communication::OutputBuffer request; 309 Communication::OutputBuffer request;
271 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url); 310 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url);
272 311
273 Communication::InputBuffer response; 312 Communication::InputBuffer response;
274 if (!CallEngine(request, response)) 313 if (!CallEngine(request, response))
275 return false; 314 return false;
276 315
277 bool isWhitelisted; 316 bool isWhitelisted;
278 response >> isWhitelisted; 317 response >> isWhitelisted;
279 318
280 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" end").c_str()); 319 DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" end");
281 return isWhitelisted; 320 return isWhitelisted;
282 } 321 }
283 322
284 int CAdblockPlusClient::GetIEVersion() 323 int CAdblockPlusClient::GetIEVersion()
285 { 324 {
286 //HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer 325 //HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer
287 HKEY hKey; 326 HKEY hKey;
288 LSTATUS status = RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Interne t Explorer", &hKey); 327 LSTATUS status = RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Interne t Explorer", &hKey);
289 if (status != 0) 328 if (status != 0)
290 { 329 {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 std::vector<std::wstring> CAdblockPlusClient::GetExceptionDomains() 397 std::vector<std::wstring> CAdblockPlusClient::GetExceptionDomains()
359 { 398 {
360 Communication::InputBuffer response; 399 Communication::InputBuffer response;
361 if (!CallEngine(Communication::PROC_GET_EXCEPTION_DOMAINS, response)) 400 if (!CallEngine(Communication::PROC_GET_EXCEPTION_DOMAINS, response))
362 return std::vector<std::wstring>(); 401 return std::vector<std::wstring>();
363 return ReadStrings(response); 402 return ReadStrings(response);
364 } 403 }
365 404
366 bool CAdblockPlusClient::IsFirstRun() 405 bool CAdblockPlusClient::IsFirstRun()
367 { 406 {
368 DEBUG_GENERAL("IsFirstRun"); 407 DEBUG_GENERAL(L"IsFirstRun");
369 Communication::InputBuffer response; 408 Communication::InputBuffer response;
370 if (!CallEngine(Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED, response)) ret urn false; 409 if (!CallEngine(Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED, response)) ret urn false;
371 bool res; 410 bool res;
372 response >> res; 411 response >> res;
373 return res; 412 return res;
374 } 413 }
375 void CAdblockPlusClient::AddFilter(const std::wstring& text) 414 void CAdblockPlusClient::AddFilter(const std::wstring& text)
376 { 415 {
377 Communication::OutputBuffer request; 416 Communication::OutputBuffer request;
378 request << Communication::PROC_ADD_FILTER << ToUtf8String(text); 417 request << Communication::PROC_ADD_FILTER << ToUtf8String(text);
(...skipping 27 matching lines...) Expand all
406 request << Communication::PROC_SET_PREF << ToUtf8String(name) << value; 445 request << Communication::PROC_SET_PREF << ToUtf8String(name) << value;
407 CallEngine(request); 446 CallEngine(request);
408 } 447 }
409 448
410 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const wchar_t * defaultValue) 449 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const wchar_t * defaultValue)
411 { 450 {
412 return GetPref(name, std::wstring(defaultValue)); 451 return GetPref(name, std::wstring(defaultValue));
413 } 452 }
414 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const std::ws tring& defaultValue) 453 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const std::ws tring& defaultValue)
415 { 454 {
416 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); 455 DEBUG_GENERAL(L"GetPref: " + name + L" start");
417 Communication::OutputBuffer request; 456 Communication::OutputBuffer request;
418 request << Communication::PROC_GET_PREF << ToUtf8String(name); 457 request << Communication::PROC_GET_PREF << ToUtf8String(name);
419 458
420 Communication::InputBuffer response; 459 Communication::InputBuffer response;
421 if (!CallEngine(request, response)) 460 if (!CallEngine(request, response))
422 return defaultValue; 461 return defaultValue;
423 bool success; 462 bool success;
424 response >> success; 463 response >> success;
425 if (success) 464 if (success)
426 { 465 {
427 std::string value; 466 std::string value;
428 response >> value; 467 response >> value;
429 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 468 DEBUG_GENERAL(L"GetPref: " + name + L" end");
430 return ToUtf16String(value); 469 return ToUtf16String(value);
431 } 470 }
432 else 471 else
433 { 472 {
434 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 473 DEBUG_GENERAL(L"GetPref: " + name + L" end");
435 return defaultValue; 474 return defaultValue;
436 } 475 }
437 } 476 }
438 477
439 bool CAdblockPlusClient::GetPref(const std::wstring& name, bool defaultValue) 478 bool CAdblockPlusClient::GetPref(const std::wstring& name, bool defaultValue)
440 { 479 {
441 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); 480 DEBUG_GENERAL(L"GetPref: " + name + L" start");
442 Communication::OutputBuffer request; 481 Communication::OutputBuffer request;
443 request << Communication::PROC_GET_PREF << ToUtf8String(name); 482 request << Communication::PROC_GET_PREF << ToUtf8String(name);
444 483
445 Communication::InputBuffer response; 484 Communication::InputBuffer response;
446 if (!CallEngine(request, response)) 485 if (!CallEngine(request, response))
447 return defaultValue; 486 return defaultValue;
448 bool success; 487 bool success;
449 response >> success; 488 response >> success;
450 if (success) 489 if (success)
451 { 490 {
452 bool value; 491 bool value;
453 response >> value; 492 response >> value;
454 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 493 DEBUG_GENERAL(L"GetPref: " + name + L" end");
455 return value; 494 return value;
456 } 495 }
457 else 496 else
458 { 497 {
459 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 498 DEBUG_GENERAL(L"GetPref: " + name + L" end");
460 return defaultValue; 499 return defaultValue;
461 } 500 }
462 } 501 }
463 int64_t CAdblockPlusClient::GetPref(const std::wstring& name, int64_t defaultVal ue) 502 int64_t CAdblockPlusClient::GetPref(const std::wstring& name, int64_t defaultVal ue)
464 { 503 {
465 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); 504 DEBUG_GENERAL(L"GetPref: " + name + L" start");
466 Communication::OutputBuffer request; 505 Communication::OutputBuffer request;
467 request << Communication::PROC_GET_PREF << ToUtf8String(name); 506 request << Communication::PROC_GET_PREF << ToUtf8String(name);
468 507
469 Communication::InputBuffer response; 508 Communication::InputBuffer response;
470 if (!CallEngine(request, response)) 509 if (!CallEngine(request, response))
471 return defaultValue; 510 return defaultValue;
472 bool success; 511 bool success;
473 response >> success; 512 response >> success;
474 if (success) 513 if (success)
475 { 514 {
476 int64_t value; 515 int64_t value;
477 response >> value; 516 response >> value;
478 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 517 DEBUG_GENERAL(L"GetPref: " + name + L" end");
479 return value; 518 return value;
480 } 519 }
481 else 520 else
482 { 521 {
483 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); 522 DEBUG_GENERAL(L"GetPref: " + name + L" end");
484 return defaultValue; 523 return defaultValue;
485 } 524 }
486 } 525 }
487 526
488 void CAdblockPlusClient::CheckForUpdates(HWND callbackWindow) 527 void CAdblockPlusClient::CheckForUpdates(HWND callbackWindow)
489 { 528 {
490 Communication::OutputBuffer request; 529 Communication::OutputBuffer request;
491 request << Communication::PROC_CHECK_FOR_UPDATES << reinterpret_cast<int32_t>( callbackWindow); 530 request << Communication::PROC_CHECK_FOR_UPDATES << reinterpret_cast<int32_t>( callbackWindow);
492 CallEngine(request); 531 CallEngine(request);
493 } 532 }
494 533
495 std::wstring CAdblockPlusClient::GetDocumentationLink() 534 std::wstring CAdblockPlusClient::GetDocumentationLink()
496 { 535 {
497 DEBUG_GENERAL("GetDocumentationLink"); 536 DEBUG_GENERAL(L"GetDocumentationLink");
498 Communication::InputBuffer response; 537 Communication::InputBuffer response;
499 if (!CallEngine(Communication::PROC_GET_DOCUMENTATION_LINK, response)) 538 if (!CallEngine(Communication::PROC_GET_DOCUMENTATION_LINK, response))
500 return L""; 539 return L"";
501 std::wstring docLink; 540 std::wstring docLink;
502 response >> docLink; 541 response >> docLink;
503 return docLink; 542 return docLink;
504 } 543 }
505 544
506 bool CAdblockPlusClient::TogglePluginEnabled() 545 bool CAdblockPlusClient::TogglePluginEnabled()
507 { 546 {
508 DEBUG_GENERAL("TogglePluginEnabled"); 547 DEBUG_GENERAL(L"TogglePluginEnabled");
509 Communication::InputBuffer response; 548 Communication::InputBuffer response;
510 if (!CallEngine(Communication::PROC_TOGGLE_PLUGIN_ENABLED, response)) 549 if (!CallEngine(Communication::PROC_TOGGLE_PLUGIN_ENABLED, response))
511 return false; 550 return false;
512 bool currentEnabledState; 551 bool currentEnabledState;
513 response >> currentEnabledState; 552 response >> currentEnabledState;
514 return currentEnabledState; 553 return currentEnabledState;
515 } 554 }
516 std::wstring CAdblockPlusClient::GetHostFromUrl(const std::wstring& url) 555 std::wstring CAdblockPlusClient::GetHostFromUrl(const std::wstring& url)
517 { 556 {
518 DEBUG_GENERAL("GetHostFromUrl"); 557 DEBUG_GENERAL(L"GetHostFromUrl");
519 Communication::OutputBuffer request; 558 Communication::OutputBuffer request;
520 request << Communication::PROC_GET_HOST << ToUtf8String(url); 559 request << Communication::PROC_GET_HOST << ToUtf8String(url);
521 560
522 Communication::InputBuffer response; 561 Communication::InputBuffer response;
523 if (!CallEngine(request, response)) 562 if (!CallEngine(request, response))
524 return L""; 563 return L"";
525 std::string host; 564 std::string host;
526 response >> host; 565 response >> host;
527 return ToUtf16String(host); 566 return ToUtf16String(host);
528 } 567 }
OLDNEW

Powered by Google App Engine
This is Rietveld