1e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)/* 219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * 419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * modification, are permitted provided that the following conditions are 619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * met: 719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * 819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 1119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * in the documentation and/or other materials provided with the 1319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * distribution. 1419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 1619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * this software without specific prior written permission. 1719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * 1819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) */ 3019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 3119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)// This file has been auto-generated by code_generator_v8.pm. DO NOT MODIFY! 32e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 33e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "config.h" 34e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "V8TestInterfaceImplementedAs.h" 35e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 36e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "RuntimeEnabledFeatures.h" 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "bindings/v8/ExceptionState.h" 38e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "bindings/v8/V8DOMConfiguration.h" 39e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/ContextFeatures.h" 40e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/Document.h" 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/TraceEvent.h" 42e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "wtf/GetPtr.h" 43e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "wtf/RefPtr.h" 44e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 45e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)namespace WebCore { 46e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)static void initializeScriptWrappableForInterface(RealClass* object) 48e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 49e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) if (ScriptWrappable::wrapperCanBeStoredInObject(object)) 50f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ScriptWrappable::setTypeInfoInObject(object, &V8TestInterfaceImplementedAs::wrapperTypeInfo); 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) ASSERT_NOT_REACHED(); 53e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} // namespace WebCore 565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// In ScriptWrappable::init, the use of a local function declaration has an issue on Windows: 585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// the local declaration does not pick up the surrounding namespace. Therefore, we provide this function 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// in the global namespace. 605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// (More info on the MSVC bug here: http://connect.microsoft.com/VisualStudio/feedback/details/664619/the-namespace-of-local-function-declarations-in-c) 615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void webCoreInitializeScriptWrappableForInterface(WebCore::RealClass* object) 625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebCore::initializeScriptWrappableForInterface(object); 645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 66e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)namespace WebCore { 67a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const WrapperTypeInfo V8TestInterfaceImplementedAs::wrapperTypeInfo = { gin::kEmbedderBlink, V8TestInterfaceImplementedAs::domTemplate, V8TestInterfaceImplementedAs::derefObject, 0, 0, 0, V8TestInterfaceImplementedAs::installPerContextEnabledMethods, 0, WrapperTypeObjectPrototype }; 68e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 69e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)namespace RealClassV8Internal { 70e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 71e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)template <typename T> void V8_USE(T) { } 72e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 7319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void aAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) 74e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 75e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 763464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch v8SetReturnValueString(info, imp->a(), info.GetIsolate()); 77e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 78e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 7919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void aAttributeGetterCallback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) 80e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 81e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); 8219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::aAttributeGetter(info); 83e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 84e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 85e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 8619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void aAttributeSetter(v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) 87e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 88e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 89bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, cppValue, jsValue); 90bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) imp->setA(cppValue); 91e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 92e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 9319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void aAttributeSetterCallback(v8::Local<v8::String>, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) 94e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 95e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); 9619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::aAttributeSetter(jsValue, info); 97e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 98e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 99e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 10019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void bAttributeGetter(const v8::PropertyCallbackInfo<v8::Value>& info) 101e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 102e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 103e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) v8SetReturnValueFast(info, imp->b(), imp); 104e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 105e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 10619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void bAttributeGetterCallback(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info) 107e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 108e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); 10919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::bAttributeGetter(info); 110e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 111e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 112e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 11319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void bAttributeSetter(v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) 114e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 115e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 11651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) V8TRYCATCH_VOID(RealClass*, cppValue, V8TestInterfaceImplementedAs::hasInstance(jsValue, info.GetIsolate(), worldType(info.GetIsolate())) ? V8TestInterfaceImplementedAs::toNative(v8::Handle<v8::Object>::Cast(jsValue)) : 0); 117bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) imp->setB(WTF::getPtr(cppValue)); 118e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 119e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 12019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void bAttributeSetterCallback(v8::Local<v8::String>, v8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) 121e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 122e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); 12319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::bAttributeSetter(jsValue, info); 124e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 125e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 126e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 12719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void func1Method(const v8::FunctionCallbackInfo<v8::Value>& info) 128e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 12919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) if (UNLIKELY(info.Length() < 1)) { 13019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) throwTypeError(ExceptionMessages::failedToExecute("func1", "TestInterfaceImplementedAs", ExceptionMessages::notEnoughArguments(1, info.Length())), info.GetIsolate()); 1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return; 1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 13319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 13419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, a, info[0]); 13519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) v8SetReturnValueString(info, imp->func1(a), info.GetIsolate()); 136e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 137e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 13819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void func1MethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) 139e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 140e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); 14119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::func1Method(info); 142e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 143e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 144e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 14519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void funcTestInterfaceImplementedAsParamMethod(const v8::FunctionCallbackInfo<v8::Value>& info) 146e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 14719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) if (UNLIKELY(info.Length() < 1)) { 14819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) throwTypeError(ExceptionMessages::failedToExecute("funcTestInterfaceImplementedAsParam", "TestInterfaceImplementedAs", ExceptionMessages::notEnoughArguments(1, info.Length())), info.GetIsolate()); 1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return; 1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 15119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClass* imp = V8TestInterfaceImplementedAs::toNative(info.Holder()); 15251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) V8TRYCATCH_VOID(RealClass*, orange, V8TestInterfaceImplementedAs::hasInstance(info[0], info.GetIsolate(), worldType(info.GetIsolate())) ? V8TestInterfaceImplementedAs::toNative(v8::Handle<v8::Object>::Cast(info[0])) : 0); 15319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) v8SetReturnValueString(info, imp->funcTestInterfaceImplementedAsParam(orange), info.GetIsolate()); 154e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 155e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 15619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)static void funcTestInterfaceImplementedAsParamMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) 157e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 158e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); 15919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) RealClassV8Internal::funcTestInterfaceImplementedAsParamMethod(info); 160e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); 161e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 162e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 163e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} // namespace RealClassV8Internal 164e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 165c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceImplementedAsAttributes[] = { 166c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) {"a", RealClassV8Internal::aAttributeGetterCallback, RealClassV8Internal::aAttributeSetterCallback, 0, 0, 0, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, 167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) {"b", RealClassV8Internal::bAttributeGetterCallback, RealClassV8Internal::bAttributeSetterCallback, 0, 0, 0, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, 168e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)}; 169e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 170c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceImplementedAsMethods[] = { 171e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) {"func1", RealClassV8Internal::func1MethodCallback, 0, 1}, 172e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)}; 173e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 17451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static v8::Handle<v8::FunctionTemplate> ConfigureV8TestInterfaceImplementedAsTemplate(v8::Handle<v8::FunctionTemplate> functionTemplate, v8::Isolate* isolate, WrapperWorldType currentWorldType) 175e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 17651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) functionTemplate->ReadOnlyPrototype(); 177e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 178e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) v8::Local<v8::Signature> defaultSignature; 17951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) defaultSignature = V8DOMConfiguration::installDOMClassTemplate(functionTemplate, "TestInterfaceImplementedAs", v8::Local<v8::FunctionTemplate>(), V8TestInterfaceImplementedAs::internalFieldCount, 180c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) V8TestInterfaceImplementedAsAttributes, WTF_ARRAY_LENGTH(V8TestInterfaceImplementedAsAttributes), 18151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 0, 0, 18219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) V8TestInterfaceImplementedAsMethods, WTF_ARRAY_LENGTH(V8TestInterfaceImplementedAsMethods), 18319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) isolate, currentWorldType); 184a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Local<v8::ObjectTemplate> ALLOW_UNUSED instanceTemplate = functionTemplate->InstanceTemplate(); 185a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Local<v8::ObjectTemplate> ALLOW_UNUSED prototypeTemplate = functionTemplate->PrototypeTemplate(); 186e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 187e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) // Custom Signature 'funcTestInterfaceImplementedAsParam' 188e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) const int funcTestInterfaceImplementedAsParamArgc = 1; 189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Handle<v8::FunctionTemplate> funcTestInterfaceImplementedAsParamArgv[funcTestInterfaceImplementedAsParamArgc] = { V8PerIsolateData::from(isolate)->rawDOMTemplate(&V8TestInterfaceImplementedAs::wrapperTypeInfo, currentWorldType) }; 190a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Handle<v8::Signature> funcTestInterfaceImplementedAsParamSignature = v8::Signature::New(isolate, functionTemplate, funcTestInterfaceImplementedAsParamArgc, funcTestInterfaceImplementedAsParamArgv); 191a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) prototypeTemplate->Set(v8::String::NewFromUtf8(isolate, "funcTestInterfaceImplementedAsParam", v8::String::kInternalizedString), v8::FunctionTemplate::New(isolate, RealClassV8Internal::funcTestInterfaceImplementedAsParamMethodCallback, v8Undefined(), funcTestInterfaceImplementedAsParamSignature, 1)); 192e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 193e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) // Custom toString template 194a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) functionTemplate->Set(v8::String::NewFromUtf8(isolate, "toString", v8::String::kInternalizedString), V8PerIsolateData::current()->toStringTemplate()); 19551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return functionTemplate; 196e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 197e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 198a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)v8::Handle<v8::FunctionTemplate> V8TestInterfaceImplementedAs::domTemplate(v8::Isolate* isolate, WrapperWorldType currentWorldType) 199e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 200e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) V8PerIsolateData* data = V8PerIsolateData::from(isolate); 201f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWorldType).find(&wrapperTypeInfo); 202e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) if (result != data->templateMap(currentWorldType).end()) 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return result->value.newLocal(isolate); 204e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 205e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); 206a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::EscapableHandleScope handleScope(isolate); 207a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Local<v8::FunctionTemplate> templ = 208a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ConfigureV8TestInterfaceImplementedAsTemplate(data->rawDOMTemplate(&wrapperTypeInfo, currentWorldType), isolate, currentWorldType); 209f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) data->templateMap(currentWorldType).add(&wrapperTypeInfo, UnsafePersistent<v8::FunctionTemplate>(isolate, templ)); 210a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return handleScope.Escape(templ); 211e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 212e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 21351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool V8TestInterfaceImplementedAs::hasInstance(v8::Handle<v8::Value> jsValue, v8::Isolate* isolate, WrapperWorldType currentWorldType) 214e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 215f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValue, currentWorldType); 216e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 217e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 21851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool V8TestInterfaceImplementedAs::hasInstanceInAnyWorld(v8::Handle<v8::Value> jsValue, v8::Isolate* isolate) 219e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 220f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValue, MainWorld) 221f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) || V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValue, IsolatedWorld) 222f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) || V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValue, WorkerWorld); 223e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 224e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 225e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)v8::Handle<v8::Object> V8TestInterfaceImplementedAs::createWrapper(PassRefPtr<RealClass> impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) 226e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 2271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(impl); 228e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) ASSERT(!DOMDataStore::containsWrapper<V8TestInterfaceImplementedAs>(impl.get(), isolate)); 2297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (ScriptWrappable::wrapperCanBeStoredInObject(impl.get())) { 2307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObject(impl.get()); 231f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // Might be a XXXConstructor::wrapperTypeInfo instead of an XXX::wrapperTypeInfo. These will both have 2327757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // the same object de-ref functions, though, so use that as the basis of the check. 233f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == wrapperTypeInfo.derefObjectFunction); 2347757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 2357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 236f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext, &wrapperTypeInfo, toInternalPointer(impl.get()), isolate); 237e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) if (UNLIKELY(wrapper.IsEmpty())) 238e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) return wrapper; 239c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 240bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) installPerContextEnabledProperties(wrapper, impl.get(), isolate); 241f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) V8DOMWrapper::associateObjectWithWrapper<V8TestInterfaceImplementedAs>(impl, &wrapperTypeInfo, wrapper, isolate, WrapperConfiguration::Independent); 242e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) return wrapper; 243e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 244c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 245e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)void V8TestInterfaceImplementedAs::derefObject(void* object) 246e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 247e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch fromInternalPointer(object)->deref(); 248e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 249e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 25051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)template<> 25151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)v8::Handle<v8::Value> toV8NoInline(RealClass* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) 25251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 25351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return toV8(impl, creationContext, isolate); 25451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 25551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 256e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} // namespace WebCore 257