Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / gin / function_template.cc
index 243ac12..f76a05b 100644 (file)
@@ -8,7 +8,25 @@ namespace gin {
 
 namespace internal {
 
-WrapperInfo CallbackHolderBase::kWrapperInfo = { kEmbedderNativeGin };
+CallbackHolderBase::CallbackHolderBase(v8::Isolate* isolate)
+    : v8_ref_(isolate, v8::External::New(isolate, this)) {
+  v8_ref_.SetWeak(this, &CallbackHolderBase::WeakCallback);
+}
+
+CallbackHolderBase::~CallbackHolderBase() {
+  DCHECK(v8_ref_.IsEmpty());
+}
+
+v8::Handle<v8::External> CallbackHolderBase::GetHandle(v8::Isolate* isolate) {
+  return v8::Local<v8::External>::New(isolate, v8_ref_);
+}
+
+// static
+void CallbackHolderBase::WeakCallback(
+    const v8::WeakCallbackData<v8::External, CallbackHolderBase>& data) {
+  data.GetParameter()->v8_ref_.Reset();
+  delete data.GetParameter();
+}
 
 }  // namespace internal