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