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"
32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebBindings.h"
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/NPV8Object.h"
35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h"
36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8DOMWrapper.h"
37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8Element.h"
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8NPObject.h"
39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8NPUtils.h"
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8Range.h"
41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/custom/V8ArrayBufferCustom.h"
42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/custom/V8ArrayBufferViewCustom.h"
43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/npruntime_impl.h"
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/npruntime_priv.h"
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Range.h"
4676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/LocalDOMWindow.h"
47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h"
480019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "public/platform/WebArrayBuffer.h"
49f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebArrayBufferView.h"
50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebElement.h"
51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebRange.h"
52591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/ArrayBufferView.h"
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink {
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::construct(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_Construct(npp, object, args, argCount, result);
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::createObject(NPP npp, NPClass* npClass)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_CreateObject(npp, npClass);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::enumerate(NPP npp, NPObject* object, NPIdentifier** identifier, uint32_t* identifierCount)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_Enumerate(npp, object, identifier, identifierCount);
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::evaluate(NPP npp, NPObject* object, NPString* script, NPVariant* result)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_Evaluate(npp, object, script, result);
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::evaluateHelper(NPP npp, bool popupsAllowed, NPObject* object, NPString* script, NPVariant* result)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_EvaluateHelper(npp, popupsAllowed, object, script, result);
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPIdentifier WebBindings::getIntIdentifier(int32_t number)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_GetIntIdentifier(number);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getProperty(NPP npp, NPObject* object, NPIdentifier property, NPVariant* result)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_GetProperty(npp, object, property, result);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPIdentifier WebBindings::getStringIdentifier(const NPUTF8* string)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_GetStringIdentifier(string);
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::getStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _NPN_GetStringIdentifiers(names, nameCount, identifiers);
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::hasMethod(NPP npp, NPObject* object, NPIdentifier method)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_HasMethod(npp, object, method);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::hasProperty(NPP npp, NPObject* object, NPIdentifier property)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_HasProperty(npp, object, property);
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::identifierIsString(NPIdentifier identifier)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_IdentifierIsString(identifier);
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int32_t WebBindings::intFromIdentifier(NPIdentifier identifier)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_IntFromIdentifier(identifier);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::initializeVariantWithStringCopy(NPVariant* variant, const NPString* value)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _NPN_InitializeVariantWithStringCopy(variant, value);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::invoke(NPP npp, NPObject* object, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result)
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_Invoke(npp, object, method, args, argCount, result);
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::invokeDefault(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_InvokeDefault(npp, object, args, argCount, result);
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::releaseObject(NPObject* object)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_ReleaseObject(object);
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::releaseVariantValue(NPVariant* variant)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _NPN_ReleaseVariantValue(variant);
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::removeProperty(NPP npp, NPObject* object, NPIdentifier identifier)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_RemoveProperty(npp, object, identifier);
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::retainObject(NPObject* object)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_RetainObject(object);
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::setException(NPObject* object, const NPUTF8* message)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _NPN_SetException(object, message);
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::setProperty(NPP npp, NPObject* object, NPIdentifier identifier, const NPVariant* value)
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_SetProperty(npp, object, identifier, value);
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
166e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::registerObjectOwner(NPP)
16793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
16893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
16993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
170e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::unregisterObjectOwner(NPP)
17193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
17293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
17393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
174e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochNPP WebBindings::getObjectOwner(NPObject*)
175591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
176e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return 0;
177591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
179e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::unregisterObject(NPObject* object)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
181e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    _NPN_UnregisterObject(object);
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
184d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebBindings::dropV8WrapperForObject(NPObject* object)
185d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
1869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    forgetV8ObjectForNPObject(object);
187d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
188d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPUTF8* WebBindings::utf8FromIdentifier(NPIdentifier identifier)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return _NPN_UTF8FromIdentifier(identifier);
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::extractIdentifierData(const NPIdentifier& identifier, const NPUTF8*& string, int32_t& number, bool& isString)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PrivateIdentifier* data = static_cast<PrivateIdentifier*>(identifier);
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!data) {
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        isString = false;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        number = 0;
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isString = data->isString;
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isString)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        string = data->value.string;
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        number = data->value.number;
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getRangeImpl(NPObject* object, WebRange* webRange, v8::Isolate* isolate)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!object)
213591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
214591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
215591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    V8NPObject* v8NPObject = npObjectToV8NPObject(object);
216591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!v8NPObject)
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::HandleScope handleScope(isolate);
2205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object);
221591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (v8Object.IsEmpty())
222591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
223f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    if (!V8Range::wrapperTypeInfo.equals(toWrapperTypeInfo(v8Object)))
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Range* native = V8Range::hasInstance(v8Object, isolate) ? V8Range::toImpl(v8Object) : 0;
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!native)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *webRange = WebRange(native);
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getNodeImpl(NPObject* object, WebNode* webNode, v8::Isolate* isolate)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
236591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!object)
237591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
238591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
239591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    V8NPObject* v8NPObject = npObjectToV8NPObject(object);
240591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!v8NPObject)
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::HandleScope handleScope(isolate);
2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object);
245591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (v8Object.IsEmpty())
246591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
2477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Node* native = V8Node::hasInstance(v8Object, isolate) ? V8Node::toImpl(v8Object) : 0;
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!native)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *webNode = WebNode(native);
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getElementImpl(NPObject* object, WebElement* webElement, v8::Isolate* isolate)
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
257591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!object)
258591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
259591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
260591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    V8NPObject* v8NPObject = npObjectToV8NPObject(object);
261591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!v8NPObject)
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::HandleScope handleScope(isolate);
2655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object);
266591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (v8Object.IsEmpty())
267591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Element* native = V8Element::hasInstance(v8Object, isolate) ? V8Element::toImpl(v8Object) : 0;
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!native)
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *webElement = WebElement(native);
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getArrayBufferImpl(NPObject* object, WebArrayBuffer* arrayBuffer, v8::Isolate* isolate)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
278591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!object)
279591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
280591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
281591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    V8NPObject* v8NPObject = npObjectToV8NPObject(object);
282591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!v8NPObject)
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::HandleScope handleScope(isolate);
2865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object);
287591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (v8Object.IsEmpty())
288591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
2897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ArrayBuffer* native = V8ArrayBuffer::hasInstance(v8Object, isolate) ? V8ArrayBuffer::toImpl(v8Object) : 0;
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!native)
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *arrayBuffer = WebArrayBuffer(native);
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)static bool getArrayBufferViewImpl(NPObject* object, WebArrayBufferView* arrayBufferView, v8::Isolate* isolate)
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
299591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!object)
300591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
301591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
302591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    V8NPObject* v8NPObject = npObjectToV8NPObject(object);
303591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!v8NPObject)
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::HandleScope handleScope(isolate);
3075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    v8::Handle<v8::Object> v8Object = v8::Local<v8::Object>::New(isolate, v8NPObject->v8Object);
308591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (v8Object.IsEmpty())
309591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
3107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ArrayBufferView* native = V8ArrayBufferView::hasInstance(v8Object, isolate) ? V8ArrayBufferView::toImpl(v8Object) : 0;
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!native)
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *arrayBufferView = WebArrayBufferView(native);
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3188abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)static NPObject* makeIntArrayImpl(const WebVector<int>& data, v8::Isolate* isolate)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3208abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    v8::HandleScope handleScope(isolate);
321a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    v8::Handle<v8::Array> result = v8::Array::New(isolate, data.size());
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t i = 0; i < data.size(); ++i)
3238abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        result->Set(i, v8::Number::New(isolate, data[i]));
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
32576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    LocalDOMWindow* window = currentDOMWindow(isolate);
3269bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    return npCreateV8ScriptObject(0, result, window, isolate);
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3298abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)static NPObject* makeStringArrayImpl(const WebVector<WebString>& data, v8::Isolate* isolate)
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    v8::HandleScope handleScope(isolate);
332a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    v8::Handle<v8::Array> result = v8::Array::New(isolate, data.size());
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t i = 0; i < data.size(); ++i)
334a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        result->Set(i, v8String(isolate, data[i]));
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
33676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    LocalDOMWindow* window = currentDOMWindow(isolate);
3379bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    return npCreateV8ScriptObject(0, result, window, isolate);
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getRange(NPObject* range, WebRange* webRange)
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return getRangeImpl(range, webRange, v8::Isolate::GetCurrent());
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getArrayBuffer(NPObject* arrayBuffer, WebArrayBuffer* webArrayBuffer)
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return getArrayBufferImpl(arrayBuffer, webArrayBuffer, v8::Isolate::GetCurrent());
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getArrayBufferView(NPObject* arrayBufferView, WebArrayBufferView* webArrayBufferView)
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return getArrayBufferViewImpl(arrayBufferView, webArrayBufferView, v8::Isolate::GetCurrent());
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getNode(NPObject* node, WebNode* webNode)
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return getNodeImpl(node, webNode, v8::Isolate::GetCurrent());
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebBindings::getElement(NPObject* element, WebElement* webElement)
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return getElementImpl(element, webElement, v8::Isolate::GetCurrent());
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::makeIntArray(const WebVector<int>& data)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    return makeIntArrayImpl(data, v8::Isolate::GetCurrent());
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPObject* WebBindings::makeStringArray(const WebVector<WebString>& data)
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3728abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    return makeStringArrayImpl(data, v8::Isolate::GetCurrent());
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data)
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
377c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    blink::pushExceptionHandler(handler, data);
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebBindings::popExceptionHandler()
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
382c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    blink::popExceptionHandler();
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid WebBindings::toNPVariant(v8::Local<v8::Value> object, NPObject* root, NPVariant* result)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3879e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    convertV8ObjectToNPVariant(object, root, result, v8::Isolate::GetCurrent());
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)v8::Handle<v8::Value> WebBindings::toV8Value(const NPVariant* variant)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    v8::Isolate* isolate = v8::Isolate::GetCurrent();
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (variant->type == NPVariantType_Object) {
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NPObject* object = NPVARIANT_TO_OBJECT(*variant);
395591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        V8NPObject* v8Object = npObjectToV8NPObject(object);
396591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (!v8Object)
3979bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)            return v8::Undefined(isolate);
398f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return convertNPVariantToV8Object(variant, v8Object->rootObject->frame()->script().windowScriptNPObject(), isolate);
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
400e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // Safe to pass 0 since we have checked the script object class to make sure the
401e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // argument is a primitive v8 type.
402e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return convertNPVariantToV8Object(variant, 0, isolate);
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
40551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink
406