2323#include < thread>
2424
2525#include < AdblockPlus.h>
26- #include " Utils.h"
2726#include " JsContext.h"
2827#include " Thread.h"
2928#include < mutex>
3029#include < condition_variable>
3130
3231using namespace AdblockPlus ;
3332
34- namespace {
35- static std::string filterEngineJsFiles[] = {
33+ namespace
34+ {
35+ const std::string filterEngineJsFiles[] =
36+ {
3637 " compat.js" ,
3738 " info.js" ,
3839 " io.js" ,
@@ -221,7 +222,7 @@ FilterEngine::FilterEngine(const JsEnginePtr& jsEngine)
221222}
222223
223224void FilterEngine::CreateAsync (const JsEnginePtr& jsEngine,
224- const JsEngine:: EvaluateCallback& evaluateCallback,
225+ const EvaluateCallback& evaluateCallback,
225226 const FilterEngine::OnCreatedCallback& onCreated,
226227 const FilterEngine::CreationParameters& params)
227228{
@@ -262,7 +263,7 @@ void FilterEngine::CreateAsync(const JsEnginePtr& jsEngine,
262263 isSubscriptionDownloadAllowedCallback (params[0 ].IsString () ? &allowedConnectionType : nullptr , callJsCallback);
263264 });
264265 }
265-
266+
266267 jsEngine->SetEventCallback (" _init" , [jsEngine, filterEngine, onCreated](JsValueList&& params)
267268 {
268269 filterEngine->firstRun = params.size () && params[0 ].AsBool ();
@@ -280,15 +281,20 @@ void FilterEngine::CreateAsync(const JsEnginePtr& jsEngine,
280281 filterEngine->GetJsEngine ().NotifyLowMemory ();
281282 });
282283
284+ // Lock the JS engine while we are loading scripts, no timeouts should fire
285+ // until we are done.
286+ const JsContext context (*jsEngine);
283287 // Set the preconfigured prefs
284288 auto preconfiguredPrefsObject = jsEngine->NewObject ();
285289 for (const auto & pref : params.preconfiguredPrefs )
290+ {
286291 preconfiguredPrefsObject.SetProperty (pref.first , pref.second );
292+ }
287293 jsEngine->SetGlobalProperty (" _preconfiguredPrefs" , preconfiguredPrefsObject);
288294
289295 // Load adblockplus scripts
290- for ( size_t i = 0 ; i < ArraySize ( filterEngineJsFiles); ++i )
291- evaluateCallback (filterEngineJsFiles[i] );
296+ for ( const auto & filterEngineJsFile: filterEngineJsFiles)
297+ evaluateCallback (filterEngineJsFile );
292298
293299}
294300
0 commit comments