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 |