[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)) { | ||||
13 | v8_ref_.SetWeak(this, &CallbackHolderBase::WeakCallback); | ||||
14 | } | ||||
15 | |||||
16 | CallbackHolderBase::~CallbackHolderBase() { | ||||
17 | DCHECK(v8_ref_.IsEmpty()); | ||||
18 | } | ||||
19 | |||||
20 | v8::Handle<v8::External> CallbackHolderBase::GetHandle(v8::Isolate* isolate) { | ||||
21 | return v8::Local<v8::External>::New(isolate, v8_ref_); | ||||
22 | } | ||||
23 | |||||
24 | // static | ||||
25 | void CallbackHolderBase::WeakCallback( | ||||
26 | const v8::WeakCallbackData<v8::External, CallbackHolderBase>& data) { | ||||
27 | data.GetParameter()->v8_ref_.Reset(); | ||||
28 | delete data.GetParameter(); | ||||
29 | } | ||||
[email protected] | 81f8b91b | 2013-11-26 21:02:51 | [diff] [blame] | 30 | |
[email protected] | cb6c2bb | 2013-12-17 21:47:04 | [diff] [blame] | 31 | } // namespace internal |
[email protected] | 314cde1 | 2013-11-23 20:26:51 | [diff] [blame] | 32 | |
33 | } // namespace gin |