| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2014 Opera Software ASA. All rights reserved. | 3 * Copyright (C) 2014 Opera Software ASA. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 { | 46 { |
| 47 HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); | 47 HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); |
| 48 RefPtr<SharedPersistent<v8::Object>> wrapper = impl->pluginWrapper(); | 48 RefPtr<SharedPersistent<v8::Object>> wrapper = impl->pluginWrapper(); |
| 49 if (!wrapper) | 49 if (!wrapper) |
| 50 return; | 50 return; |
| 51 | 51 |
| 52 v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); | 52 v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); |
| 53 if (instance.IsEmpty()) | 53 if (instance.IsEmpty()) |
| 54 return; | 54 return; |
| 55 | 55 |
| 56 if (!v8CallBoolean(instance->HasOwnProperty(info.GetIsolate()->GetCurrentCon
text(), property))) |
| 57 return; |
| 58 |
| 56 v8::Local<v8::Value> value; | 59 v8::Local<v8::Value> value; |
| 57 if (!instance->Get(info.GetIsolate()->GetCurrentContext(), property).ToLocal
(&value)) | 60 if (!instance->Get(info.GetIsolate()->GetCurrentContext(), property).ToLocal
(&value)) |
| 58 return; | 61 return; |
| 59 | 62 |
| 60 // We quit here to allow the binding code to look up general HTMLObjectEleme
nt properties | |
| 61 // if they are not overriden by plugin. | |
| 62 if (value->IsUndefined() && !v8CallBoolean(instance->Has(info.GetIsolate()->
GetCurrentContext(), property))) | |
| 63 return; | |
| 64 | |
| 65 v8SetReturnValue(info, value); | 63 v8SetReturnValue(info, value); |
| 66 } | 64 } |
| 67 | 65 |
| 68 template <typename ElementType, typename PropertyType> | 66 template <typename ElementType, typename PropertyType> |
| 69 void setScriptableObjectProperty(PropertyType property, v8::Local<v8::Value> val
ue, const v8::PropertyCallbackInfo<v8::Value>& info) | 67 void setScriptableObjectProperty(PropertyType property, v8::Local<v8::Value> val
ue, const v8::PropertyCallbackInfo<v8::Value>& info) |
| 70 { | 68 { |
| 71 ASSERT(!value.IsEmpty()); | 69 ASSERT(!value.IsEmpty()); |
| 72 HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); | 70 HTMLPlugInElement* impl = ElementType::toImpl(info.Holder()); |
| 73 RefPtr<SharedPersistent<v8::Object>> wrapper = impl->pluginWrapper(); | 71 RefPtr<SharedPersistent<v8::Object>> wrapper = impl->pluginWrapper(); |
| 74 if (!wrapper) | 72 if (!wrapper) |
| 75 return; | 73 return; |
| 76 | 74 |
| 77 v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); | 75 v8::Local<v8::Object> instance = wrapper->newLocal(info.GetIsolate()); |
| 78 if (instance.IsEmpty()) | 76 if (instance.IsEmpty()) |
| 79 return; | 77 return; |
| 80 | 78 |
| 81 // FIXME: The gTalk pepper plugin is the only plugin to make use of | 79 // FIXME: The gTalk pepper plugin is the only plugin to make use of |
| 82 // SetProperty and that is being deprecated. This can be removed as soon as | 80 // SetProperty and that is being deprecated. This can be removed as soon as |
| 83 // it goes away. | 81 // it goes away. |
| 84 // Call SetProperty on a pepper plugin's scriptable object. Note that we | 82 // Call SetProperty on a pepper plugin's scriptable object. Note that we |
| 85 // never set the return value here which would indicate that the plugin has | 83 // never set the return value here which would indicate that the plugin has |
| 86 // intercepted the SetProperty call, which means that the property on the | 84 // intercepted the SetProperty call, which means that the property on the |
| 87 // DOM element will also be set. For plugin's that don't intercept the call | 85 // DOM element will also be set. For plugin's that don't intercept the call |
| 88 // (all except gTalk) this makes no difference at all. For gTalk the fact | 86 // (all except gTalk) this makes no difference at all. For gTalk the fact |
| 89 // that the property on the DOM element also gets set is inconsequential. | 87 // that the property on the DOM element also gets set is inconsequential. |
| 90 v8::Maybe<bool> unused = instance->Set(info.GetIsolate()->GetCurrentContext(
), property, value); | 88 v8CallBoolean(instance->CreateDataProperty(info.GetIsolate()->GetCurrentCont
ext(), property, value)); |
| 91 ALLOW_UNUSED_LOCAL(unused); | |
| 92 } | 89 } |
| 93 } // namespace | 90 } // namespace |
| 94 | 91 |
| 95 void V8HTMLEmbedElement::namedPropertyGetterCustom(v8::Local<v8::Name> name, con
st v8::PropertyCallbackInfo<v8::Value>& info) | 92 void V8HTMLEmbedElement::namedPropertyGetterCustom(v8::Local<v8::Name> name, con
st v8::PropertyCallbackInfo<v8::Value>& info) |
| 96 { | 93 { |
| 97 getScriptableObjectProperty<V8HTMLEmbedElement>(name.As<v8::String>(), info)
; | 94 getScriptableObjectProperty<V8HTMLEmbedElement>(name.As<v8::String>(), info)
; |
| 98 } | 95 } |
| 99 | 96 |
| 100 void V8HTMLObjectElement::namedPropertyGetterCustom(v8::Local<v8::Name> name, co
nst v8::PropertyCallbackInfo<v8::Value>& info) | 97 void V8HTMLObjectElement::namedPropertyGetterCustom(v8::Local<v8::Name> name, co
nst v8::PropertyCallbackInfo<v8::Value>& info) |
| 101 { | 98 { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 UseCounter::countIfNotPrivateScript(info.GetIsolate(), V8HTMLEmbedElement::t
oImpl(info.Holder())->document(), UseCounter::HTMLEmbedElementLegacyCall); | 161 UseCounter::countIfNotPrivateScript(info.GetIsolate(), V8HTMLEmbedElement::t
oImpl(info.Holder())->document(), UseCounter::HTMLEmbedElementLegacyCall); |
| 165 } | 162 } |
| 166 | 163 |
| 167 void V8HTMLObjectElement::legacyCallCustom(const v8::FunctionCallbackInfo<v8::Va
lue>& info) | 164 void V8HTMLObjectElement::legacyCallCustom(const v8::FunctionCallbackInfo<v8::Va
lue>& info) |
| 168 { | 165 { |
| 169 invokeOnScriptableObject<V8HTMLObjectElement>(info); | 166 invokeOnScriptableObject<V8HTMLObjectElement>(info); |
| 170 UseCounter::countIfNotPrivateScript(info.GetIsolate(), V8HTMLObjectElement::
toImpl(info.Holder())->document(), UseCounter::HTMLObjectElementLegacyCall); | 167 UseCounter::countIfNotPrivateScript(info.GetIsolate(), V8HTMLObjectElement::
toImpl(info.Holder())->document(), UseCounter::HTMLObjectElementLegacyCall); |
| 171 } | 168 } |
| 172 | 169 |
| 173 } // namespace blink | 170 } // namespace blink |
| OLD | NEW |