1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h" 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebBindings.h" 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "npruntime_impl.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "npruntime_priv.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(V8) 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "NPV8Object.h" // for PrivateIdentifier 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Range.h" 40d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8BindingState.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "V8DOMWrapper.h" 425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "V8Element.h" 43e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "V8NPUtils.h" 442bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "V8Node.h" 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "V8Proxy.h" 46d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8Range.h" 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#elif USE(JSC) 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "bridge/c/c_utility.h" 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "WebElement.h" 516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebRange.h" 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(JAVASCRIPTCORE_BINDINGS) 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing JSC::Bindings::PrivateIdentifier; 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore; 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 612bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::construct(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 632bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_Construct(npp, object, args, argCount, result); 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 66643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockNPObject* WebBindings::createObject(NPP npp, NPClass* npClass) 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_CreateObject(npp, npClass); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 712bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::enumerate(NPP npp, NPObject* object, NPIdentifier** identifier, uint32_t* identifierCount) 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 732bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_Enumerate(npp, object, identifier, identifierCount); 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 762bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::evaluate(NPP npp, NPObject* object, NPString* script, NPVariant* result) 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 782bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_Evaluate(npp, object, script, result); 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 812bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::evaluateHelper(NPP npp, bool popupsAllowed, NPObject* object, NPString* script, NPVariant* result) 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 832bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_EvaluateHelper(npp, popupsAllowed, object, script, result); 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 86643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockNPIdentifier WebBindings::getIntIdentifier(int32_t number) 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_GetIntIdentifier(number); 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 912bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::getProperty(NPP npp, NPObject* object, NPIdentifier property, NPVariant* result) 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 932bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_GetProperty(npp, object, property, result); 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 96643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockNPIdentifier WebBindings::getStringIdentifier(const NPUTF8* string) 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_GetStringIdentifier(string); 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebBindings::getStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier* identifiers) 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _NPN_GetStringIdentifiers(names, nameCount, identifiers); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1062bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::hasMethod(NPP npp, NPObject* object, NPIdentifier method) 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_HasMethod(npp, object, method); 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1112bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::hasProperty(NPP npp, NPObject* object, NPIdentifier property) 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1132bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_HasProperty(npp, object, property); 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebBindings::identifierIsString(NPIdentifier identifier) 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_IdentifierIsString(identifier); 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockint32_t WebBindings::intFromIdentifier(NPIdentifier identifier) 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_IntFromIdentifier(identifier); 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebBindings::initializeVariantWithStringCopy(NPVariant* variant, const NPString* value) 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(V8) 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _NPN_InitializeVariantWithStringCopy(variant, value); 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block NPN_InitializeVariantWithStringCopy(variant, value); 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1352bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::invoke(NPP npp, NPObject* object, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result) 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1372bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_Invoke(npp, object, method, args, argCount, result); 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1402bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::invokeDefault(NPP npp, NPObject* object, const NPVariant* args, uint32_t argCount, NPVariant* result) 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1422bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_InvokeDefault(npp, object, args, argCount, result); 143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1452bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebBindings::releaseObject(NPObject* object) 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1472bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_ReleaseObject(object); 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 150643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebBindings::releaseVariantValue(NPVariant* variant) 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _NPN_ReleaseVariantValue(variant); 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1552bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::removeProperty(NPP npp, NPObject* object, NPIdentifier identifier) 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_RemoveProperty(npp, object, identifier); 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1602bde8e466a4451c7319e3a072d118917957d6554Steve BlockNPObject* WebBindings::retainObject(NPObject* object) 161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_RetainObject(object); 163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1652bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebBindings::setException(NPObject* object, const NPUTF8* message) 166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block _NPN_SetException(object, message); 168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1702bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::setProperty(NPP npp, NPObject* object, NPIdentifier identifier, const NPVariant* value) 171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block return _NPN_SetProperty(npp, object, identifier, value); 173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1752bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebBindings::unregisterObject(NPObject* object) 176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(V8) 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block _NPN_UnregisterObject(object); 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 182643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockNPUTF8* WebBindings::utf8FromIdentifier(NPIdentifier identifier) 183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _NPN_UTF8FromIdentifier(identifier); 185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 187643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebBindings::extractIdentifierData(const NPIdentifier& identifier, const NPUTF8*& string, int32_t& number, bool& isString) 188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1892bde8e466a4451c7319e3a072d118917957d6554Steve Block PrivateIdentifier* data = static_cast<PrivateIdentifier*>(identifier); 1902bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!data) { 191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block isString = false; 192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block number = 0; 193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1962bde8e466a4451c7319e3a072d118917957d6554Steve Block isString = data->isString; 197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (isString) 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block string = data->value.string; 199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 2002bde8e466a4451c7319e3a072d118917957d6554Steve Block number = data->value.number; 201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(V8) 204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2052bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic bool getRangeImpl(NPObject* object, WebRange* webRange) 206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 2072bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!object || (object->_class != npScriptObjectClass)) 208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2102bde8e466a4451c7319e3a072d118917957d6554Steve Block V8NPObject* v8NPObject = reinterpret_cast<V8NPObject*>(object); 2112bde8e466a4451c7319e3a072d118917957d6554Steve Block v8::Handle<v8::Object> v8Object(v8NPObject->v8Object); 2122bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!V8Range::info.equals(V8DOMWrapper::domWrapperType(v8Object))) 213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block Range* native = V8Range::toNative(v8Object); 216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!native) 217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2192bde8e466a4451c7319e3a072d118917957d6554Steve Block *webRange = WebRange(native); 220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return true; 221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2232bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic bool getElementImpl(NPObject* object, WebElement* webElement) 2245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 2252bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!object || (object->_class != npScriptObjectClass)) 2265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return false; 2275ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 2282bde8e466a4451c7319e3a072d118917957d6554Steve Block V8NPObject* v8NPObject = reinterpret_cast<V8NPObject*>(object); 2295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen v8::Handle<v8::Object> v8Object(v8NPObject->v8Object); 2305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Element* native = V8Element::toNative(v8Object); 2315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (!native) 2325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return false; 2335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 2345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *webElement = WebElement(native); 2355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return true; 2365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 2375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 238bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenstatic NPObject* makeIntArrayImpl(const WebVector<int>& data) 239bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 240bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen v8::HandleScope handleScope; 241bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen v8::Handle<v8::Array> result = v8::Array::New(data.size()); 2422bde8e466a4451c7319e3a072d118917957d6554Steve Block for (size_t i = 0; i < data.size(); ++i) 243bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen result->Set(i, v8::Number::New(data[i])); 244bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 245bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); 246bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return npCreateV8ScriptObject(0, result, window); 247bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 248bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 2496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerstatic NPObject* makeStringArrayImpl(const WebVector<WebString>& data) 2506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 2516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner v8::HandleScope handleScope; 2526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner v8::Handle<v8::Array> result = v8::Array::New(data.size()); 2536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner for (size_t i = 0; i < data.size(); ++i) 2544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang result->Set(i, data[i].data() ? v8::String::New(reinterpret_cast<const uint16_t*>((data[i].data())), data[i].length()) : v8::String::New("")); 2556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); 2576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return npCreateV8ScriptObject(0, result, window); 2586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 2596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2602bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic NPObject* makeNodeImpl(WebNode data) 261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 2622bde8e466a4451c7319e3a072d118917957d6554Steve Block v8::HandleScope handleScope; 2632bde8e466a4451c7319e3a072d118917957d6554Steve Block if (data.isNull()) 2642bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 2652bde8e466a4451c7319e3a072d118917957d6554Steve Block v8::Handle<v8::Object> result = V8Node::wrap(data.unwrap<Node>()); 2662bde8e466a4451c7319e3a072d118917957d6554Steve Block WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); 2672bde8e466a4451c7319e3a072d118917957d6554Steve Block return npCreateV8ScriptObject(0, result, window); 268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2702bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2722bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebBindings::getRange(NPObject* range, WebRange* webRange) 273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(V8) 2752bde8e466a4451c7319e3a072d118917957d6554Steve Block return getRangeImpl(range, webRange); 276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else 277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Not supported on other ports (JSC, etc). 278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2825ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenbool WebBindings::getElement(NPObject* element, WebElement* webElement) 2835ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 2845ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if USE(V8) 2855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return getElementImpl(element, webElement); 2865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#else 2875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // Not supported on other ports (JSC, etc.). 2885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return false; 2895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 2905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 2915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 2922bde8e466a4451c7319e3a072d118917957d6554Steve BlockNPObject* WebBindings::makeIntArray(const WebVector<int>& data) 293bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 294bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if USE(V8) 295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return makeIntArrayImpl(data); 296bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#else 297bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Not supported on other ports (JSC, etc.). 298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return 0; 299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif 300bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 301bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 3026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerNPObject* WebBindings::makeStringArray(const WebVector<WebString>& data) 3036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 3046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if USE(V8) 3056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return makeStringArrayImpl(data); 3066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#else 3076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Not supported on other ports (JSC, etc.). 3086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return 0; 3096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif 3106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 3116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 3122bde8e466a4451c7319e3a072d118917957d6554Steve BlockNPObject* WebBindings::makeNode(const WebNode& data) 3132bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 3142bde8e466a4451c7319e3a072d118917957d6554Steve Block#if USE(V8) 3152bde8e466a4451c7319e3a072d118917957d6554Steve Block return makeNodeImpl(data); 3162bde8e466a4451c7319e3a072d118917957d6554Steve Block#else 3172bde8e466a4451c7319e3a072d118917957d6554Steve Block // Not supported on other ports (JSC, etc.). 3182bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 3192bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 3202bde8e466a4451c7319e3a072d118917957d6554Steve Block} 3212bde8e466a4451c7319e3a072d118917957d6554Steve Block 322e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data) 323e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 324e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WebCore::pushExceptionHandler(handler, data); 325e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 326e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 327e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WebBindings::popExceptionHandler() 328e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 329e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WebCore::popExceptionHandler(); 330e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 331e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 332643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 333