OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 FilterEnginePtr filterEngine(new FilterEngine(jsEngine)); | 192 FilterEnginePtr filterEngine(new FilterEngine(jsEngine)); |
193 { | 193 { |
194 // TODO: replace weakFilterEngine by this when it's possible to control the | 194 // TODO: replace weakFilterEngine by this when it's possible to control the |
195 // execution time of the asynchronous part below. | 195 // execution time of the asynchronous part below. |
196 std::weak_ptr<FilterEngine> weakFilterEngine = filterEngine; | 196 std::weak_ptr<FilterEngine> weakFilterEngine = filterEngine; |
197 auto isSubscriptionDownloadAllowedCallback = params.isSubscriptionDownloadAl
lowedCallback; | 197 auto isSubscriptionDownloadAllowedCallback = params.isSubscriptionDownloadAl
lowedCallback; |
198 jsEngine->SetEventCallback("_isSubscriptionDownloadAllowed", [weakFilterEngi
ne, isSubscriptionDownloadAllowedCallback](JsValueList&& params){ | 198 jsEngine->SetEventCallback("_isSubscriptionDownloadAllowed", [weakFilterEngi
ne, isSubscriptionDownloadAllowedCallback](JsValueList&& params){ |
199 auto filterEngine = weakFilterEngine.lock(); | 199 auto filterEngine = weakFilterEngine.lock(); |
200 if (!filterEngine) | 200 if (!filterEngine) |
201 return; | 201 return; |
202 auto jsEngine = filterEngine->GetJsEngine(); | 202 auto& jsEngine = filterEngine->GetJsEngine(); |
203 | 203 |
204 // param[0] - nullable string Prefs.allowed_connection_type | 204 // param[0] - nullable string Prefs.allowed_connection_type |
205 // param[1] - function(Boolean) | 205 // param[1] - function(Boolean) |
206 bool areArgumentsValid = params.size() == 2 && (params[0].IsNull() || para
ms[0].IsString()) && params[1].IsFunction(); | 206 bool areArgumentsValid = params.size() == 2 && (params[0].IsNull() || para
ms[0].IsString()) && params[1].IsFunction(); |
207 assert(areArgumentsValid && "Invalid argument: there should be two args an
d the second one should be a function"); | 207 assert(areArgumentsValid && "Invalid argument: there should be two args an
d the second one should be a function"); |
208 if (!areArgumentsValid) | 208 if (!areArgumentsValid) |
209 return; | 209 return; |
210 if (!isSubscriptionDownloadAllowedCallback) | 210 if (!isSubscriptionDownloadAllowedCallback) |
211 { | 211 { |
212 params[1].Call(jsEngine->NewValue(true)); | 212 params[1].Call(jsEngine.NewValue(true)); |
213 return; | 213 return; |
214 } | 214 } |
215 auto valuesID = jsEngine->StoreJsValues(params); | 215 auto valuesID = jsEngine.StoreJsValues(params); |
216 auto callJsCallback = [weakFilterEngine, valuesID](bool isAllowed) | 216 auto callJsCallback = [weakFilterEngine, valuesID](bool isAllowed) |
217 { | 217 { |
218 auto filterEngine = weakFilterEngine.lock(); | 218 auto filterEngine = weakFilterEngine.lock(); |
219 if (!filterEngine) | 219 if (!filterEngine) |
220 return; | 220 return; |
221 auto jsEngine = filterEngine->GetJsEngine(); | 221 auto& jsEngine = filterEngine->GetJsEngine(); |
222 auto jsParams = jsEngine->TakeJsValues(valuesID); | 222 auto jsParams = jsEngine.TakeJsValues(valuesID); |
223 jsParams[1].Call(jsEngine->NewValue(isAllowed)); | 223 jsParams[1].Call(jsEngine.NewValue(isAllowed)); |
224 }; | 224 }; |
225 std::string allowedConnectionType = params[0].IsString() ? params[0].AsStr
ing() : std::string(); | 225 std::string allowedConnectionType = params[0].IsString() ? params[0].AsStr
ing() : std::string(); |
226 isSubscriptionDownloadAllowedCallback(params[0].IsString() ? &allowedConne
ctionType : nullptr, callJsCallback); | 226 isSubscriptionDownloadAllowedCallback(params[0].IsString() ? &allowedConne
ctionType : nullptr, callJsCallback); |
227 }); | 227 }); |
228 } | 228 } |
229 | 229 |
230 jsEngine->SetEventCallback("_init", [jsEngine, filterEngine, onCreated](JsValu
eList&& params) | 230 jsEngine->SetEventCallback("_init", [jsEngine, filterEngine, onCreated](JsValu
eList&& params) |
231 { | 231 { |
232 filterEngine->firstRun = params.size() && params[0].AsBool(); | 232 filterEngine->firstRun = params.size() && params[0].AsBool(); |
233 onCreated(filterEngine); | 233 onCreated(filterEngine); |
234 jsEngine->RemoveEventCallback("_init"); | 234 jsEngine->RemoveEventCallback("_init"); |
235 }); | 235 }); |
236 | 236 |
237 std::weak_ptr<FilterEngine> weakFilterEngine = filterEngine; | 237 std::weak_ptr<FilterEngine> weakFilterEngine = filterEngine; |
238 filterEngine->SetFilterChangeCallback([weakFilterEngine](const std::string& re
ason, JsValue&&) | 238 filterEngine->SetFilterChangeCallback([weakFilterEngine](const std::string& re
ason, JsValue&&) |
239 { | 239 { |
240 auto filterEngine = weakFilterEngine.lock(); | 240 auto filterEngine = weakFilterEngine.lock(); |
241 if (!filterEngine) | 241 if (!filterEngine) |
242 return; | 242 return; |
243 if (reason == "save") | 243 if (reason == "save") |
244 filterEngine->GetJsEngine()->NotifyLowMemory(); | 244 filterEngine->GetJsEngine().NotifyLowMemory(); |
245 }); | 245 }); |
246 | 246 |
247 // Lock the JS engine while we are loading scripts, no timeouts should fire | 247 // Lock the JS engine while we are loading scripts, no timeouts should fire |
248 // until we are done. | 248 // until we are done. |
249 const JsContext context(*jsEngine); | 249 const JsContext context(*jsEngine); |
250 // Set the preconfigured prefs | 250 // Set the preconfigured prefs |
251 auto preconfiguredPrefsObject = jsEngine->NewObject(); | 251 auto preconfiguredPrefsObject = jsEngine->NewObject(); |
252 for (const auto& pref : params.preconfiguredPrefs) | 252 for (const auto& pref : params.preconfiguredPrefs) |
253 { | 253 { |
254 preconfiguredPrefsObject.SetProperty(pref.first, pref.second); | 254 preconfiguredPrefsObject.SetProperty(pref.first, pref.second); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 FilterPtr filter = GetWhitelistingFilter(currentUrl, contentTypeMask, parent
Url); | 591 FilterPtr filter = GetWhitelistingFilter(currentUrl, contentTypeMask, parent
Url); |
592 if (filter) | 592 if (filter) |
593 { | 593 { |
594 return filter; | 594 return filter; |
595 } | 595 } |
596 currentUrl = parentUrl; | 596 currentUrl = parentUrl; |
597 } | 597 } |
598 while (urlIterator != documentUrls.end()); | 598 while (urlIterator != documentUrls.end()); |
599 return FilterPtr(); | 599 return FilterPtr(); |
600 } | 600 } |
OLD | NEW |