| Index: include/AdblockPlus/JsEngine.h |
| diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h |
| index f54b98febd3d256ac88fa027c572aae948bd24bc..63f929c94a0b481b33ec3270d50a6ab51408540b 100644 |
| --- a/include/AdblockPlus/JsEngine.h |
| +++ b/include/AdblockPlus/JsEngine.h |
| @@ -57,6 +57,11 @@ namespace AdblockPlus |
| TimerPtr CreateDefaultTimer(); |
| /** |
| + * A factory to construct DefaultWebRequest. |
| + */ |
| + WebRequestPtr CreateDefaultWebRequest(); |
| + |
| + /** |
| * Scope based isolate manager. Creates a new isolate instance on |
| * constructing and disposes it on destructing. |
| */ |
| @@ -77,11 +82,6 @@ namespace AdblockPlus |
| }; |
| /** |
| - * Shared smart pointer to ScopedV8Isolate instance; |
| - */ |
| - typedef std::shared_ptr<ScopedV8Isolate> ScopedV8IsolatePtr; |
| - |
| - /** |
| * JavaScript engine used by `FilterEngine`, wraps v8. |
| */ |
| class JsEngine : public std::enable_shared_from_this<JsEngine> |
| @@ -120,13 +120,14 @@ namespace AdblockPlus |
| * Creates a new JavaScript engine instance. |
| * @param appInfo Information about the app. |
| * @param timer Implementation of timer. |
| + * @param webRequest Implementation of web request. |
| * @param isolate v8::Isolate wrapper. This parameter should be considered |
| * as a temporary hack for tests, it will go away. Issue #3593. |
| * @return New `JsEngine` instance. |
| */ |
| static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), |
| TimerPtr timer = CreateDefaultTimer(), |
| - const ScopedV8IsolatePtr& isolate = ScopedV8IsolatePtr(new ScopedV8Isolate())); |
| + WebRequestPtr webRequest = CreateDefaultWebRequest()); |
| /** |
| * Registers the callback function for an event. |
| @@ -241,6 +242,13 @@ namespace AdblockPlus |
| */ |
| static void ScheduleTimer(const v8::Arguments& arguments); |
| + /* |
| + * Private functionality required to implement web requests. |
| + * @param arguments `v8::Arguments` is the arguments received in C++ |
| + * callback associated for global GET method. |
| + */ |
| + static void ScheduleWebRequest(const v8::Arguments& arguments); |
| + |
| /** |
| * Converts v8 arguments to `JsValue` objects. |
| * @param arguments `v8::Arguments` object containing the arguments to |
| @@ -263,17 +271,12 @@ namespace AdblockPlus |
| void SetFileSystem(const FileSystemPtr& val); |
| /** |
| - * @see `SetWebRequest()`. |
| - */ |
| - WebRequestPtr GetWebRequest() const; |
| - |
| - /** |
| * 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 WebRequestPtr& val); |
| + void SetWebRequest(const WebRequestSharedPtr& val); |
| /** |
| * @see `SetLogSystem()`. |
| @@ -301,22 +304,26 @@ namespace AdblockPlus |
| */ |
| v8::Isolate* GetIsolate() |
| { |
| - return isolate->Get(); |
| + return isolate.Get(); |
| } |
| + /** |
| + * Notifies JS engine about critically low memory what should cause a |
| + * garbage collection. |
| + */ |
| + void NotifyLowMemory(); |
| private: |
| void CallTimerTask(const JsWeakValuesID& timerParamsID); |
| - explicit JsEngine(const ScopedV8IsolatePtr& isolate, TimerPtr timer); |
| + explicit JsEngine(TimerPtr timer, WebRequestPtr webRequest); |
| JsValue GetGlobalObject(); |
| /// Isolate must be disposed only after disposing of all objects which are |
| /// using it. |
| - ScopedV8IsolatePtr isolate; |
| + ScopedV8Isolate isolate; |
| FileSystemPtr fileSystem; |
| - WebRequestPtr webRequest; |
| LogSystemPtr logSystem; |
| std::unique_ptr<v8::Persistent<v8::Context>> context; |
| EventMap eventCallbacks; |
| @@ -324,6 +331,8 @@ namespace AdblockPlus |
| JsWeakValuesLists jsWeakValuesLists; |
| std::mutex jsWeakValuesListsMutex; |
| TimerPtr timer; |
| + WebRequestPtr webRequest; |
| + WebRequestSharedPtr webRequestLegacy; |
| }; |
| } |