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; |