summaryrefslogtreecommitdiffstats
path: root/gin
diff options
context:
space:
mode:
authordcarney <dcarney@chromium.org>2015-04-22 02:55:42 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-22 09:55:53 +0000
commit99ade908da2443a531001afafea4a72fb7e755bc (patch)
treed7c6c13542a03ed7cdc8355e3d67adce5d5e8f18 /gin
parent79e175cc0b41e7d960dffc5e2bd350e701697ac3 (diff)
downloadchromium_src-99ade908da2443a531001afafea4a72fb7e755bc.zip
chromium_src-99ade908da2443a531001afafea4a72fb7e755bc.tar.gz
chromium_src-99ade908da2443a531001afafea4a72fb7e755bc.tar.bz2
convert gin to use phantom weak callbacks
the old style callbacks are going away BUG= Review URL: https://codereview.chromium.org/1102513002 Cr-Commit-Position: refs/heads/master@{#326259}
Diffstat (limited to 'gin')
-rw-r--r--gin/array_buffer.cc21
-rw-r--r--gin/function_template.cc13
-rw-r--r--gin/function_template.h8
-rw-r--r--gin/wrappable.cc12
-rw-r--r--gin/wrappable.h8
5 files changed, 43 insertions, 19 deletions
diff --git a/gin/array_buffer.cc b/gin/array_buffer.cc
index d592b27..dba7763 100644
--- a/gin/array_buffer.cc
+++ b/gin/array_buffer.cc
@@ -73,10 +73,10 @@ class ArrayBuffer::Private : public base::RefCounted<ArrayBuffer::Private> {
Private(v8::Isolate* isolate, v8::Handle<v8::ArrayBuffer> array);
~Private();
- static void WeakCallback(
- const v8::WeakCallbackData<v8::ArrayBuffer, Private>& data);
+ static void FirstWeakCallback(const v8::WeakCallbackInfo<Private>& data);
+ static void SecondWeakCallback(const v8::WeakCallbackInfo<Private>& data);
- v8::Persistent<v8::ArrayBuffer> array_buffer_;
+ v8::Global<v8::ArrayBuffer> array_buffer_;
scoped_refptr<Private> self_reference_;
v8::Isolate* isolate_;
void* buffer_;
@@ -108,18 +108,25 @@ ArrayBuffer::Private::Private(v8::Isolate* isolate,
&g_array_buffer_wrapper_info);
array->SetAlignedPointerInInternalField(kEncodedValueIndex, this);
- self_reference_ = this; // Cleared in WeakCallback.
- array_buffer_.SetWeak(this, WeakCallback);
+ self_reference_ = this; // Cleared in SecondWeakCallback.
+ array_buffer_.SetWeak(this, FirstWeakCallback,
+ v8::WeakCallbackType::kParameter);
}
ArrayBuffer::Private::~Private() {
PerIsolateData::From(isolate_)->allocator()->Free(buffer_, length_);
}
-void ArrayBuffer::Private::WeakCallback(
- const v8::WeakCallbackData<v8::ArrayBuffer, Private>& data) {
+void ArrayBuffer::Private::FirstWeakCallback(
+ const v8::WeakCallbackInfo<Private>& data) {
Private* parameter = data.GetParameter();
parameter->array_buffer_.Reset();
+ data.SetSecondPassCallback(SecondWeakCallback);
+}
+
+void ArrayBuffer::Private::SecondWeakCallback(
+ const v8::WeakCallbackInfo<Private>& data) {
+ Private* parameter = data.GetParameter();
parameter->self_reference_ = NULL;
}
diff --git a/gin/function_template.cc b/gin/function_template.cc
index f76a05b..7b85170 100644
--- a/gin/function_template.cc
+++ b/gin/function_template.cc
@@ -10,7 +10,8 @@ namespace internal {
CallbackHolderBase::CallbackHolderBase(v8::Isolate* isolate)
: v8_ref_(isolate, v8::External::New(isolate, this)) {
- v8_ref_.SetWeak(this, &CallbackHolderBase::WeakCallback);
+ v8_ref_.SetWeak(this, &CallbackHolderBase::FirstWeakCallback,
+ v8::WeakCallbackType::kParameter);
}
CallbackHolderBase::~CallbackHolderBase() {
@@ -22,9 +23,15 @@ v8::Handle<v8::External> CallbackHolderBase::GetHandle(v8::Isolate* isolate) {
}
// static
-void CallbackHolderBase::WeakCallback(
- const v8::WeakCallbackData<v8::External, CallbackHolderBase>& data) {
+void CallbackHolderBase::FirstWeakCallback(
+ const v8::WeakCallbackInfo<CallbackHolderBase>& data) {
data.GetParameter()->v8_ref_.Reset();
+ data.SetSecondPassCallback(SecondWeakCallback);
+}
+
+// static
+void CallbackHolderBase::SecondWeakCallback(
+ const v8::WeakCallbackInfo<CallbackHolderBase>& data) {
delete data.GetParameter();
}
diff --git a/gin/function_template.h b/gin/function_template.h
index a2e1755..1c8e2be 100644
--- a/gin/function_template.h
+++ b/gin/function_template.h
@@ -51,10 +51,12 @@ class GIN_EXPORT CallbackHolderBase {
virtual ~CallbackHolderBase();
private:
- static void WeakCallback(
- const v8::WeakCallbackData<v8::External, CallbackHolderBase>& data);
+ static void FirstWeakCallback(
+ const v8::WeakCallbackInfo<CallbackHolderBase>& data);
+ static void SecondWeakCallback(
+ const v8::WeakCallbackInfo<CallbackHolderBase>& data);
- v8::Persistent<v8::External> v8_ref_;
+ v8::Global<v8::External> v8_ref_;
DISALLOW_COPY_AND_ASSIGN(CallbackHolderBase);
};
diff --git a/gin/wrappable.cc b/gin/wrappable.cc
index a330fef..4137609 100644
--- a/gin/wrappable.cc
+++ b/gin/wrappable.cc
@@ -22,10 +22,16 @@ ObjectTemplateBuilder WrappableBase::GetObjectTemplateBuilder(
return ObjectTemplateBuilder(isolate);
}
-void WrappableBase::WeakCallback(
- const v8::WeakCallbackData<v8::Object, WrappableBase>& data) {
+void WrappableBase::FirstWeakCallback(
+ const v8::WeakCallbackInfo<WrappableBase>& data) {
WrappableBase* wrappable = data.GetParameter();
wrappable->wrapper_.Reset();
+ data.SetSecondPassCallback(SecondWeakCallback);
+}
+
+void WrappableBase::SecondWeakCallback(
+ const v8::WeakCallbackInfo<WrappableBase>& data) {
+ WrappableBase* wrappable = data.GetParameter();
delete wrappable;
}
@@ -55,7 +61,7 @@ v8::Handle<v8::Object> WrappableBase::GetWrapperImpl(v8::Isolate* isolate,
wrapper->SetAlignedPointerInInternalField(kWrapperInfoIndex, info);
wrapper->SetAlignedPointerInInternalField(kEncodedValueIndex, this);
wrapper_.Reset(isolate, wrapper);
- wrapper_.SetWeak(this, WeakCallback);
+ wrapper_.SetWeak(this, FirstWeakCallback, v8::WeakCallbackType::kParameter);
return wrapper;
}
diff --git a/gin/wrappable.h b/gin/wrappable.h
index ff52b19..ea4edcf 100644
--- a/gin/wrappable.h
+++ b/gin/wrappable.h
@@ -68,10 +68,12 @@ class GIN_EXPORT WrappableBase {
WrapperInfo* wrapper_info);
private:
- static void WeakCallback(
- const v8::WeakCallbackData<v8::Object, WrappableBase>& data);
+ static void FirstWeakCallback(
+ const v8::WeakCallbackInfo<WrappableBase>& data);
+ static void SecondWeakCallback(
+ const v8::WeakCallbackInfo<WrappableBase>& data);
- v8::Persistent<v8::Object> wrapper_; // Weak
+ v8::Global<v8::Object> wrapper_; // Weak
DISALLOW_COPY_AND_ASSIGN(WrappableBase);
};