// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "gin/function_template.h" namespace gin { namespace internal { CallbackHolderBase::CallbackHolderBase(v8::Isolate* isolate) : v8_ref_(isolate, v8::External::New(isolate, this)) { v8_ref_.SetWeak(this, &CallbackHolderBase::FirstWeakCallback, v8::WeakCallbackType::kParameter); } CallbackHolderBase::~CallbackHolderBase() { DCHECK(v8_ref_.IsEmpty()); } v8::Local CallbackHolderBase::GetHandle(v8::Isolate* isolate) { return v8::Local::New(isolate, v8_ref_); } // static void CallbackHolderBase::FirstWeakCallback( const v8::WeakCallbackInfo& data) { data.GetParameter()->v8_ref_.Reset(); data.SetSecondPassCallback(SecondWeakCallback); } // static void CallbackHolderBase::SecondWeakCallback( const v8::WeakCallbackInfo& data) { delete data.GetParameter(); } } // namespace internal } // namespace gin