// Copyright (c) 2009 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 "config.h" #include #include "v8_proxy.h" #include "webkit/glue/devtools/bound_object.h" using namespace WebCore; BoundObject::BoundObject( v8::Handle context, void* v8_this, const char* object_name) : context_(context), object_name_(object_name) { v8::HandleScope scope; v8::Context::Scope context_scope(context); v8_this_ = v8::Persistent::New(v8::External::New(v8_this)); v8::Local local_template = v8::FunctionTemplate::New(V8Proxy::CheckNewLegal); host_template_ = v8::Persistent::New(local_template); host_template_->SetClassName(v8::String::New(object_name)); } BoundObject::~BoundObject() { bound_object_.Dispose(); host_template_.Dispose(); v8_this_.Dispose(); } void BoundObject::AddProtoFunction( const char* name, v8::InvocationCallback callback) { v8::HandleScope scope; v8::Local signature = v8::Signature::New(host_template_); v8::Local proto = host_template_->PrototypeTemplate(); proto->Set( v8::String::New(name), v8::FunctionTemplate::New( callback, v8_this_, signature), static_cast(v8::DontDelete)); } void BoundObject::Build() { v8::HandleScope scope; v8::Context::Scope frame_scope(context_); v8::Local constructor = host_template_->GetFunction(); bound_object_ = v8::Persistent::New( SafeAllocation::NewInstance(constructor)); v8::Handle global = context_->Global(); global->Set(v8::String::New(object_name_), bound_object_); }