LEFT | RIGHT |
1 #include <AdblockPlus.h> | 1 #include <AdblockPlus.h> |
2 #include <functional> | 2 #include <functional> |
3 #include <vector> | 3 #include <vector> |
4 #include <thread> | 4 #include <thread> |
5 #include <Windows.h> | 5 #include <Windows.h> |
6 | 6 |
7 #include "../shared/AutoHandle.h" | 7 #include "../shared/AutoHandle.h" |
8 #include "../shared/Communication.h" | 8 #include "../shared/Communication.h" |
9 #include "../shared/Dictionary.h" | 9 #include "../shared/Dictionary.h" |
10 #include "../shared/Utils.h" | 10 #include "../shared/Utils.h" |
11 #include "../shared/Version.h" | 11 #include "../shared/Version.h" |
12 #include "../shared/CriticalSection.h" | 12 #include "../shared/CriticalSection.h" |
| 13 #include "../shared/IE_version.h" |
| 14 #include "AdblockPlus.h" |
13 #include "Debug.h" | 15 #include "Debug.h" |
14 #include "Updater.h" | 16 #include "Updater.h" |
15 | 17 |
16 namespace | 18 namespace |
17 { | 19 { |
18 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; | 20 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; |
19 std::auto_ptr<Updater> updater; | 21 std::auto_ptr<Updater> updater; |
20 int activeConnections = 0; | 22 int activeConnections = 0; |
21 CriticalSection activeConnectionsLock; | 23 CriticalSection activeConnectionsLock; |
22 HWND callbackWindow; | 24 HWND callbackWindow; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 checkingForUpdate = false; | 70 checkingForUpdate = false; |
69 callbackWindow = 0; | 71 callbackWindow = 0; |
70 } | 72 } |
71 return; | 73 return; |
72 } | 74 } |
73 | 75 |
74 | 76 |
75 CriticalSection firstRunLock; | 77 CriticalSection firstRunLock; |
76 CriticalSection updateCheckLock; | 78 CriticalSection updateCheckLock; |
77 bool firstRunActionExecuted = false; | 79 bool firstRunActionExecuted = false; |
| 80 AdblockPlus::ReferrerMapping referrerMapping; |
78 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) | 81 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) |
79 { | 82 { |
80 Communication::OutputBuffer response; | 83 Communication::OutputBuffer response; |
81 | 84 |
82 Communication::ProcType procedure; | 85 Communication::ProcType procedure; |
83 request >> procedure; | 86 request >> procedure; |
84 switch (procedure) | 87 switch (procedure) |
85 { | 88 { |
86 case Communication::PROC_MATCHES: | 89 case Communication::PROC_MATCHES: |
87 { | 90 { |
88 std::string url; | 91 std::string url; |
89 std::string type; | 92 std::string type; |
90 std::string documentUrl; | 93 std::string documentUrl; |
91 request >> url >> type >> documentUrl; | 94 request >> url >> type >> documentUrl; |
92 AdblockPlus::FilterPtr filter = filterEngine->Matches(url, type, documen
tUrl); | 95 referrerMapping.Add(url, documentUrl); |
| 96 AdblockPlus::FilterPtr filter = filterEngine->Matches(url, type, referre
rMapping.BuildReferrerChain(documentUrl)); |
93 response << (filter && filter->GetType() != AdblockPlus::Filter::TYPE_EX
CEPTION); | 97 response << (filter && filter->GetType() != AdblockPlus::Filter::TYPE_EX
CEPTION); |
94 break; | 98 break; |
95 } | 99 } |
96 case Communication::PROC_GET_ELEMHIDE_SELECTORS: | 100 case Communication::PROC_GET_ELEMHIDE_SELECTORS: |
97 { | 101 { |
98 std::string domain; | 102 std::string domain; |
99 request >> domain; | 103 request >> domain; |
100 WriteStrings(response, filterEngine->GetElementHidingSelectors(domain)); | 104 WriteStrings(response, filterEngine->GetElementHidingSelectors(domain)); |
101 break; | 105 break; |
102 } | 106 } |
103 case Communication::PROC_AVAILABLE_SUBSCRIPTIONS: | 107 case Communication::PROC_AVAILABLE_SUBSCRIPTIONS: |
104 { | 108 { |
105 WriteSubscriptions(response, filterEngine->FetchAvailableSubscriptions()
); | 109 WriteSubscriptions(response, filterEngine->FetchAvailableSubscriptions()
); |
106 break; | 110 break; |
107 } | 111 } |
108 case Communication::PROC_LISTED_SUBSCRIPTIONS: | 112 case Communication::PROC_LISTED_SUBSCRIPTIONS: |
109 { | 113 { |
110 WriteSubscriptions(response, filterEngine->GetListedSubscriptions()); | 114 WriteSubscriptions(response, filterEngine->GetListedSubscriptions()); |
111 break; | 115 break; |
112 } | 116 } |
113 case Communication::PROC_SET_SUBSCRIPTION: | 117 case Communication::PROC_SET_SUBSCRIPTION: |
114 { | 118 { |
115 std::string url; | 119 std::string url; |
116 request >> url; | 120 request >> url; |
117 | 121 |
| 122 AdblockPlus::JsValuePtr valuePtr = filterEngine->GetPref("subscriptions_
exceptionsurl"); |
| 123 std::string aaUrl = ""; |
| 124 if (!valuePtr->IsNull()) |
| 125 { |
| 126 aaUrl = valuePtr->AsString(); |
| 127 } |
118 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = filterEngine->
GetListedSubscriptions(); | 128 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = filterEngine->
GetListedSubscriptions(); |
| 129 |
| 130 // Remove all subscriptions, besides the Acceptable Ads |
119 for (size_t i = 0, count = subscriptions.size(); i < count; i++) | 131 for (size_t i = 0, count = subscriptions.size(); i < count; i++) |
120 subscriptions[i]->RemoveFromList(); | 132 { |
| 133 if (subscriptions[i]->GetProperty("url")->AsString() != aaUrl) |
| 134 { |
| 135 subscriptions[i]->RemoveFromList(); |
| 136 } |
| 137 } |
121 | 138 |
122 filterEngine->GetSubscription(url)->AddToList(); | 139 filterEngine->GetSubscription(url)->AddToList(); |
| 140 break; |
| 141 } |
| 142 case Communication::PROC_ADD_SUBSCRIPTION: |
| 143 { |
| 144 std::string url; |
| 145 request >> url; |
| 146 |
| 147 filterEngine->GetSubscription(url)->AddToList(); |
| 148 break; |
| 149 } |
| 150 case Communication::PROC_REMOVE_SUBSCRIPTION: |
| 151 { |
| 152 std::string url; |
| 153 request >> url; |
| 154 |
| 155 filterEngine->GetSubscription(url)->RemoveFromList(); |
123 break; | 156 break; |
124 } | 157 } |
125 case Communication::PROC_UPDATE_ALL_SUBSCRIPTIONS: | 158 case Communication::PROC_UPDATE_ALL_SUBSCRIPTIONS: |
126 { | 159 { |
127 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = filterEngine->
GetListedSubscriptions(); | 160 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = filterEngine->
GetListedSubscriptions(); |
128 for (size_t i = 0, count = subscriptions.size(); i < count; i++) | 161 for (size_t i = 0, count = subscriptions.size(); i < count; i++) |
129 subscriptions[i]->UpdateFilters(); | 162 subscriptions[i]->UpdateFilters(); |
130 break; | 163 break; |
131 } | 164 } |
132 case Communication::PROC_GET_EXCEPTION_DOMAINS: | 165 case Communication::PROC_GET_EXCEPTION_DOMAINS: |
(...skipping 24 matching lines...) Expand all Loading... |
157 break; | 190 break; |
158 } | 191 } |
159 case Communication::PROC_IS_WHITELISTED_URL: | 192 case Communication::PROC_IS_WHITELISTED_URL: |
160 { | 193 { |
161 std::string url; | 194 std::string url; |
162 request >> url; | 195 request >> url; |
163 AdblockPlus::FilterPtr match = filterEngine->Matches(url, "DOCUMENT", ur
l); | 196 AdblockPlus::FilterPtr match = filterEngine->Matches(url, "DOCUMENT", ur
l); |
164 response << (match && match->GetType() == AdblockPlus::Filter::TYPE_EXCE
PTION); | 197 response << (match && match->GetType() == AdblockPlus::Filter::TYPE_EXCE
PTION); |
165 break; | 198 break; |
166 } | 199 } |
| 200 case Communication::PROC_IS_ELEMHIDE_WHITELISTED_ON_URL: |
| 201 { |
| 202 std::string url; |
| 203 request >> url; |
| 204 AdblockPlus::FilterPtr match = filterEngine->Matches(url, "ELEMHIDE", ur
l); |
| 205 response << (match && match->GetType() == AdblockPlus::Filter::TYPE_EXCE
PTION); |
| 206 break; |
| 207 } |
167 case Communication::PROC_ADD_FILTER: | 208 case Communication::PROC_ADD_FILTER: |
168 { | 209 { |
169 std::string text; | 210 std::string text; |
170 request >> text; | 211 request >> text; |
171 | 212 |
172 filterEngine->GetFilter(text)->AddToList(); | 213 filterEngine->GetFilter(text)->AddToList(); |
173 break; | 214 break; |
174 } | 215 } |
175 case Communication::PROC_REMOVE_FILTER: | 216 case Communication::PROC_REMOVE_FILTER: |
176 { | 217 { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 CriticalSection::Lock lock(firstRunLock); | 306 CriticalSection::Lock lock(firstRunLock); |
266 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) | 307 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) |
267 { | 308 { |
268 response << true; | 309 response << true; |
269 firstRunActionExecuted = true; | 310 firstRunActionExecuted = true; |
270 } | 311 } |
271 else | 312 else |
272 { | 313 { |
273 response << false; | 314 response << false; |
274 } | 315 } |
| 316 break; |
| 317 } |
| 318 case Communication::PROC_COMPARE_VERSIONS: |
| 319 { |
| 320 std::string v1, v2; |
| 321 request >> v1 >> v2; |
| 322 |
| 323 response << filterEngine->CompareVersions(v1, v2); |
275 break; | 324 break; |
276 } | 325 } |
277 case Communication::PROC_GET_DOCUMENTATION_LINK: | 326 case Communication::PROC_GET_DOCUMENTATION_LINK: |
278 { | 327 { |
279 response << ToUtf16String(filterEngine->GetPref("documentation_link")->A
sString()); | 328 response << ToUtf16String(filterEngine->GetPref("documentation_link")->A
sString()); |
280 break; | 329 break; |
281 } | 330 } |
282 case Communication::PROC_TOGGLE_PLUGIN_ENABLED: | 331 case Communication::PROC_TOGGLE_PLUGIN_ENABLED: |
283 { | 332 { |
284 filterEngine->SetPref("enabled", filterEngine->GetJsEngine()->NewValue(!
filterEngine->GetPref("enabled")->AsBool())); | 333 filterEngine->SetPref("enabled", filterEngine->GetJsEngine()->NewValue(!
filterEngine->GetPref("enabled")->AsBool())); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine(const std::wstring&
locale) | 416 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine(const std::wstring&
locale) |
368 { | 417 { |
369 AdblockPlus::AppInfo appInfo; | 418 AdblockPlus::AppInfo appInfo; |
370 appInfo.version = ToUtf8String(IEPLUGIN_VERSION); | 419 appInfo.version = ToUtf8String(IEPLUGIN_VERSION); |
371 appInfo.name = "adblockplusie"; | 420 appInfo.name = "adblockplusie"; |
372 #ifdef _WIN64 | 421 #ifdef _WIN64 |
373 appInfo.application = "msie64"; | 422 appInfo.application = "msie64"; |
374 #else | 423 #else |
375 appInfo.application = "msie32"; | 424 appInfo.application = "msie32"; |
376 #endif | 425 #endif |
377 appInfo.applicationVersion = ToUtf8String( ABP::IE::installed_version_string()
); | 426 appInfo.applicationVersion = ToUtf8String(AdblockPlus::IE::InstalledVersionStr
ing()); |
378 appInfo.locale = ToUtf8String(locale); | 427 appInfo.locale = ToUtf8String(locale); |
379 #ifdef ADBLOCK_PLUS_TEST_MODE | 428 #ifdef ADBLOCK_PLUS_TEST_MODE |
380 appInfo.developmentBuild = true; | 429 appInfo.developmentBuild = true; |
381 #else | 430 #else |
382 appInfo.developmentBuild = false; | 431 appInfo.developmentBuild = false; |
383 #endif | 432 #endif |
384 | 433 |
385 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); | 434 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); |
386 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable); | 435 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable); |
387 | 436 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 } | 485 } |
437 catch (const std::runtime_error& e) | 486 catch (const std::runtime_error& e) |
438 { | 487 { |
439 DebugException(e); | 488 DebugException(e); |
440 return 1; | 489 return 1; |
441 } | 490 } |
442 } | 491 } |
443 | 492 |
444 return 0; | 493 return 0; |
445 } | 494 } |
LEFT | RIGHT |