| Index: include/AdblockPlus/Platform.h | 
| diff --git a/include/AdblockPlus/Platform.h b/include/AdblockPlus/Platform.h | 
| index be1302b725aee0c0fe9654923328fabf575665b5..0b85dec8e8661e968fda41aa68c3dc0345f95e39 100644 | 
| --- a/include/AdblockPlus/Platform.h | 
| +++ b/include/AdblockPlus/Platform.h | 
| @@ -30,26 +30,6 @@ | 
| namespace AdblockPlus | 
| { | 
| - /** | 
| - * A factory to construct DefaultTimer. | 
| - */ | 
| - TimerPtr CreateDefaultTimer(); | 
| - | 
| - /** | 
| - * A factory to construct DefaultFileSystem. | 
| - */ | 
| - FileSystemPtr CreateDefaultFileSystem(const Scheduler& scheduler, const std::string& basePath = std::string()); | 
| - | 
| - /** | 
| - * A factory to construct DefaultWebRequest. | 
| - */ | 
| - WebRequestPtr CreateDefaultWebRequest(const Scheduler& scheduler, WebRequestSyncPtr syncImpl = nullptr); | 
| - | 
| - /** | 
| - * A factory to construct LogSystem. | 
| - */ | 
| - LogSystemPtr CreateDefaultLogSystem(); | 
| - | 
| class IV8IsolateProvider; | 
| class JsEngine; | 
| @@ -91,7 +71,7 @@ namespace AdblockPlus | 
| * implementation is chosen. | 
| */ | 
| explicit Platform(CreationParameters&& creationParameters = CreationParameters()); | 
| - ~Platform(); | 
| + virtual ~Platform(); | 
| /** | 
| * Ensures that JsEngine is constructed. If JsEngine is already present | 
| @@ -157,6 +137,52 @@ namespace AdblockPlus | 
| std::shared_ptr<JsEngine> jsEngine; | 
| std::shared_future<FilterEnginePtr> filterEngine; | 
| }; | 
| + | 
| + /** | 
| + * A helper class allowing to construct a default Platform and to obtain | 
| + * the Scheduler used by Platform before the latter is constructed. | 
| + */ | 
| + class DefaultPlatformBuilder : public Platform::CreationParameters | 
| + { | 
| + public: | 
| + /** | 
| + * Constructs a default executor for asynchronous tasks. When Platform | 
| + * is being destroyed it starts to ignore new tasks and waits for finishing | 
| + * of already running tasks. | 
| + * @return Scheduler allowing to execute tasks asynchronously. | 
| + */ | 
| + Scheduler GetDefaultAsyncExecutor(); | 
| + | 
| + /** | 
| + * Constructs default implementation of `ITimer`. | 
| + */ | 
| + void CreateDefaultTimer(); | 
| + | 
| + /** | 
| + * Constructs default implementation of `IFileSystem`. | 
| + * @param basePath A working directory for file system operations. | 
| + */ | 
| + void CreateDefaultFileSystem(const std::string& basePath = std::string()); | 
| + | 
| + /** | 
| + * Constructs default implementation of `IWebRequest`. | 
| + */ | 
| + void CreateDefaultWebRequest(WebRequestSyncPtr webRequest = nullptr); | 
| + | 
| + /** | 
| + * Constructs default implementation of `LogSystem`. | 
| + */ | 
| + void CreateDefaultLogSystem(); | 
| + | 
| + /** | 
| + * Constructs Platform with default implementations of platform interfaces | 
| + * when a corresponding field is nullptr and with a default Scheduler. | 
| + */ | 
| + std::unique_ptr<Platform> CreatePlatform(); | 
| + private: | 
| + std::shared_ptr<Scheduler> asyncExecutor; | 
| + Scheduler defaultScheduler; | 
| + }; | 
| } | 
| #endif // ADBLOCK_PLUS_PLATFORM_H |