15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebBindings.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "V8Element.h" 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "V8Range.h" 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "WebArrayBufferView.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebElement.h" 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebRange.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/NPV8Object.h" // for PrivateIdentifier 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptController.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/V8DOMWrapper.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/V8NPUtils.h" 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "bindings/v8/custom/V8ArrayBufferCustom.h" 44e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "bindings/v8/custom/V8ArrayBufferViewCustom.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/npruntime_impl.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/npruntime_priv.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Range.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/DOMWindow.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Frame.h" 500019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "public/platform/WebArrayBuffer.h" 51591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/ArrayBufferView.h" 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebKit { 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::construct(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_Construct(npp, object, args, argCount, result); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::createObject(NPP npp, NPClass* npClass) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_CreateObject(npp, npClass); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::enumerate(NPP npp, NPObject* object, NPIdentifier** identifier, uint32_t* identifierCount) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_Enumerate(npp, object, identifier, identifierCount); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::evaluate(NPP npp, NPObject* object, NPString* script, NPVariant* result) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_Evaluate(npp, object, script, result); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::evaluateHelper(NPP npp, bool popupsAllowed, NPObject* object, NPString* script, NPVariant* result) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_EvaluateHelper(npp, popupsAllowed, object, script, result); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPIdentifier WebBindings::getIntIdentifier(int32_t number) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_GetIntIdentifier(number); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getProperty(NPP npp, NPObject* object, NPIdentifier property, NPVariant* result) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_GetProperty(npp, object, property, result); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPIdentifier WebBindings::getStringIdentifier(const NPUTF8* string) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_GetStringIdentifier(string); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::getStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _NPN_GetStringIdentifiers(names, nameCount, identifiers); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::hasMethod(NPP npp, NPObject* object, NPIdentifier method) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_HasMethod(npp, object, method); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::hasProperty(NPP npp, NPObject* object, NPIdentifier property) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_HasProperty(npp, object, property); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::identifierIsString(NPIdentifier identifier) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_IdentifierIsString(identifier); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t WebBindings::intFromIdentifier(NPIdentifier identifier) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_IntFromIdentifier(identifier); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::initializeVariantWithStringCopy(NPVariant* variant, const NPString* value) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _NPN_InitializeVariantWithStringCopy(variant, value); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::invoke(NPP npp, NPObject* object, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_Invoke(npp, object, method, args, argCount, result); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::invokeDefault(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_InvokeDefault(npp, object, args, argCount, result); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::releaseObject(NPObject* object) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_ReleaseObject(object); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::releaseVariantValue(NPVariant* variant) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _NPN_ReleaseVariantValue(variant); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::removeProperty(NPP npp, NPObject* object, NPIdentifier identifier) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_RemoveProperty(npp, object, identifier); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::retainObject(NPObject* object) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_RetainObject(object); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::setException(NPObject* object, const NPUTF8* message) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _NPN_SetException(object, message); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::setProperty(NPP npp, NPObject* object, NPIdentifier identifier, const NPVariant* value) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_SetProperty(npp, object, identifier, value); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::registerObjectOwner(NPP) 16893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 16993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 17093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 171e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::unregisterObjectOwner(NPP) 17293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 17393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 17493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 175e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochNPP WebBindings::getObjectOwner(NPObject*) 176591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{ 177e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return 0; 178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 179591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 180e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::unregisterObject(NPObject* object) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 182e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch _NPN_UnregisterObject(object); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPUTF8* WebBindings::utf8FromIdentifier(NPIdentifier identifier) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return _NPN_UTF8FromIdentifier(identifier); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::extractIdentifierData(const NPIdentifier& identifier, const NPUTF8*& string, int32_t& number, bool& isString) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrivateIdentifier* data = static_cast<PrivateIdentifier*>(identifier); 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!data) { 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isString = false; 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) number = 0; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isString = data->isString; 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isString) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) string = data->value.string; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) number = data->value.number; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getRangeImpl(NPObject* object, WebRange* webRange, v8::Isolate* isolate) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 208591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!object) 209591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 211591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8NPObject = npObjectToV8NPObject(object); 212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8NPObject) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::HandleScope handleScope(isolate); 2165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object); 217591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (v8Object.IsEmpty()) 218591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!V8Range::info.equals(toWrapperTypeInfo(v8Object))) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Range* native = V8Range::HasInstanceInAnyWorld(v8Object, isolate) ? V8Range::toNative(v8Object) : 0; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!native) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *webRange = WebRange(native); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getNodeImpl(NPObject* object, WebNode* webNode, v8::Isolate* isolate) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 232591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!object) 233591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 234591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 235591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8NPObject = npObjectToV8NPObject(object); 236591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8NPObject) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::HandleScope handleScope(isolate); 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object); 241591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (v8Object.IsEmpty()) 242591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Node* native = V8Node::HasInstanceInAnyWorld(v8Object, isolate) ? V8Node::toNative(v8Object) : 0; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!native) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *webNode = WebNode(native); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getElementImpl(NPObject* object, WebElement* webElement, v8::Isolate* isolate) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 253591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!object) 254591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 255591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 256591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8NPObject = npObjectToV8NPObject(object); 257591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8NPObject) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::HandleScope handleScope(isolate); 2615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object); 262591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (v8Object.IsEmpty()) 263591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Element* native = V8Element::HasInstanceInAnyWorld(v8Object, isolate) ? V8Element::toNative(v8Object) : 0; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!native) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *webElement = WebElement(native); 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getArrayBufferImpl(NPObject* object, WebArrayBuffer* arrayBuffer, v8::Isolate* isolate) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 274591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!object) 275591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 276591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 277591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8NPObject = npObjectToV8NPObject(object); 278591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8NPObject) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::HandleScope handleScope(isolate); 2825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object); 283591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (v8Object.IsEmpty()) 284591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ArrayBuffer* native = V8ArrayBuffer::HasInstanceInAnyWorld(v8Object, isolate) ? V8ArrayBuffer::toNative(v8Object) : 0; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!native) 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *arrayBuffer = WebArrayBuffer(native); 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getArrayBufferViewImpl(NPObject* object, WebArrayBufferView* arrayBufferView, v8::Isolate* isolate) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 295591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!object) 296591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 297591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 298591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8NPObject = npObjectToV8NPObject(object); 299591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8NPObject) 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::HandleScope handleScope(isolate); 3035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object); 304591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (v8Object.IsEmpty()) 305591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return false; 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ArrayBufferView* native = V8ArrayBufferView::HasInstanceInAnyWorld(v8Object, isolate) ? V8ArrayBufferView::toNative(v8Object) : 0; 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!native) 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *arrayBufferView = WebArrayBufferView(native); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static NPObject* makeIntArrayImpl(const WebVector<int>& data) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::HandleScope handleScope; 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::Handle<v8::Array> result = v8::Array::New(data.size()); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < data.size(); ++i) 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result->Set(i, v8::Number::New(data[i])); 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWindow* window = toDOMWindow(v8::Context::GetCurrent()); 322e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return npCreateV8ScriptObject(0, result, window); 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static NPObject* makeStringArrayImpl(const WebVector<WebString>& data) 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 32793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) v8::Isolate* isolate = v8::Isolate::GetCurrent(); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::HandleScope handleScope; 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::Handle<v8::Array> result = v8::Array::New(data.size()); 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < data.size(); ++i) 33193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) result->Set(i, v8String(data[i], isolate)); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWindow* window = toDOMWindow(v8::Context::GetCurrent()); 334e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return npCreateV8ScriptObject(0, result, window); 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getRange(NPObject* range, WebRange* webRange) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return getRangeImpl(range, webRange, v8::Isolate::GetCurrent()); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getArrayBuffer(NPObject* arrayBuffer, WebArrayBuffer* webArrayBuffer) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return getArrayBufferImpl(arrayBuffer, webArrayBuffer, v8::Isolate::GetCurrent()); 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getArrayBufferView(NPObject* arrayBufferView, WebArrayBufferView* webArrayBufferView) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return getArrayBufferViewImpl(arrayBufferView, webArrayBufferView, v8::Isolate::GetCurrent()); 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getNode(NPObject* node, WebNode* webNode) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return getNodeImpl(node, webNode, v8::Isolate::GetCurrent()); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getElement(NPObject* element, WebElement* webElement) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return getElementImpl(element, webElement, v8::Isolate::GetCurrent()); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::makeIntArray(const WebVector<int>& data) 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return makeIntArrayImpl(data); 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::makeStringArray(const WebVector<WebString>& data) 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return makeStringArrayImpl(data); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::pushExceptionHandler(handler, data); 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::popExceptionHandler() 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::popExceptionHandler(); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 382e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::toNPVariant(v8::Local<v8::Value> object, NPObject* root, NPVariant* result) 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 384e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch WebCore::convertV8ObjectToNPVariant(object, root, result); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)v8::Handle<v8::Value> WebBindings::toV8Value(const NPVariant* variant) 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) v8::Isolate* isolate = v8::Isolate::GetCurrent(); 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (variant->type == NPVariantType_Object) { 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NPObject* object = NPVARIANT_TO_OBJECT(*variant); 392591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch V8NPObject* v8Object = npObjectToV8NPObject(object); 393591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!v8Object) 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v8::Undefined(); 395e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return convertNPVariantToV8Object(variant, v8Object->rootObject->frame()->script()->windowScriptNPObject(), isolate); 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 397e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Safe to pass 0 since we have checked the script object class to make sure the 398e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // argument is a primitive v8 type. 399e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return convertNPVariantToV8Object(variant, 0, isolate); 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebKit 403