diff options
author | dcarney <dcarney@chromium.org> | 2015-04-22 02:55:42 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-22 09:55:53 +0000 |
commit | 99ade908da2443a531001afafea4a72fb7e755bc (patch) | |
tree | d7c6c13542a03ed7cdc8355e3d67adce5d5e8f18 /gin | |
parent | 79e175cc0b41e7d960dffc5e2bd350e701697ac3 (diff) | |
download | chromium_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.cc | 21 | ||||
-rw-r--r-- | gin/function_template.cc | 13 | ||||
-rw-r--r-- | gin/function_template.h | 8 | ||||
-rw-r--r-- | gin/wrappable.cc | 12 | ||||
-rw-r--r-- | gin/wrappable.h | 8 |
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); }; |