1 // Copyright 2014 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 "config.h" 6 #include "bindings/v8/ScriptFunction.h" 7 8 #include "bindings/v8/V8Binding.h" 9 10 namespace WebCore { 11 12 void ScriptFunction::callCallback(const v8::FunctionCallbackInfo<v8::Value>& args) 13 { 14 v8::Isolate* isolate = args.GetIsolate(); 15 ASSERT(!args.Data().IsEmpty()); 16 ScriptFunction* function = ScriptFunction::Cast(args.Data()); 17 v8::Local<v8::Value> value = args.Length() > 0 ? args[0] : v8::Local<v8::Value>(v8::Undefined(isolate)); 18 19 ScriptValue result = function->call(ScriptValue(ScriptState::current(isolate), value)); 20 21 v8SetReturnValue(args, result.v8Value()); 22 } 23 24 v8::Handle<v8::Function> ScriptFunction::adoptByGarbageCollector(PassOwnPtr<ScriptFunction> function) 25 { 26 if (!function) 27 return v8::Handle<v8::Function>(); 28 v8::Isolate* isolate = function->isolate(); 29 return createClosure(&ScriptFunction::callCallback, function.leakPtr()->releaseToV8GarbageCollector(), isolate); 30 } 31 32 } // namespace WebCore 33