2009-02-12 Dimitri Glazkov <dglazkov@chromium.org>
authordglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Feb 2009 18:18:11 +0000 (18:18 +0000)
committerdglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Feb 2009 18:18:11 +0000 (18:18 +0000)
        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23906
        Add custom V8 bindings for HTMLPlugInElement.

        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp: Added.
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@40911 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bindings/v8/custom/V8HTMLPlugInElementCustom.cpp [new file with mode: 0644]

index b44b7d568a4f33b3678653c96c40c5a382e9a898..2bb939e36a83098e7e1bbcd22b79fe18cbf15125 100644 (file)
@@ -1,3 +1,17 @@
+2009-02-12  Dimitri Glazkov  <dglazkov@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        https://bugs.webkit.org/show_bug.cgi?id=23906
+        Add custom V8 bindings for HTMLPlugInElement.
+
+        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp: Added.
+        (WebCore::NAMED_PROPERTY_GETTER):
+        (WebCore::NAMED_PROPERTY_SETTER):
+        (WebCore::CALLBACK_FUNC_DECL):
+        (WebCore::INDEXED_PROPERTY_GETTER):
+        (WebCore::INDEXED_PROPERTY_SETTER):
+
 2009-02-12  Gustavo Noronha Silva  <gns@gnome.org>
 
         Reviewed by Mark Rowe.
diff --git a/WebCore/bindings/v8/custom/V8HTMLPlugInElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLPlugInElementCustom.cpp
new file mode 100644 (file)
index 0000000..9064b29
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+* Copyright (C) 2009 Google Inc. All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* 
+*     * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*     * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+*     * Neither the name of Google Inc. nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "config.h"
+#include "HTMLPlugInElement.h"
+
+#include "ScriptInstance.h"
+
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8Proxy.h"
+
+// FIXME: The name of this file will change once refactoring is complete
+#include "v8_npobject.h"
+
+namespace WebCore {
+
+NAMED_PROPERTY_GETTER(HTMLPlugInElement)
+{
+    INC_STATS("DOM.HTMLPlugInElement.NamedPropertyGetter");
+    HTMLPlugInElement* imp = V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder());
+    ScriptInstance scriptInstance = imp->getInstance();
+    if (!scriptInstance)
+        return v8::Undefined();
+
+    v8::Local<v8::Object> instance = v8::Local<v8::Object>::New(scriptInstance->instance());
+    if (instance.IsEmpty())
+        return v8::Undefined();
+
+    return NPObjectGetNamedProperty(instance, name);
+}
+
+NAMED_PROPERTY_SETTER(HTMLPlugInElement)
+{
+    INC_STATS("DOM.HTMLPlugInElement.NamedPropertySetter");
+    HTMLPlugInElement* imp = V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder());
+    ScriptInstance scriptInstance = imp->getInstance();
+    if (!scriptInstance)
+        return v8::Undefined();
+
+    v8::Local<v8::Object> instance = v8::Local<v8::Object>::New(scriptInstance->instance());
+    if (instance.IsEmpty())
+        return v8::Undefined();
+
+    return NPObjectSetNamedProperty(instance, name, value);
+}
+
+CALLBACK_FUNC_DECL(HTMLPlugInElement)
+{
+    INC_STATS("DOM.HTMLPluginElement()");
+    return NPObjectInvokeDefaultHandler(args);
+}
+
+INDEXED_PROPERTY_GETTER(HTMLPlugInElement)
+{
+    INC_STATS("DOM.HTMLPlugInElement.IndexedPropertyGetter");
+    HTMLPlugInElement* imp = V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder());
+    ScriptInstance scriptInstance = imp->getInstance();
+    if (!scriptInstance)
+        return v8::Undefined();
+
+    v8::Local<v8::Object> instance = v8::Local<v8::Object>::New(scriptInstance->instance());
+    if (instance.IsEmpty())
+        return v8::Undefined();
+
+    return NPObjectGetIndexedProperty(instance, index);
+}
+
+INDEXED_PROPERTY_SETTER(HTMLPlugInElement)
+{
+    INC_STATS("DOM.HTMLPlugInElement.IndexedPropertySetter");
+    HTMLPlugInElement* imp = V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder());
+    ScriptInstance scriptInstance = imp->getInstance();
+    if (!scriptInstance)
+        return v8::Undefined();
+
+    v8::Local<v8::Object> instance = v8::Local<v8::Object>::New(scriptInstance->instance());
+    if (instance.IsEmpty())
+        return v8::Undefined();
+
+    return NPObjectSetIndexedProperty(instance, index, value);
+}
+
+} // namespace WebCore