[email protected] | 314cde1 | 2013-11-23 20:26:51 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "gin/function_template.h" | ||||
6 | |||||
[email protected] | 314cde1 | 2013-11-23 20:26:51 | [diff] [blame] | 7 | namespace gin { |
8 | |||||
[email protected] | cb6c2bb | 2013-12-17 21:47:04 | [diff] [blame] | 9 | namespace internal { |
[email protected] | 314cde1 | 2013-11-23 20:26:51 | [diff] [blame] | 10 | |
[email protected] | bf014290 | 2014-02-11 15:06:12 | [diff] [blame] | 11 | CallbackHolderBase::CallbackHolderBase(v8::Isolate* isolate) |
12 | : v8_ref_(isolate, v8::External::New(isolate, this)) { | ||||
dcarney | 99ade908 | 2015-04-22 09:55:42 | [diff] [blame] | 13 | v8_ref_.SetWeak(this, &CallbackHolderBase::FirstWeakCallback, |
14 | v8::WeakCallbackType::kParameter); | ||||
[email protected] | bf014290 | 2014-02-11 15:06:12 | [diff] [blame] | 15 | } |
16 | |||||
17 | CallbackHolderBase::~CallbackHolderBase() { | ||||
18 | DCHECK(v8_ref_.IsEmpty()); | ||||
19 | } | ||||
20 | |||||
deepak.s | faaa1b6 | 2015-04-30 07:30:48 | [diff] [blame] | 21 | v8::Local<v8::External> CallbackHolderBase::GetHandle(v8::Isolate* isolate) { |
[email protected] | bf014290 | 2014-02-11 15:06:12 | [diff] [blame] | 22 | return v8::Local<v8::External>::New(isolate, v8_ref_); |
23 | } | ||||
24 | |||||
25 | // static | ||||
dcarney | 99ade908 | 2015-04-22 09:55:42 | [diff] [blame] | 26 | void CallbackHolderBase::FirstWeakCallback( |
27 | const v8::WeakCallbackInfo<CallbackHolderBase>& data) { | ||||
[email protected] | bf014290 | 2014-02-11 15:06:12 | [diff] [blame] | 28 | data.GetParameter()->v8_ref_.Reset(); |
dcarney | 99ade908 | 2015-04-22 09:55:42 | [diff] [blame] | 29 | data.SetSecondPassCallback(SecondWeakCallback); |
30 | } | ||||
31 | |||||
32 | // static | ||||
33 | void CallbackHolderBase::SecondWeakCallback( | ||||
34 | const v8::WeakCallbackInfo<CallbackHolderBase>& data) { | ||||
[email protected] | bf014290 | 2014-02-11 15:06:12 | [diff] [blame] | 35 | delete data.GetParameter(); |
36 | } | ||||
[email protected] | 81f8b91b | 2013-11-26 21:02:51 | [diff] [blame] | 37 | |
[email protected] | cb6c2bb | 2013-12-17 21:47:04 | [diff] [blame] | 38 | } // namespace internal |
[email protected] | 314cde1 | 2013-11-23 20:26:51 | [diff] [blame] | 39 | |
40 | } // namespace gin |