| LEFT | RIGHT |
| 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 | |
| 15 namespace | 13 namespace |
| 16 { | 14 { |
| 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 { | |
| 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 ; | |
| 33 | |
| 34 public: | |
| 35 /** | |
| 36 * Ordinary constructor. | |
| 37 */ | |
| 38 temporary_wchar_buffer( std::wstring s ) | |
| 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 | |
| 54 void SpawnAdblockPlusEngine() | 15 void SpawnAdblockPlusEngine() |
| 55 { | 16 { |
| 56 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; | 17 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; |
| 57 temporary_wchar_buffer params( L"AdblockPlusEngine.exe " + CPluginSystem::Ge
tInstance()->GetBrowserLanguage() ); | 18 CString params = to_CString(L"AdblockPlusEngine.exe " + GetBrowserLanguage()
); |
| 58 | 19 |
| 59 STARTUPINFO startupInfo = {}; | 20 STARTUPINFO startupInfo = {}; |
| 60 PROCESS_INFORMATION processInformation = {}; | 21 PROCESS_INFORMATION processInformation = {}; |
| 61 | 22 |
| 62 HANDLE token; | 23 HANDLE token; |
| 63 OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT
| TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY, &token); | 24 OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_ADJUST_DEFAULT
| TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY, &token); |
| 64 | 25 |
| 65 TOKEN_APPCONTAINER_INFORMATION *acs = NULL; | 26 TOKEN_APPCONTAINER_INFORMATION *acs = NULL; |
| 66 DWORD length = 0; | 27 DWORD length = 0; |
| 67 | 28 |
| 68 // Get AppContainer SID | 29 // Get AppContainer SID |
| 69 if (!GetTokenInformation(token, TokenAppContainerSid, acs, 0, &length) && Ge
tLastError() == ERROR_INSUFFICIENT_BUFFER) | 30 if (!GetTokenInformation(token, TokenAppContainerSid, acs, 0, &length) && Ge
tLastError() == ERROR_INSUFFICIENT_BUFFER) |
| 70 { | 31 { |
| 71 acs = (TOKEN_APPCONTAINER_INFORMATION*) HeapAlloc(GetProcessHeap(), HEAP
_ZERO_MEMORY, length); | 32 acs = (TOKEN_APPCONTAINER_INFORMATION*) HeapAlloc(GetProcessHeap(), HEAP
_ZERO_MEMORY, length); |
| 72 if (acs != NULL) | 33 if (acs != NULL) |
| 73 { | 34 { |
| 74 GetTokenInformation(token, TokenAppContainerSid, acs, length, &length)
; | 35 GetTokenInformation(token, TokenAppContainerSid, acs, length, &length)
; |
| 75 } | 36 } |
| 76 else | 37 else |
| 77 { | 38 { |
| 78 throw std::runtime_error("Out of memory"); | 39 throw std::runtime_error("Out of memory"); |
| 79 } | 40 } |
| 80 } | 41 } |
| 81 | 42 |
| 82 BOOL createProcRes = 0; | 43 BOOL createProcRes = 0; |
| 83 // Running inside AppContainer or in Windows XP | 44 // Running inside AppContainer or in Windows XP |
| 84 if ((acs != NULL && acs->TokenAppContainer != NULL) || (!IsWindowsVistaOrLat
er())) | 45 if ((acs != NULL && acs->TokenAppContainer != NULL) || !IsWindowsVistaOrLate
r()) |
| 85 { | 46 { |
| 86 // We need to break out from AppContainer. Launch with default security -
registry entry will eat the user prompt | 47 // We need to break out from AppContainer. Launch with default security -
registry entry will eat the user prompt |
| 87 // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_
elebp | 48 // See http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx#wpm_
elebp |
| 88 createProcRes = CreateProcessW(engineExecutablePath.c_str(), (LPWSTR) para
ms, | 49 createProcRes = CreateProcessW(engineExecutablePath.c_str(), params.GetBuf
fer(params.GetLength() + 1), |
| 89 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); | 50 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); |
| 90 } | 51 } |
| 91 else | 52 else |
| 92 { | 53 { |
| 93 // Launch with Low Integrity explicitly | 54 // Launch with Low Integrity explicitly |
| 94 HANDLE newToken; | 55 HANDLE newToken; |
| 95 DuplicateTokenEx(token, 0, 0, SecurityImpersonation, TokenPrimary, &newTok
en); | 56 DuplicateTokenEx(token, 0, 0, SecurityImpersonation, TokenPrimary, &newTok
en); |
| 96 | 57 |
| 97 PSID integritySid = 0; | 58 PSID integritySid = 0; |
| 98 ConvertStringSidToSid(L"S-1-16-4096", &integritySid); | 59 ConvertStringSidToSid(L"S-1-16-4096", &integritySid); |
| 99 std::tr1::shared_ptr<SID> sharedIntegritySid(static_cast<SID*>(integritySi
d), FreeSid); // Just to simplify cleanup | 60 std::tr1::shared_ptr<SID> sharedIntegritySid(static_cast<SID*>(integritySi
d), FreeSid); // Just to simplify cleanup |
| 100 | 61 |
| 101 TOKEN_MANDATORY_LABEL tml = {}; | 62 TOKEN_MANDATORY_LABEL tml = {}; |
| 102 tml.Label.Attributes = SE_GROUP_INTEGRITY; | 63 tml.Label.Attributes = SE_GROUP_INTEGRITY; |
| 103 tml.Label.Sid = integritySid; | 64 tml.Label.Sid = integritySid; |
| 104 | 65 |
| 105 // Set the process integrity level | 66 // Set the process integrity level |
| 106 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(TOKEN_MAND
ATORY_LABEL) + GetLengthSid(integritySid)); | 67 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(tml)); |
| 107 | 68 |
| 108 STARTUPINFO startupInfo = {}; | 69 STARTUPINFO startupInfo = {}; |
| 109 PROCESS_INFORMATION processInformation = {}; | 70 PROCESS_INFORMATION processInformation = {}; |
| 110 | 71 |
| 111 createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(
), (LPWSTR) params, | 72 createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(
), params.GetBuffer(params.GetLength() + 1), |
| 112 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); | 73 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); |
| 113 } | 74 } |
| 114 | 75 |
| 115 if (!createProcRes) | 76 if (!createProcRes) |
| 116 { | 77 { |
| 117 throw std::runtime_error("Failed to start Adblock Plus Engine"); | 78 throw std::runtime_error("Failed to start Adblock Plus Engine"); |
| 118 } | 79 } |
| 119 | 80 |
| 120 CloseHandle(processInformation.hProcess); | 81 CloseHandle(processInformation.hProcess); |
| 121 CloseHandle(processInformation.hThread); | 82 CloseHandle(processInformation.hThread); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 | 150 |
| 190 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; | 151 CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; |
| 191 | 152 |
| 192 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() | 153 CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() |
| 193 { | 154 { |
| 194 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); | 155 m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); |
| 195 } | 156 } |
| 196 | 157 |
| 197 bool CAdblockPlusClient::CallEngine(Communication::OutputBuffer& message, Commun
ication::InputBuffer& inputBuffer) | 158 bool CAdblockPlusClient::CallEngine(Communication::OutputBuffer& message, Commun
ication::InputBuffer& inputBuffer) |
| 198 { | 159 { |
| 199 DEBUG_GENERAL(L"CallEngine start"); | 160 DEBUG_GENERAL("CallEngine start"); |
| 200 CriticalSection::Lock lock(enginePipeLock); | 161 CriticalSection::Lock lock(enginePipeLock); |
| 201 try | 162 try |
| 202 { | 163 { |
| 203 if (!enginePipe) | 164 if (!enginePipe) |
| 204 enginePipe.reset(OpenEnginePipe()); | 165 enginePipe.reset(OpenEnginePipe()); |
| 205 enginePipe->WriteMessage(message); | 166 enginePipe->WriteMessage(message); |
| 206 inputBuffer = enginePipe->ReadMessage(); | 167 inputBuffer = enginePipe->ReadMessage(); |
| 207 } | 168 } |
| 208 catch (const std::exception& e) | 169 catch (const std::exception& e) |
| 209 { | 170 { |
| 210 DEBUG_GENERAL( ABP::debug::widen( e.what() ) ); | 171 DEBUG_GENERAL(e.what()); |
| 211 return false; | 172 return false; |
| 212 } | 173 } |
| 213 DEBUG_GENERAL(L"CallEngine end"); | 174 DEBUG_GENERAL("CallEngine end"); |
| 214 return true; | 175 return true; |
| 215 } | 176 } |
| 216 | 177 |
| 217 bool CAdblockPlusClient::CallEngine(Communication::ProcType proc, Communication:
:InputBuffer& inputBuffer) | 178 bool CAdblockPlusClient::CallEngine(Communication::ProcType proc, Communication:
:InputBuffer& inputBuffer) |
| 218 { | 179 { |
| 219 Communication::OutputBuffer message; | 180 Communication::OutputBuffer message; |
| 220 message << proc; | 181 message << proc; |
| 221 return CallEngine(message, inputBuffer); | 182 return CallEngine(message, inputBuffer); |
| 222 } | 183 } |
| 223 | 184 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 240 s_instance = client; | 201 s_instance = client; |
| 241 } | 202 } |
| 242 | 203 |
| 243 instance = s_instance; | 204 instance = s_instance; |
| 244 } | 205 } |
| 245 s_criticalSectionLocal.Unlock(); | 206 s_criticalSectionLocal.Unlock(); |
| 246 | 207 |
| 247 return instance; | 208 return instance; |
| 248 } | 209 } |
| 249 | 210 |
| 250 | 211 bool CAdblockPlusClient::ShouldBlock(const std::wstring& src, int contentType, c
onst std::wstring& domain, bool addDebug) |
| 251 bool CAdblockPlusClient::ShouldBlock( std::wstring src, int contentType, const s
td::wstring & domain, bool addDebug) | |
| 252 { | 212 { |
| 253 bool isBlocked = false; | 213 bool isBlocked = false; |
| 254 | |
| 255 bool isCached = false; | 214 bool isCached = false; |
| 256 | |
| 257 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
| 258 | |
| 259 m_criticalSectionCache.Lock(); | 215 m_criticalSectionCache.Lock(); |
| 260 { | 216 { |
| 261 std::map< std::wstring, bool >::iterator it = m_cacheBlockedSources.find(src
); | 217 auto it = m_cacheBlockedSources.find(src); |
| 262 | 218 |
| 263 isCached = it != m_cacheBlockedSources.end(); | 219 isCached = it != m_cacheBlockedSources.end(); |
| 264 if (isCached) | 220 if (isCached) |
| 265 { | 221 { |
| 266 isBlocked = it->second; | 222 isBlocked = it->second; |
| 267 } | 223 } |
| 268 } | 224 } |
| 269 m_criticalSectionCache.Unlock(); | 225 m_criticalSectionCache.Unlock(); |
| 270 | 226 |
| 271 if (!isCached) | 227 if (!isCached) |
| 272 { | 228 { |
| 273 m_criticalSectionFilter.Lock(); | 229 m_criticalSectionFilter.Lock(); |
| 274 { | 230 { |
| 275 isBlocked = m_filter->ShouldBlock(src, contentType, domain, addDebug); | 231 isBlocked = m_filter->ShouldBlock(src, contentType, domain, addDebug); |
| 276 } | 232 } |
| 277 m_criticalSectionFilter.Unlock(); | 233 m_criticalSectionFilter.Unlock(); |
| 278 | |
| 279 | 234 |
| 280 // Cache result, if content type is defined | 235 // Cache result, if content type is defined |
| 281 if (contentType != CFilter::contentTypeAny) | 236 if (contentType != CFilter::contentTypeAny) |
| 282 { | 237 { |
| 283 m_criticalSectionCache.Lock(); | 238 m_criticalSectionCache.Lock(); |
| 284 { | 239 { |
| 285 m_cacheBlockedSources[src] = isBlocked; | 240 m_cacheBlockedSources[src] = isBlocked; |
| 286 } | 241 } |
| 287 m_criticalSectionCache.Unlock(); | 242 m_criticalSectionCache.Unlock(); |
| 288 } | 243 } |
| 289 } | 244 } |
| 290 | |
| 291 | |
| 292 return isBlocked; | 245 return isBlocked; |
| 293 } | 246 } |
| 294 | 247 |
| 295 bool CAdblockPlusClient::IsElementHidden(const std::wstring & tag, IHTMLElement*
pEl, const std::wstring & domain, const std::wstring & indent, CPluginFilter* f
ilter) | 248 bool CAdblockPlusClient::IsElementHidden(const std::wstring& tag, IHTMLElement*
pEl, const std::wstring& domain, const std::wstring& indent, CPluginFilter* filt
er) |
| 296 { | 249 { |
| 297 bool isHidden; | 250 bool isHidden; |
| 298 m_criticalSectionFilter.Lock(); | 251 m_criticalSectionFilter.Lock(); |
| 299 { | 252 { |
| 300 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent); | 253 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent); |
| 301 } | 254 } |
| 302 m_criticalSectionFilter.Unlock(); | 255 m_criticalSectionFilter.Unlock(); |
| 303 return isHidden; | 256 return isHidden; |
| 304 } | 257 } |
| 305 | 258 |
| 306 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url) | 259 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url) |
| 307 { | 260 { |
| 308 DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" start"); | 261 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" start").c_str()); |
| 309 Communication::OutputBuffer request; | 262 Communication::OutputBuffer request; |
| 310 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url); | 263 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url); |
| 311 | 264 |
| 312 Communication::InputBuffer response; | 265 Communication::InputBuffer response; |
| 313 if (!CallEngine(request, response)) | 266 if (!CallEngine(request, response)) |
| 314 return false; | 267 return false; |
| 315 | 268 |
| 316 bool isWhitelisted; | 269 bool isWhitelisted; |
| 317 response >> isWhitelisted; | 270 response >> isWhitelisted; |
| 318 | 271 |
| 319 DEBUG_GENERAL(L"IsWhitelistedUrl: " + url + L" end"); | 272 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" end").c_str()); |
| 273 return isWhitelisted; |
| 274 } |
| 275 |
| 276 bool CAdblockPlusClient::IsElemhideWhitelistedOnDomain(const std::wstring& url) |
| 277 { |
| 278 Communication::OutputBuffer request; |
| 279 request << Communication::PROC_IS_ELEMHIDE_WHITELISTED_ON_URL << ToUtf8String(
url); |
| 280 |
| 281 Communication::InputBuffer response; |
| 282 if (!CallEngine(request, response)) |
| 283 return false; |
| 284 |
| 285 bool isWhitelisted; |
| 286 response >> isWhitelisted; |
| 320 return isWhitelisted; | 287 return isWhitelisted; |
| 321 } | 288 } |
| 322 | 289 |
| 323 bool CAdblockPlusClient::Matches(const std::wstring& url, const std::wstring& co
ntentType, const std::wstring& domain) | 290 bool CAdblockPlusClient::Matches(const std::wstring& url, const std::wstring& co
ntentType, const std::wstring& domain) |
| 324 { | 291 { |
| 325 Communication::OutputBuffer request; | 292 Communication::OutputBuffer request; |
| 326 request << Communication::PROC_MATCHES << ToUtf8String(url) << ToUtf8String(co
ntentType) << ToUtf8String(domain); | 293 request << Communication::PROC_MATCHES << ToUtf8String(url) << ToUtf8String(co
ntentType) << ToUtf8String(domain); |
| 327 | 294 |
| 328 Communication::InputBuffer response; | 295 Communication::InputBuffer response; |
| 329 if (!CallEngine(request, response)) | 296 if (!CallEngine(request, response)) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 354 } | 321 } |
| 355 | 322 |
| 356 std::vector<SubscriptionDescription> CAdblockPlusClient::GetListedSubscriptions(
) | 323 std::vector<SubscriptionDescription> CAdblockPlusClient::GetListedSubscriptions(
) |
| 357 { | 324 { |
| 358 Communication::InputBuffer response; | 325 Communication::InputBuffer response; |
| 359 if (!CallEngine(Communication::PROC_LISTED_SUBSCRIPTIONS, response)) | 326 if (!CallEngine(Communication::PROC_LISTED_SUBSCRIPTIONS, response)) |
| 360 return std::vector<SubscriptionDescription>(); | 327 return std::vector<SubscriptionDescription>(); |
| 361 return ReadSubscriptions(response); | 328 return ReadSubscriptions(response); |
| 362 } | 329 } |
| 363 | 330 |
| 331 // Returns true if Acceptable Ads are enabled, false otherwise. |
| 332 bool CAdblockPlusClient::IsAcceptableAdsEnabled() |
| 333 { |
| 334 std::vector<SubscriptionDescription> subscriptions = GetListedSubscriptions(); |
| 335 std::wstring aaUrl = GetPref(L"subscriptions_exceptionsurl", L""); |
| 336 for (std::vector<SubscriptionDescription>::iterator subscription = subscriptio
ns.begin(); subscription != subscriptions.end(); subscription++) |
| 337 { |
| 338 if (subscription->url == aaUrl) |
| 339 { |
| 340 return true; |
| 341 } |
| 342 } |
| 343 return false; |
| 344 } |
| 345 |
| 364 void CAdblockPlusClient::SetSubscription(const std::wstring& url) | 346 void CAdblockPlusClient::SetSubscription(const std::wstring& url) |
| 365 { | 347 { |
| 366 Communication::OutputBuffer request; | 348 Communication::OutputBuffer request; |
| 367 request << Communication::PROC_SET_SUBSCRIPTION << ToUtf8String(url); | 349 request << Communication::PROC_SET_SUBSCRIPTION << ToUtf8String(url); |
| 368 CallEngine(request); | 350 CallEngine(request); |
| 369 } | 351 } |
| 352 |
| 353 void CAdblockPlusClient::AddSubscription(const std::wstring& url) |
| 354 { |
| 355 Communication::OutputBuffer request; |
| 356 request << Communication::PROC_ADD_SUBSCRIPTION << ToUtf8String(url); |
| 357 CallEngine(request); |
| 358 } |
| 359 |
| 360 void CAdblockPlusClient::RemoveSubscription(const std::wstring& url) |
| 361 { |
| 362 Communication::OutputBuffer request; |
| 363 request << Communication::PROC_REMOVE_SUBSCRIPTION << ToUtf8String(url); |
| 364 CallEngine(request); |
| 365 } |
| 366 |
| 370 | 367 |
| 371 void CAdblockPlusClient::UpdateAllSubscriptions() | 368 void CAdblockPlusClient::UpdateAllSubscriptions() |
| 372 { | 369 { |
| 373 CallEngine(Communication::PROC_UPDATE_ALL_SUBSCRIPTIONS); | 370 CallEngine(Communication::PROC_UPDATE_ALL_SUBSCRIPTIONS); |
| 374 } | 371 } |
| 375 | 372 |
| 376 std::vector<std::wstring> CAdblockPlusClient::GetExceptionDomains() | 373 std::vector<std::wstring> CAdblockPlusClient::GetExceptionDomains() |
| 377 { | 374 { |
| 378 Communication::InputBuffer response; | 375 Communication::InputBuffer response; |
| 379 if (!CallEngine(Communication::PROC_GET_EXCEPTION_DOMAINS, response)) | 376 if (!CallEngine(Communication::PROC_GET_EXCEPTION_DOMAINS, response)) |
| 380 return std::vector<std::wstring>(); | 377 return std::vector<std::wstring>(); |
| 381 return ReadStrings(response); | 378 return ReadStrings(response); |
| 382 } | 379 } |
| 383 | 380 |
| 384 bool CAdblockPlusClient::IsFirstRun() | 381 bool CAdblockPlusClient::IsFirstRun() |
| 385 { | 382 { |
| 386 DEBUG_GENERAL(L"IsFirstRun"); | 383 DEBUG_GENERAL("IsFirstRun"); |
| 387 Communication::InputBuffer response; | 384 Communication::InputBuffer response; |
| 388 if (!CallEngine(Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED, response)) ret
urn false; | 385 if (!CallEngine(Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED, response)) ret
urn false; |
| 389 bool res; | 386 bool res; |
| 390 response >> res; | 387 response >> res; |
| 391 return res; | 388 return res; |
| 392 } | 389 } |
| 390 |
| 393 void CAdblockPlusClient::AddFilter(const std::wstring& text) | 391 void CAdblockPlusClient::AddFilter(const std::wstring& text) |
| 394 { | 392 { |
| 395 Communication::OutputBuffer request; | 393 Communication::OutputBuffer request; |
| 396 request << Communication::PROC_ADD_FILTER << ToUtf8String(text); | 394 request << Communication::PROC_ADD_FILTER << ToUtf8String(text); |
| 397 CallEngine(request); | 395 CallEngine(request); |
| 398 } | 396 } |
| 399 | 397 |
| 400 void CAdblockPlusClient::RemoveFilter(const std::wstring& text) | 398 void CAdblockPlusClient::RemoveFilter(const std::wstring& text) |
| 401 { | 399 { |
| 402 Communication::OutputBuffer request; | 400 Communication::OutputBuffer request; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 424 request << Communication::PROC_SET_PREF << ToUtf8String(name) << value; | 422 request << Communication::PROC_SET_PREF << ToUtf8String(name) << value; |
| 425 CallEngine(request); | 423 CallEngine(request); |
| 426 } | 424 } |
| 427 | 425 |
| 428 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const wchar_t
* defaultValue) | 426 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const wchar_t
* defaultValue) |
| 429 { | 427 { |
| 430 return GetPref(name, std::wstring(defaultValue)); | 428 return GetPref(name, std::wstring(defaultValue)); |
| 431 } | 429 } |
| 432 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const std::ws
tring& defaultValue) | 430 std::wstring CAdblockPlusClient::GetPref(const std::wstring& name, const std::ws
tring& defaultValue) |
| 433 { | 431 { |
| 434 DEBUG_GENERAL(L"GetPref: " + name + L" start"); | 432 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); |
| 435 Communication::OutputBuffer request; | 433 Communication::OutputBuffer request; |
| 436 request << Communication::PROC_GET_PREF << ToUtf8String(name); | 434 request << Communication::PROC_GET_PREF << ToUtf8String(name); |
| 437 | 435 |
| 438 Communication::InputBuffer response; | 436 Communication::InputBuffer response; |
| 439 if (!CallEngine(request, response)) | 437 if (!CallEngine(request, response)) |
| 440 return defaultValue; | 438 return defaultValue; |
| 441 bool success; | 439 bool success; |
| 442 response >> success; | 440 response >> success; |
| 443 if (success) | 441 if (success) |
| 444 { | 442 { |
| 445 std::string value; | 443 std::string value; |
| 446 response >> value; | 444 response >> value; |
| 447 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 445 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 448 return ToUtf16String(value); | 446 return ToUtf16String(value); |
| 449 } | 447 } |
| 450 else | 448 else |
| 451 { | 449 { |
| 452 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 450 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 453 return defaultValue; | 451 return defaultValue; |
| 454 } | 452 } |
| 455 } | 453 } |
| 456 | 454 |
| 457 bool CAdblockPlusClient::GetPref(const std::wstring& name, bool defaultValue) | 455 bool CAdblockPlusClient::GetPref(const std::wstring& name, bool defaultValue) |
| 458 { | 456 { |
| 459 DEBUG_GENERAL(L"GetPref: " + name + L" start"); | 457 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); |
| 460 Communication::OutputBuffer request; | 458 Communication::OutputBuffer request; |
| 461 request << Communication::PROC_GET_PREF << ToUtf8String(name); | 459 request << Communication::PROC_GET_PREF << ToUtf8String(name); |
| 462 | 460 |
| 463 Communication::InputBuffer response; | 461 Communication::InputBuffer response; |
| 464 if (!CallEngine(request, response)) | 462 if (!CallEngine(request, response)) |
| 465 return defaultValue; | 463 return defaultValue; |
| 466 bool success; | 464 bool success; |
| 467 response >> success; | 465 response >> success; |
| 468 if (success) | 466 if (success) |
| 469 { | 467 { |
| 470 bool value; | 468 bool value; |
| 471 response >> value; | 469 response >> value; |
| 472 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 470 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 473 return value; | 471 return value; |
| 474 } | 472 } |
| 475 else | 473 else |
| 476 { | 474 { |
| 477 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 475 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 478 return defaultValue; | 476 return defaultValue; |
| 479 } | 477 } |
| 480 } | 478 } |
| 481 int64_t CAdblockPlusClient::GetPref(const std::wstring& name, int64_t defaultVal
ue) | 479 int64_t CAdblockPlusClient::GetPref(const std::wstring& name, int64_t defaultVal
ue) |
| 482 { | 480 { |
| 483 DEBUG_GENERAL(L"GetPref: " + name + L" start"); | 481 DEBUG_GENERAL((L"GetPref: " + name + L" start").c_str()); |
| 484 Communication::OutputBuffer request; | 482 Communication::OutputBuffer request; |
| 485 request << Communication::PROC_GET_PREF << ToUtf8String(name); | 483 request << Communication::PROC_GET_PREF << ToUtf8String(name); |
| 486 | 484 |
| 487 Communication::InputBuffer response; | 485 Communication::InputBuffer response; |
| 488 if (!CallEngine(request, response)) | 486 if (!CallEngine(request, response)) |
| 489 return defaultValue; | 487 return defaultValue; |
| 490 bool success; | 488 bool success; |
| 491 response >> success; | 489 response >> success; |
| 492 if (success) | 490 if (success) |
| 493 { | 491 { |
| 494 int64_t value; | 492 int64_t value; |
| 495 response >> value; | 493 response >> value; |
| 496 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 494 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 497 return value; | 495 return value; |
| 498 } | 496 } |
| 499 else | 497 else |
| 500 { | 498 { |
| 501 DEBUG_GENERAL(L"GetPref: " + name + L" end"); | 499 DEBUG_GENERAL((L"GetPref: " + name + L" end").c_str()); |
| 502 return defaultValue; | 500 return defaultValue; |
| 503 } | 501 } |
| 504 } | 502 } |
| 505 | 503 |
| 506 void CAdblockPlusClient::CheckForUpdates(HWND callbackWindow) | 504 void CAdblockPlusClient::CheckForUpdates(HWND callbackWindow) |
| 507 { | 505 { |
| 508 Communication::OutputBuffer request; | 506 Communication::OutputBuffer request; |
| 509 request << Communication::PROC_CHECK_FOR_UPDATES << reinterpret_cast<int32_t>(
callbackWindow); | 507 request << Communication::PROC_CHECK_FOR_UPDATES << reinterpret_cast<int32_t>(
callbackWindow); |
| 510 CallEngine(request); | 508 CallEngine(request); |
| 511 } | 509 } |
| 512 | 510 |
| 513 std::wstring CAdblockPlusClient::GetDocumentationLink() | 511 std::wstring CAdblockPlusClient::GetDocumentationLink() |
| 514 { | 512 { |
| 515 DEBUG_GENERAL(L"GetDocumentationLink"); | 513 DEBUG_GENERAL("GetDocumentationLink"); |
| 516 Communication::InputBuffer response; | 514 Communication::InputBuffer response; |
| 517 if (!CallEngine(Communication::PROC_GET_DOCUMENTATION_LINK, response)) | 515 if (!CallEngine(Communication::PROC_GET_DOCUMENTATION_LINK, response)) |
| 518 return L""; | 516 return L""; |
| 519 std::wstring docLink; | 517 std::wstring docLink; |
| 520 response >> docLink; | 518 response >> docLink; |
| 521 return docLink; | 519 return docLink; |
| 522 } | 520 } |
| 523 | 521 |
| 524 bool CAdblockPlusClient::TogglePluginEnabled() | 522 bool CAdblockPlusClient::TogglePluginEnabled() |
| 525 { | 523 { |
| 526 DEBUG_GENERAL(L"TogglePluginEnabled"); | 524 DEBUG_GENERAL("TogglePluginEnabled"); |
| 527 Communication::InputBuffer response; | 525 Communication::InputBuffer response; |
| 528 if (!CallEngine(Communication::PROC_TOGGLE_PLUGIN_ENABLED, response)) | 526 if (!CallEngine(Communication::PROC_TOGGLE_PLUGIN_ENABLED, response)) |
| 529 return false; | 527 return false; |
| 530 bool currentEnabledState; | 528 bool currentEnabledState; |
| 531 response >> currentEnabledState; | 529 response >> currentEnabledState; |
| 532 return currentEnabledState; | 530 return currentEnabledState; |
| 533 } | 531 } |
| 532 |
| 534 std::wstring CAdblockPlusClient::GetHostFromUrl(const std::wstring& url) | 533 std::wstring CAdblockPlusClient::GetHostFromUrl(const std::wstring& url) |
| 535 { | 534 { |
| 536 DEBUG_GENERAL(L"GetHostFromUrl"); | 535 DEBUG_GENERAL("GetHostFromUrl"); |
| 537 Communication::OutputBuffer request; | 536 Communication::OutputBuffer request; |
| 538 request << Communication::PROC_GET_HOST << ToUtf8String(url); | 537 request << Communication::PROC_GET_HOST << ToUtf8String(url); |
| 539 | 538 |
| 540 Communication::InputBuffer response; | 539 Communication::InputBuffer response; |
| 541 if (!CallEngine(request, response)) | 540 if (!CallEngine(request, response)) |
| 542 return L""; | 541 return L""; |
| 543 std::string host; | 542 std::string host; |
| 544 response >> host; | 543 response >> host; |
| 545 return ToUtf16String(host); | 544 return ToUtf16String(host); |
| 546 } | 545 } |
| 546 |
| 547 int CAdblockPlusClient::CompareVersions(const std::wstring& v1, const std::wstri
ng& v2) |
| 548 { |
| 549 DEBUG_GENERAL("CompareVersions"); |
| 550 Communication::OutputBuffer request; |
| 551 request << Communication::PROC_COMPARE_VERSIONS << ToUtf8String(v1) << ToUtf8S
tring(v2); |
| 552 Communication::InputBuffer response; |
| 553 if (!CallEngine(request, response)) |
| 554 return 0; |
| 555 int result; |
| 556 response >> result; |
| 557 return result; |
| 558 } |
| LEFT | RIGHT |