| 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 namespace | 13 namespace |
| 14 { | 14 { |
| 15 void SpawnAdblockPlusEngine() | 15 void SpawnAdblockPlusEngine() |
| 16 { | 16 { |
| 17 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; | 17 std::wstring engineExecutablePath = GetDllDir() + L"AdblockPlusEngine.exe"; |
| 18 CString params = L"AdblockPlusEngine.exe " + CPluginSystem::GetInstance()->G
etBrowserLanguage(); | 18 CString params = to_CString(L"AdblockPlusEngine.exe " + GetBrowserLanguage()
); |
| 19 | 19 |
| 20 STARTUPINFO startupInfo = {}; | 20 STARTUPINFO startupInfo = {}; |
| 21 PROCESS_INFORMATION processInformation = {}; | 21 PROCESS_INFORMATION processInformation = {}; |
| 22 | 22 |
| 23 HANDLE token; | 23 HANDLE token; |
| 24 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); |
| 25 | 25 |
| 26 TOKEN_APPCONTAINER_INFORMATION *acs = NULL; | 26 TOKEN_APPCONTAINER_INFORMATION *acs = NULL; |
| 27 DWORD length = 0; | 27 DWORD length = 0; |
| 28 | 28 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 57 | 57 |
| 58 PSID integritySid = 0; | 58 PSID integritySid = 0; |
| 59 ConvertStringSidToSid(L"S-1-16-4096", &integritySid); | 59 ConvertStringSidToSid(L"S-1-16-4096", &integritySid); |
| 60 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 |
| 61 | 61 |
| 62 TOKEN_MANDATORY_LABEL tml = {}; | 62 TOKEN_MANDATORY_LABEL tml = {}; |
| 63 tml.Label.Attributes = SE_GROUP_INTEGRITY; | 63 tml.Label.Attributes = SE_GROUP_INTEGRITY; |
| 64 tml.Label.Sid = integritySid; | 64 tml.Label.Sid = integritySid; |
| 65 | 65 |
| 66 // Set the process integrity level | 66 // Set the process integrity level |
| 67 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(TOKEN_MAND
ATORY_LABEL) + GetLengthSid(integritySid)); | 67 SetTokenInformation(newToken, TokenIntegrityLevel, &tml, sizeof(tml)); |
| 68 | 68 |
| 69 STARTUPINFO startupInfo = {}; | 69 STARTUPINFO startupInfo = {}; |
| 70 PROCESS_INFORMATION processInformation = {}; | 70 PROCESS_INFORMATION processInformation = {}; |
| 71 | 71 |
| 72 createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(
), params.GetBuffer(params.GetLength() + 1), | 72 createProcRes = CreateProcessAsUserW(newToken, engineExecutablePath.c_str(
), params.GetBuffer(params.GetLength() + 1), |
| 73 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); | 73 0, 0, false, 0, 0, 0, (STARTUPINFOW*)&startupInfo,
&processInformation); |
| 74 } | 74 } |
| 75 | 75 |
| 76 if (!createProcRes) | 76 if (!createProcRes) |
| 77 { | 77 { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 s_instance = client; | 201 s_instance = client; |
| 202 } | 202 } |
| 203 | 203 |
| 204 instance = s_instance; | 204 instance = s_instance; |
| 205 } | 205 } |
| 206 s_criticalSectionLocal.Unlock(); | 206 s_criticalSectionLocal.Unlock(); |
| 207 | 207 |
| 208 return instance; | 208 return instance; |
| 209 } | 209 } |
| 210 | 210 |
| 211 | 211 bool CAdblockPlusClient::ShouldBlock(const std::wstring& src, int contentType, c
onst std::wstring& domain, bool addDebug) |
| 212 bool CAdblockPlusClient::ShouldBlock(CString src, int contentType, const CString
& domain, bool addDebug) | |
| 213 { | 212 { |
| 214 bool isBlocked = false; | 213 bool isBlocked = false; |
| 215 | |
| 216 bool isCached = false; | 214 bool isCached = false; |
| 217 | |
| 218 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
| 219 | |
| 220 m_criticalSectionCache.Lock(); | 215 m_criticalSectionCache.Lock(); |
| 221 { | 216 { |
| 222 std::map<CString,bool>::iterator it = m_cacheBlockedSources.find(src); | 217 auto it = m_cacheBlockedSources.find(src); |
| 223 | 218 |
| 224 isCached = it != m_cacheBlockedSources.end(); | 219 isCached = it != m_cacheBlockedSources.end(); |
| 225 if (isCached) | 220 if (isCached) |
| 226 { | 221 { |
| 227 isBlocked = it->second; | 222 isBlocked = it->second; |
| 228 } | 223 } |
| 229 } | 224 } |
| 230 m_criticalSectionCache.Unlock(); | 225 m_criticalSectionCache.Unlock(); |
| 231 | 226 |
| 232 if (!isCached) | 227 if (!isCached) |
| 233 { | 228 { |
| 234 m_criticalSectionFilter.Lock(); | 229 m_criticalSectionFilter.Lock(); |
| 235 { | 230 { |
| 236 isBlocked = m_filter->ShouldBlock(src, contentType, domain, addDebug); | 231 isBlocked = m_filter->ShouldBlock(src, contentType, domain, addDebug); |
| 237 } | 232 } |
| 238 m_criticalSectionFilter.Unlock(); | 233 m_criticalSectionFilter.Unlock(); |
| 239 | |
| 240 | 234 |
| 241 // Cache result, if content type is defined | 235 // Cache result, if content type is defined |
| 242 if (contentType != CFilter::contentTypeAny) | 236 if (contentType != CFilter::contentTypeAny) |
| 243 { | 237 { |
| 244 m_criticalSectionCache.Lock(); | 238 m_criticalSectionCache.Lock(); |
| 245 { | 239 { |
| 246 m_cacheBlockedSources[src] = isBlocked; | 240 m_cacheBlockedSources[src] = isBlocked; |
| 247 } | 241 } |
| 248 m_criticalSectionCache.Unlock(); | 242 m_criticalSectionCache.Unlock(); |
| 249 } | 243 } |
| 250 } | 244 } |
| 251 | |
| 252 | |
| 253 return isBlocked; | 245 return isBlocked; |
| 254 } | 246 } |
| 255 | 247 |
| 256 bool CAdblockPlusClient::IsElementHidden(const CString& tag, IHTMLElement* pEl,
const CString& domain, const CString& indent, CPluginFilter* filter) | 248 bool CAdblockPlusClient::IsElementHidden(const std::wstring& tag, IHTMLElement*
pEl, const std::wstring& domain, const std::wstring& indent, CPluginFilter* filt
er) |
| 257 { | 249 { |
| 258 bool isHidden; | 250 bool isHidden; |
| 259 m_criticalSectionFilter.Lock(); | 251 m_criticalSectionFilter.Lock(); |
| 260 { | 252 { |
| 261 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent); | 253 isHidden = filter && filter->IsElementHidden(tag, pEl, domain, indent); |
| 262 } | 254 } |
| 263 m_criticalSectionFilter.Unlock(); | 255 m_criticalSectionFilter.Unlock(); |
| 264 return isHidden; | 256 return isHidden; |
| 265 } | 257 } |
| 266 | 258 |
| 267 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url) | 259 bool CAdblockPlusClient::IsWhitelistedUrl(const std::wstring& url) |
| 268 { | 260 { |
| 269 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" start").c_str()); | 261 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" start").c_str()); |
| 270 Communication::OutputBuffer request; | 262 Communication::OutputBuffer request; |
| 271 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url); | 263 request << Communication::PROC_IS_WHITELISTED_URL << ToUtf8String(url); |
| 272 | 264 |
| 273 Communication::InputBuffer response; | 265 Communication::InputBuffer response; |
| 274 if (!CallEngine(request, response)) | 266 if (!CallEngine(request, response)) |
| 275 return false; | 267 return false; |
| 276 | 268 |
| 277 bool isWhitelisted; | 269 bool isWhitelisted; |
| 278 response >> isWhitelisted; | 270 response >> isWhitelisted; |
| 279 | 271 |
| 280 DEBUG_GENERAL((L"IsWhitelistedUrl: " + url + L" end").c_str()); | 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; |
| 281 return isWhitelisted; | 287 return isWhitelisted; |
| 282 } | 288 } |
| 283 | 289 |
| 284 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) |
| 285 { | 291 { |
| 286 Communication::OutputBuffer request; | 292 Communication::OutputBuffer request; |
| 287 request << Communication::PROC_MATCHES << ToUtf8String(url) << ToUtf8String(co
ntentType) << ToUtf8String(domain); | 293 request << Communication::PROC_MATCHES << ToUtf8String(url) << ToUtf8String(co
ntentType) << ToUtf8String(domain); |
| 288 | 294 |
| 289 Communication::InputBuffer response; | 295 Communication::InputBuffer response; |
| 290 if (!CallEngine(request, response)) | 296 if (!CallEngine(request, response)) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 380 |
| 375 bool CAdblockPlusClient::IsFirstRun() | 381 bool CAdblockPlusClient::IsFirstRun() |
| 376 { | 382 { |
| 377 DEBUG_GENERAL("IsFirstRun"); | 383 DEBUG_GENERAL("IsFirstRun"); |
| 378 Communication::InputBuffer response; | 384 Communication::InputBuffer response; |
| 379 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; |
| 380 bool res; | 386 bool res; |
| 381 response >> res; | 387 response >> res; |
| 382 return res; | 388 return res; |
| 383 } | 389 } |
| 390 |
| 384 void CAdblockPlusClient::AddFilter(const std::wstring& text) | 391 void CAdblockPlusClient::AddFilter(const std::wstring& text) |
| 385 { | 392 { |
| 386 Communication::OutputBuffer request; | 393 Communication::OutputBuffer request; |
| 387 request << Communication::PROC_ADD_FILTER << ToUtf8String(text); | 394 request << Communication::PROC_ADD_FILTER << ToUtf8String(text); |
| 388 CallEngine(request); | 395 CallEngine(request); |
| 389 } | 396 } |
| 390 | 397 |
| 391 void CAdblockPlusClient::RemoveFilter(const std::wstring& text) | 398 void CAdblockPlusClient::RemoveFilter(const std::wstring& text) |
| 392 { | 399 { |
| 393 Communication::OutputBuffer request; | 400 Communication::OutputBuffer request; |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 Communication::OutputBuffer request; | 536 Communication::OutputBuffer request; |
| 530 request << Communication::PROC_GET_HOST << ToUtf8String(url); | 537 request << Communication::PROC_GET_HOST << ToUtf8String(url); |
| 531 | 538 |
| 532 Communication::InputBuffer response; | 539 Communication::InputBuffer response; |
| 533 if (!CallEngine(request, response)) | 540 if (!CallEngine(request, response)) |
| 534 return L""; | 541 return L""; |
| 535 std::string host; | 542 std::string host; |
| 536 response >> host; | 543 response >> host; |
| 537 return ToUtf16String(host); | 544 return ToUtf16String(host); |
| 538 } | 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 |