| Index: include/AdblockPlus/JsEngine.h | 
| diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h | 
| index f7470ab84367b00e298c9038d92b21837fb08202..c3c2b6724dcf3a1dabd51ccb7888c7239f80afe6 100644 | 
| --- a/include/AdblockPlus/JsEngine.h | 
| +++ b/include/AdblockPlus/JsEngine.h | 
| @@ -1,6 +1,6 @@ | 
| /* | 
| * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| - * Copyright (C) 2006-2017 eyeo GmbH | 
| + * Copyright (C) 2006-present eyeo GmbH | 
| * | 
| * Adblock Plus is free software: you can redistribute it and/or modify | 
| * it under the terms of the GNU General Public License version 3 as | 
| @@ -27,10 +27,11 @@ | 
| #include <mutex> | 
| #include <AdblockPlus/AppInfo.h> | 
| #include <AdblockPlus/LogSystem.h> | 
| -#include <AdblockPlus/FileSystem.h> | 
| +#include <AdblockPlus/IFileSystem.h> | 
| #include <AdblockPlus/JsValue.h> | 
| -#include <AdblockPlus/WebRequest.h> | 
| +#include <AdblockPlus/IWebRequest.h> | 
| #include <AdblockPlus/ITimer.h> | 
| +#include <AdblockPlus/Scheduler.h> | 
|  | 
| namespace v8 | 
| { | 
| @@ -44,6 +45,7 @@ namespace v8 | 
| namespace AdblockPlus | 
| { | 
| class JsEngine; | 
| +  class Platform; | 
|  | 
| /** | 
| * Shared smart pointer to a `JsEngine` instance. | 
| @@ -51,21 +53,6 @@ namespace AdblockPlus | 
| typedef std::shared_ptr<JsEngine> JsEnginePtr; | 
|  | 
| /** | 
| -   * A factory to construct DefaultTimer. | 
| -   */ | 
| -  TimerPtr CreateDefaultTimer(); | 
| - | 
| -  /** | 
| -   * A factory to construct DefaultFileSystem. | 
| -   */ | 
| -  FileSystemPtr CreateDefaultFileSystem(); | 
| - | 
| -  /** | 
| -   * A factory to construct DefaultWebRequest. | 
| -   */ | 
| -  WebRequestPtr CreateDefaultWebRequest(); | 
| - | 
| -  /** | 
| * Scope based isolate manager. Creates a new isolate instance on | 
| * constructing and disposes it on destructing. | 
| */ | 
| @@ -122,17 +109,13 @@ namespace AdblockPlus | 
|  | 
| /** | 
| * Creates a new JavaScript engine instance. | 
| +     * | 
| * @param appInfo Information about the app. | 
| -     * @param timer Implementation of timer. | 
| -     * @param fileSystem Implementation of filesystem. | 
| -     * @param webRequest Implementation of web request. | 
| +     * @param platform AdblockPlus platform providing with necessary | 
| +     *        dependencies. | 
| * @return New `JsEngine` instance. | 
| */ | 
| -    static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), | 
| -      TimerPtr timer = CreateDefaultTimer(), | 
| -      FileSystemPtr fileSystem = CreateDefaultFileSystem(), | 
| -      WebRequestPtr webRequest = CreateDefaultWebRequest()); | 
| - | 
| +    static JsEnginePtr New(const AppInfo& appInfo, Platform& platform); | 
| /** | 
| * Registers the callback function for an event. | 
| * @param eventName Event name. Note that this can be any string - it's a | 
| @@ -262,43 +245,6 @@ namespace AdblockPlus | 
| JsValueList ConvertArguments(const v8::FunctionCallbackInfo<v8::Value>& arguments); | 
|  | 
| /** | 
| -     * Private functionality. | 
| -     * @return The asynchronous IFileSystem implementation. | 
| -     */ | 
| -    FileSystemPtr GetAsyncFileSystem() const; | 
| - | 
| -    /** | 
| -     * Sets the synchronous `FileSystem` implementation used for all | 
| -     * file I/O. Setting this is optional, the engine will use the | 
| -     * implementation created by `CreateDefaultFileSystem()` by | 
| -     * default, which might be sufficient. | 
| -     * @param The `FileSystem` instance to use. | 
| -     */ | 
| -    void SetFileSystem(const FileSystemSyncPtr& val); | 
| - | 
| -    /** | 
| -     * Sets the `WebRequest` implementation used for XMLHttpRequests. | 
| -     * Setting this is optional, the engine will use a `DefaultWebRequest` | 
| -     * instance by default, which might be sufficient. | 
| -     * @param The `WebRequest` instance to use. | 
| -     */ | 
| -    void SetWebRequest(const WebRequestSharedPtr& val); | 
| - | 
| -    /** | 
| -     * @see `SetLogSystem()`. | 
| -     */ | 
| -    LogSystemPtr GetLogSystem() const; | 
| - | 
| -    /** | 
| -     * Sets the `LogSystem` implementation used for logging (e.g. to handle | 
| -     * `console.log()` calls from JavaScript). | 
| -     * Setting this is optional, the engine will use a `DefaultLogSystem` | 
| -     * instance by default, which might be sufficient. | 
| -     * @param The `LogSystem` instance to use. | 
| -     */ | 
| -    void SetLogSystem(const LogSystemPtr& val); | 
| - | 
| -    /** | 
| * Sets a global property that can be accessed by all the scripts. | 
| * @param name Name of the property to set. | 
| * @param value Value of the property to set. | 
| @@ -318,27 +264,31 @@ namespace AdblockPlus | 
| * garbage collection. | 
| */ | 
| void NotifyLowMemory(); | 
| + | 
| +    /** | 
| +     * Private functionality. | 
| +     */ | 
| +    Platform& GetPlatform() | 
| +    { | 
| +      return platform; | 
| +    } | 
| private: | 
| void CallTimerTask(const JsWeakValuesID& timerParamsID); | 
|  | 
| -    explicit JsEngine(TimerPtr timer, FileSystemPtr fileSystem, WebRequestPtr webRequest); | 
| +    explicit JsEngine(Platform& platform); | 
|  | 
| JsValue GetGlobalObject(); | 
|  | 
| /// Isolate must be disposed only after disposing of all objects which are | 
| /// using it. | 
| ScopedV8Isolate isolate; | 
| +    Platform& platform; | 
|  | 
| -    FileSystemPtr fileSystem; | 
| -    LogSystemPtr logSystem; | 
| std::unique_ptr<v8::Global<v8::Context>> context; | 
| EventMap eventCallbacks; | 
| std::mutex eventCallbacksMutex; | 
| JsWeakValuesLists jsWeakValuesLists; | 
| std::mutex jsWeakValuesListsMutex; | 
| -    TimerPtr timer; | 
| -    WebRequestPtr webRequest; | 
| -    WebRequestSharedPtr webRequestLegacy; | 
| }; | 
| } | 
|  | 
|  |