15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* Copyright (C) 2009 Google Inc. All rights reserved. 3e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)* Copyright (C) 2014 Opera Software ASA. All rights reserved. 402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch* 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* modification, are permitted provided that the following conditions are 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* met: 802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch* 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* * Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* * Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* copyright notice, this list of conditions and the following disclaimer 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* in the documentation and/or other materials provided with the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* * Neither the name of Google Inc. nor the names of its 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* contributors may be used to endorse or promote products derived from 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* this software without specific prior written permission. 1802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch* 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/ 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "bindings/core/v8/NPV8Object.h" 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/SharedPersistent.h" 36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8Binding.h" 37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "bindings/core/v8/V8HTMLAppletElement.h" 38d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "bindings/core/v8/V8HTMLEmbedElement.h" 39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "bindings/core/v8/V8HTMLObjectElement.h" 40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8NPObject.h" 4151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/frame/UseCounter.h" 42e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "wtf/OwnPtr.h" 43e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "wtf/PassOwnPtr.h" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)namespace { 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)template <typename ElementType, typename PropertyType> 50e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void getScriptableObjectProperty(PropertyType property, const v8::PropertyCallbackInfo<v8::Value>& info) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); 5343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) RefPtr<SharedPersistent<v8::Object> > wrapper = impl->pluginWrapper(); 541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!wrapper) 55521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); 58e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (instance.IsEmpty()) 59521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 61e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) TONATIVE_VOID(v8::Local<v8::Value>, value, instance->Get(property)); 62e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 63e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // We quit here to allow the binding code to look up general HTMLObjectElement properties 64e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // if they are not overriden by plugin. 65e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (value->IsUndefined()) 66e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 67e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8SetReturnValue(info, value); 69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 70e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 71e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)namespace { 72e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void callNpObjectSetter(v8::Local<v8::Object> self, v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 74e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) npObjectSetNamedProperty(self, name, value, info); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void callNpObjectSetter(v8::Local<v8::Object> self, uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) npObjectSetIndexedProperty(self, index, value, info); 80e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 81e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 82e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 83e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)template <typename ElementType, typename PropertyType> 84e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void setScriptableObjectProperty(PropertyType property, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 85e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); 8743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) RefPtr<SharedPersistent<v8::Object> > wrapper = impl->pluginWrapper(); 881e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!wrapper) 89521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); 92e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (instance.IsEmpty()) 93e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 94e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 95e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // We need to directly call setter on NPObject to be able to detect 96e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // situation where NPObject notifies it does not possess the property 97e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // to be able to lookup standard DOM property. 98e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // This information is lost when retrieving it through v8::Object. 99e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (isWrappedNPObject(instance)) { 100e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) callNpObjectSetter(instance, property, value, info); 101521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 102e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1032fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) 1042fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // FIXME: The gTalk pepper plugin is the only plugin to make use of 1052fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // SetProperty and that is being deprecated. This can be removed as soon as 1062fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // it goes away. 1072fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // Call SetProperty on a pepper plugin's scriptable object. Note that we 1082fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // never set the return value here which would indicate that the plugin has 1092fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // intercepted the SetProperty call, which means that the property on the 1102fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // DOM element will also be set. For plugin's that don't intercept the call 1112fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // (all except gTalk) this makes no difference at all. For gTalk the fact 1122fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) // that the property on the DOM element also gets set is inconsequential. 1132fb29a03d7c71253319f61b77edc6c1e3a8fc8e2Torne (Richard Coles) instance->Set(property, value); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 115e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} // namespace 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 117591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLAppletElement::namedPropertyGetterCustom(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 119e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLAppletElement>(name, info); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLEmbedElement::namedPropertyGetterCustom(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 124e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLEmbedElement>(name, info); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 127591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLObjectElement::namedPropertyGetterCustom(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 129e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLObjectElement>(name, info); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 132591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLAppletElement::namedPropertySetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 134e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLAppletElement>(name, value, info); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 137591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLEmbedElement::namedPropertySetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 139e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLEmbedElement>(name, value, info); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid V8HTMLObjectElement::namedPropertySetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 144e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLObjectElement>(name, value, info); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 147e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLAppletElement::indexedPropertyGetterCustom(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 149e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLAppletElement>(index, info); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 152e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLEmbedElement::indexedPropertyGetterCustom(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 154e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLEmbedElement>(index, info); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 157e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLObjectElement::indexedPropertyGetterCustom(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 159e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) getScriptableObjectProperty<V8HTMLObjectElement>(index, info); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 162e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLAppletElement::indexedPropertySetterCustom(uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 164e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLAppletElement>(index, value, info); 165e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLEmbedElement::indexedPropertySetterCustom(uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 168e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 169e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLEmbedElement>(index, value, info); 170e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 172e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLObjectElement::indexedPropertySetterCustom(uint32_t index, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) 173e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 174e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setScriptableObjectProperty<V8HTMLObjectElement>(index, value, info); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)namespace { 178e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 179e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)template <typename ElementType> 180e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void invokeOnScriptableObject(const v8::FunctionCallbackInfo<v8::Value>& info) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); 18343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) RefPtr<SharedPersistent<v8::Object> > wrapper = impl->pluginWrapper(); 1841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!wrapper) 185521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 187e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); 188e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (instance.IsEmpty()) 189521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 191e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WTF::OwnPtr<v8::Handle<v8::Value>[] > arguments = adoptArrayPtr(new v8::Handle<v8::Value>[info.Length()]); 192e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) for (int i = 0; i < info.Length(); ++i) 193e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) arguments[i] = info[i]; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 195e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) TONATIVE_VOID(v8::Local<v8::Value>, retVal, instance->CallAsFunction(info.This(), info.Length(), arguments.get())); 196e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) v8SetReturnValue(info, retVal); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 199e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} // namespace 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 201e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLAppletElement::legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>& info) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 203e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) invokeOnScriptableObject<V8HTMLAppletElement>(info); 2047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci UseCounter::count(V8HTMLAppletElement::toImpl(info.Holder())->document(), UseCounter::HTMLAppletElementLegacyCall); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 207e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLEmbedElement::legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>& info) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 209e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) invokeOnScriptableObject<V8HTMLEmbedElement>(info); 2107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci UseCounter::count(V8HTMLEmbedElement::toImpl(info.Holder())->document(), UseCounter::HTMLEmbedElementLegacyCall); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 213e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void V8HTMLObjectElement::legacyCallCustom(const v8::FunctionCallbackInfo<v8::Value>& info) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 215e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) invokeOnScriptableObject<V8HTMLObjectElement>(info); 2167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci UseCounter::count(V8HTMLObjectElement::toImpl(info.Holder())->document(), UseCounter::HTMLObjectElementLegacyCall); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 219c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 220