| Index: include/AdblockPlus/JsEngine.h |
| =================================================================== |
| --- a/include/AdblockPlus/JsEngine.h |
| +++ b/include/AdblockPlus/JsEngine.h |
| @@ -44,8 +44,8 @@ |
| namespace AdblockPlus |
| { |
| - class JsEngine; |
| class Platform; |
| + template <typename T> class JsEngineTemplate; |
| /** |
| * Shared smart pointer to a `JsEngine` instance. |
| @@ -67,20 +67,32 @@ |
| virtual v8::Isolate* Get() = 0; |
| }; |
| + template <typename T> |
| + struct JsWeakValuesList |
| + { |
| + ~JsWeakValuesList(); |
| + std::vector<T> values; |
| + }; |
| + typedef std::list<JsWeakValuesList<v8::Global<v8::Value>>> JsWeakValuesLists; |
| + |
| + /** |
| + * An opaque structure representing ID of stored JsValueList. |
| + */ |
| + class JsWeakValuesID |
| + { |
| + template <typename T> friend class JsEngineTemplate; |
| + JsWeakValuesLists::const_iterator iterator; |
| + }; |
| + |
| + |
| /** |
| * JavaScript engine used by `FilterEngine`, wraps v8. |
| */ |
| - class JsEngine : public std::enable_shared_from_this<JsEngine> |
| + template <typename T> class JsEngineTemplate : public std::enable_shared_from_this<JsEngineTemplate<T>> |
| { |
| - friend class JsValue; |
| - friend class JsContext; |
| + template <typename T> friend class JsValueTemplate; |
| + template <typename T> friend class JsContextTemplate; |
| - struct JsWeakValuesList |
| - { |
| - ~JsWeakValuesList(); |
| - std::vector<v8::Global<v8::Value>> values; |
| - }; |
| - typedef std::list<JsWeakValuesList> JsWeakValuesLists; |
| public: |
| /** |
| * Event callback function. |
| @@ -93,15 +105,6 @@ |
| typedef std::map<std::string, EventCallback> EventMap; |
| /** |
| - * An opaque structure representing ID of stored JsValueList. |
| - */ |
| - class JsWeakValuesID |
| - { |
| - friend class JsEngine; |
| - JsWeakValuesLists::const_iterator iterator; |
| - }; |
| - |
| - /** |
| * Creates a new JavaScript engine instance. |
| * |
| * @param appInfo Information about the app. |
| @@ -186,7 +189,7 @@ |
| * the current `JsEngine`. |
| * @return New `JsValue` instance. |
| */ |
| - JsValue NewCallback(const v8::FunctionCallback& callback); |
| + JsValue NewCallback(const typename T::CallbackFunc& callback); |
| /** |
| * Returns a `JsEngine` instance contained in a `v8::FunctionCallbackInfo` object. |
| @@ -196,7 +199,7 @@ |
| * instance. |
| * @return `JsEngine` instance from `v8::FunctionCallbackInfo`. |
| */ |
| - static JsEnginePtr FromArguments(const v8::FunctionCallbackInfo<v8::Value>& arguments); |
| + static JsEnginePtr FromArguments(const typename T::CallbackFuncInfo& arguments); |
| /** |
| * Stores `JsValue`s in a way they don't keep a strong reference to |
| @@ -223,14 +226,14 @@ |
| * @param arguments `v8::FunctionCallbackInfo` is the arguments received in C++ |
| * callback associated for global setTimeout method. |
| */ |
| - static void ScheduleTimer(const v8::FunctionCallbackInfo<v8::Value>& arguments); |
| + static void ScheduleTimer(const typename T::CallbackFuncInfo& arguments); |
| /* |
| * Private functionality required to implement web requests. |
| * @param arguments `v8::FunctionCallbackInfo` is the arguments received in C++ |
| * callback associated for global GET method. |
| */ |
| - static void ScheduleWebRequest(const v8::FunctionCallbackInfo<v8::Value>& arguments); |
| + static void ScheduleWebRequest(const typename T::CallbackFuncInfo& arguments); |
| /** |
| * Converts v8 arguments to `JsValue` objects. |
| @@ -238,7 +241,7 @@ |
| * convert. |
| * @return List of arguments converted to `const JsValue` objects. |
| */ |
| - JsValueList ConvertArguments(const v8::FunctionCallbackInfo<v8::Value>& arguments); |
| + JsValueList ConvertArguments(const typename T::CallbackFuncInfo& arguments); |
| /** |
| * Sets a global property that can be accessed by all the scripts. |
| @@ -250,7 +253,7 @@ |
| /** |
| * Returns a pointer to associated v8::Isolate. |
| */ |
| - v8::Isolate* GetIsolate() |
| + typename T::Isolate* GetIsolate() |
| { |
| return isolate->Get(); |
| } |
| @@ -271,7 +274,7 @@ |
| private: |
| void CallTimerTask(const JsWeakValuesID& timerParamsID); |
| - explicit JsEngine(Platform& platform, std::unique_ptr<IV8IsolateProvider> isolate); |
| + explicit JsEngineTemplate(Platform& platform, std::unique_ptr<IV8IsolateProvider> isolate); |
| JsValue GetGlobalObject(); |
| @@ -280,7 +283,7 @@ |
| /// using it. |
| std::unique_ptr<IV8IsolateProvider> isolate; |
| - std::unique_ptr<v8::Global<v8::Context>> context; |
| + std::unique_ptr<typename T::GlobalContext> context; |
| EventMap eventCallbacks; |
| std::mutex eventCallbacksMutex; |
| JsWeakValuesLists jsWeakValuesLists; |