Index: include/AdblockPlus/Platform.h |
diff --git a/include/AdblockPlus/Platform.h b/include/AdblockPlus/Platform.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c95204350c3af72af0eee70970636fcbd0101693 |
--- /dev/null |
+++ b/include/AdblockPlus/Platform.h |
@@ -0,0 +1,159 @@ |
+/* |
+ * This file is part of Adblock Plus <https://adblockplus.org/>, |
+ * 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 |
+ * published by the Free Software Foundation. |
+ * |
+ * Adblock Plus is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
+ |
+#ifndef ADBLOCK_PLUS_PLATFORM_H |
+#define ADBLOCK_PLUS_PLATFORM_H |
+ |
+#include "LogSystem.h" |
+#include "ITimer.h" |
+#include "IFileSystem.h" |
+#include "IWebRequest.h" |
+#include "AppInfo.h" |
+#include "Scheduler.h" |
+#include "FilterEngine.h" |
+#include <mutex> |
+#include <future> |
+ |
+namespace AdblockPlus |
+{ |
+ /** |
+ * A factory to construct DefaultTimer. |
+ */ |
+ TimerPtr CreateDefaultTimer(); |
+ |
+ /** |
+ * A factory to construct DefaultFileSystem. |
+ */ |
+ FileSystemPtr CreateDefaultFileSystem(const Scheduler& scheduler); |
+ |
+ /** |
+ * A factory to construct DefaultWebRequest. |
+ */ |
+ WebRequestPtr CreateDefaultWebRequest(const Scheduler& scheduler); |
+ |
+ /** |
+ * A factory to construct LogSystem. |
+ */ |
+ LogSystemPtr CreateDefaultLogSystem(); |
+ |
+ class JsEngine; |
+ |
+ /** |
+ * AdblockPlus platform is the main component providing access to other |
+ * modules. |
+ * |
+ * It manages the functionality modules, e.g. JsEngine and FilterEngine as |
+ * well as allows to correctly work with asynchronous functionality. |
+ */ |
+ class Platform |
+ { |
+ public: |
+ /** |
+ * Platform creation parameters. |
+ * |
+ * @param logSystem Implementation of log system. |
+ * @param timer Implementation of timer. |
+ * @param webRequest Implementation of web request. |
+ * @param fileSystem Implementation of filesystem. |
+ */ |
+ struct CreationParameters |
+ { |
+ LogSystemPtr logSystem; |
+ TimerPtr timer; |
+ WebRequestPtr webRequest; |
+ FileSystemPtr fileSystem; |
+ }; |
+ |
+ /** |
+ * Callback type invoked when FilterEngine is created. |
+ */ |
+ typedef std::function<void(const FilterEngine&)> OnFilterEngineCreatedCallback; |
+ |
+ /** |
+ * Platform constructor. |
+ * |
+ * When a parameter value is nullptr the corresponding default |
+ * implementation is chosen. |
+ */ |
+ explicit Platform(CreationParameters&& creationParameters = CreationParameters()); |
+ ~Platform(); |
+ |
+ /** |
+ * Ensures that JsEngine is constructed. |
+ * |
+ * @param appInfo Information about the app, if jsEngine is already present |
+ * then the value is ignored. |
+ */ |
+ void SetUpJsEngine(const AppInfo& appInfo = AppInfo()); |
+ |
+ /** |
+ * Retrieves the `JsEngine` instance. It calls SetUpJsEngine if JsEngine is |
+ * not initialized yet. |
+ */ |
+ JsEngine& GetJsEngine(); |
+ |
+ /** |
+ * Ensures that FilterEngine is constructed. Only the first call is effective. |
+ * |
+ * @param parameters optional creation parameters. |
+ * @param onCreated A callback which is called when FilterEngine is ready |
+ * for use. |
+ */ |
+ void CreateFilterEngineAsync(const FilterEngine::CreationParameters& parameters = FilterEngine::CreationParameters(), |
+ const OnFilterEngineCreatedCallback& onCreated = OnFilterEngineCreatedCallback()); |
+ |
+ /** |
+ * Synchronous equivalent of `CreateFilterEngineAsync`. |
+ * Internally it blocks and waits for finishing of certain asynchronous |
+ * operations, please ensure that provided implementation does not lead to |
+ * a dead lock. |
+ */ |
+ FilterEngine& GetFilterEngine(); |
+ |
+ /** |
+ * @return The asynchronous ITimer implementation. |
+ */ |
+ ITimer& GetTimer(); |
+ |
+ /** |
+ * @return The asynchronous IFileSystem implementation. |
+ */ |
+ IFileSystem& GetFileSystem(); |
+ |
+ /** |
+ * @return The asynchronous IWebRequest implementation. |
+ */ |
+ IWebRequest& GetWebRequest(); |
+ |
+ /** |
+ * @see `SetLogSystem()`. |
+ */ |
+ LogSystem& GetLogSystem(); |
+ |
+ private: |
+ LogSystemPtr logSystem; |
+ TimerPtr timer; |
+ FileSystemPtr fileSystem; |
+ WebRequestPtr webRequest; |
+ // used for creation and deletion of modules. |
+ std::mutex modulesMutex; |
+ std::shared_ptr<JsEngine> jsEngine; |
+ std::shared_future<FilterEnginePtr> filterEngine; |
+ }; |
+} |
+ |
+#endif // ADBLOCK_PLUS_PLATFORM_H |