Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: include/AdblockPlus/JsEngine.h

Issue 6233220328718336: Issue #3593, #1197- fix isolate management (Closed)
Patch Set: rebase fix v8 initialization Created May 20, 2016, 3:22 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | libadblockplus.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/AdblockPlus/JsEngine.h
diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h
index bf68c378d56e4e0dcc295e488c4502950dfce7a0..19d2586ea9a3515b8806d4edb5f26448e6e16012 100644
--- a/include/AdblockPlus/JsEngine.h
+++ b/include/AdblockPlus/JsEngine.h
@@ -49,6 +49,31 @@ 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* Get()
+ {
+ return isolate;
+ }
+ private:
+ ScopedV8Isolate(const ScopedV8Isolate&);
+ ScopedV8Isolate& operator=(const ScopedV8Isolate&);
+
+ 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>
@@ -70,9 +95,11 @@ namespace AdblockPlus
/**
* Creates a new JavaScript engine instance.
* @param appInfo Information about the app.
+ * @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());
+ static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), const ScopedV8IsolatePtr& isolate = ScopedV8IsolatePtr(new ScopedV8Isolate()));
/**
* Registers the callback function for an event.
@@ -215,13 +242,24 @@ namespace AdblockPlus
*/
void SetGlobalProperty(const std::string& name, AdblockPlus::JsValuePtr value);
+ /**
+ * Returns a pointer to associated v8::Isolate.
+ */
+ v8::Isolate* GetIsolate()
+ {
+ return isolate->Get();
+ }
+
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;
« no previous file with comments | « no previous file | libadblockplus.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld