| Index: include/AdblockPlus/JsEngine.h |
| diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h |
| index bf68c378d56e4e0dcc295e488c4502950dfce7a0..f5c9d9c1730d5bfced2b99ae5c19194f3d576e03 100644 |
| --- a/include/AdblockPlus/JsEngine.h |
| +++ b/include/AdblockPlus/JsEngine.h |
| @@ -49,6 +49,28 @@ namespace AdblockPlus |
| typedef std::shared_ptr<JsEngine> JsEnginePtr; |
| /** |
| + * Scope based isolate manager. Creates a new isolate instance on |
| + * constructing and disposes it on destructing. |
| + */ |
| + class ScopedV8Isolate |
| + { |
| + public: |
| + ScopedV8Isolate(); |
| + ~ScopedV8Isolate(); |
| + v8::Isolate* GetIsolate() |
| + { |
| + return isolate; |
| + } |
| + protected: |
| + v8::Isolate* isolate; |
| + }; |
| + |
| + /** |
| + * 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> |
| @@ -72,7 +94,7 @@ namespace AdblockPlus |
| * @param appInfo Information about the app. |
| * @return New `JsEngine` instance. |
| */ |
| - static JsEnginePtr New(const AppInfo& appInfo = AppInfo()); |
| + static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), const ScopedV8IsolatePtr& isolate = ScopedV8IsolatePtr()); |
| /** |
| * Registers the callback function for an event. |
| @@ -215,13 +237,24 @@ namespace AdblockPlus |
| */ |
| void SetGlobalProperty(const std::string& name, AdblockPlus::JsValuePtr value); |
| + /** |
| + * Returns a pointer to associated v8::Isolate. |
| + */ |
| + v8::Isolate* GetIsolate() |
| + { |
| + return isolate->GetIsolate(); |
| + } |
| + |
| private: |
| - JsEngine(); |
| + explicit JsEngine(const ScopedV8IsolatePtr& isolate); |
| + |
| + /// Isolate must be disposed only after disposing of all objects which are |
| + /// using it. |
| + ScopedV8IsolatePtr isolate; |
| FileSystemPtr fileSystem; |
| WebRequestPtr webRequest; |
| LogSystemPtr logSystem; |
| - v8::Isolate* isolate; |
| std::unique_ptr<v8::Persistent<v8::Context>> context; |
| EventMap eventCallbacks; |
| JsValuePtr globalJsObject; |