diff --git a/native_mate/wrappable.cc b/native_mate/wrappable.cc index 274c9c30df3e..7c00e350e888 100644 --- a/native_mate/wrappable.cc +++ b/native_mate/wrappable.cc @@ -10,7 +10,7 @@ namespace mate { -Wrappable::Wrappable() { +Wrappable::Wrappable() : isolate_(NULL) { } Wrappable::~Wrappable() { @@ -21,6 +21,8 @@ void Wrappable::Wrap(v8::Isolate* isolate, v8::Local wrapper) { if (!wrapper_.IsEmpty()) return; + isolate_ = isolate; + MATE_SET_INTERNAL_FIELD_POINTER(wrapper, 0, this); MATE_PERSISTENT_ASSIGN(v8::Object, isolate, wrapper_, wrapper); MATE_PERSISTENT_SET_WEAK(wrapper_, this, WeakCallback); diff --git a/native_mate/wrappable.h b/native_mate/wrappable.h index b8708f3b3a09..172606f6853a 100644 --- a/native_mate/wrappable.h +++ b/native_mate/wrappable.h @@ -66,6 +66,9 @@ class Wrappable { Wrappable(); virtual ~Wrappable(); + // Returns the Isolate this object is created in. + v8::Isolate* isolate() const { return isolate_; } + virtual ObjectTemplateBuilder GetObjectTemplateBuilder(v8::Isolate* isolate); // Called after the "_init" method gets called in JavaScript. @@ -74,6 +77,7 @@ class Wrappable { private: static MATE_WEAK_CALLBACK(WeakCallback, v8::Object, Wrappable); + v8::Isolate* isolate_; v8::UniquePersistent wrapper_; // Weak DISALLOW_COPY_AND_ASSIGN(Wrappable);