Title: [140615] trunk/Source/WebCore
Revision
140615
Author
[email protected]
Date
2013-01-23 16:43:14 -0800 (Wed, 23 Jan 2013)

Log Message

[V8] Move V8DOMWrapper::getEventListener() to V8EventListerList
https://bugs.webkit.org/show_bug.cgi?id=107683

Reviewed by Adam Barth.

No tests. No change in behavior.

* bindings/scripts/CodeGeneratorV8.pm:
(GenerateNormalAttrSetter):
(GenerateEventListenerCallback):
* bindings/scripts/test/V8/V8TestEventTarget.cpp:
(WebCore::TestEventTargetV8Internal::addEventListenerCallback):
(WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
* bindings/scripts/test/V8/V8TestObj.cpp:
(WebCore::TestObjV8Internal::addEventListenerCallback):
(WebCore::TestObjV8Internal::removeEventListenerCallback):
* bindings/v8/V8DOMWrapper.cpp:
* bindings/v8/V8DOMWrapper.h:
(V8DOMWrapper):
* bindings/v8/V8EventListenerList.cpp:
(WebCore::V8EventListenerList::getEventListener):
(WebCore):
* bindings/v8/V8EventListenerList.h:
(WebCore):
(V8EventListenerList):
(WebCore::V8EventListenerList::findWrapper):
(WebCore::V8EventListenerList::clearWrapper):
(WebCore::V8EventListenerList::doFindWrapper):
(WebCore::V8EventListenerList::getHiddenProperty):
(WebCore::V8EventListenerList::findOrCreateWrapper):
* bindings/v8/custom/V8DOMWindowCustom.cpp:
(WebCore::V8DOMWindow::addEventListenerCallback):
(WebCore::V8DOMWindow::removeEventListenerCallback):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (140614 => 140615)


--- trunk/Source/WebCore/ChangeLog	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/ChangeLog	2013-01-24 00:43:14 UTC (rev 140615)
@@ -1,3 +1,39 @@
+2013-01-23  Kentaro Hara  <[email protected]>
+
+        [V8] Move V8DOMWrapper::getEventListener() to V8EventListerList
+        https://bugs.webkit.org/show_bug.cgi?id=107683
+
+        Reviewed by Adam Barth.
+
+        No tests. No change in behavior.
+
+        * bindings/scripts/CodeGeneratorV8.pm:
+        (GenerateNormalAttrSetter):
+        (GenerateEventListenerCallback):
+        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
+        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
+        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
+        * bindings/scripts/test/V8/V8TestObj.cpp:
+        (WebCore::TestObjV8Internal::addEventListenerCallback):
+        (WebCore::TestObjV8Internal::removeEventListenerCallback):
+        * bindings/v8/V8DOMWrapper.cpp:
+        * bindings/v8/V8DOMWrapper.h:
+        (V8DOMWrapper):
+        * bindings/v8/V8EventListenerList.cpp:
+        (WebCore::V8EventListenerList::getEventListener):
+        (WebCore):
+        * bindings/v8/V8EventListenerList.h:
+        (WebCore):
+        (V8EventListenerList):
+        (WebCore::V8EventListenerList::findWrapper):
+        (WebCore::V8EventListenerList::clearWrapper):
+        (WebCore::V8EventListenerList::doFindWrapper):
+        (WebCore::V8EventListenerList::getHiddenProperty):
+        (WebCore::V8EventListenerList::findOrCreateWrapper):
+        * bindings/v8/custom/V8DOMWindowCustom.cpp:
+        (WebCore::V8DOMWindow::addEventListenerCallback):
+        (WebCore::V8DOMWindow::removeEventListenerCallback):
+
 2013-01-23  Dominic Mazzoni  <[email protected]>
 
         AX: AXObjectCache should be initialized with topDocument

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm (140614 => 140615)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm	2013-01-24 00:43:14 UTC (rev 140615)
@@ -1264,16 +1264,15 @@
             if (!$codeGenerator->IsSubType($interface, "Node")) {
                 push(@implContentDecls, "    transferHiddenDependency(info.Holder(), imp->$attrName(), value, ${v8InterfaceName}::eventListenerCacheIndex);\n");
             }
+            AddToImplIncludes("V8EventListenerList.h");
             if ($interfaceName eq "WorkerContext" and $attribute->signature->name eq "onerror") {
-                AddToImplIncludes("V8EventListenerList.h");
                 AddToImplIncludes("V8WorkerContextErrorHandler.h");
                 push(@implContentDecls, "    imp->set$implSetterFunctionName(V8EventListenerList::findOrCreateWrapper<V8WorkerContextErrorHandler>(value, true)");
             } elsif ($interfaceName eq "DOMWindow" and $attribute->signature->name eq "onerror") {
-                AddToImplIncludes("V8EventListenerList.h");
                 AddToImplIncludes("V8WindowErrorHandler.h");
                 push(@implContentDecls, "    imp->set$implSetterFunctionName(V8EventListenerList::findOrCreateWrapper<V8WindowErrorHandler>(value, true)");
             } else {
-                push(@implContentDecls, "    imp->set$implSetterFunctionName(V8DOMWrapper::getEventListener(value, true, ListenerFindOrCreate)");
+                push(@implContentDecls, "    imp->set$implSetterFunctionName(V8EventListenerList::getEventListener(value, true, ListenerFindOrCreate)");
             }
             push(@implContentDecls, ", ec") if $useExceptions;
             push(@implContentDecls, ");\n");
@@ -1353,11 +1352,12 @@
     my $lookupType = ($functionName eq "add") ? "OrCreate" : "Only";
     my $passRefPtrHandling = ($functionName eq "add") ? "" : ".get()";
     my $hiddenDependencyAction = ($functionName eq "add") ? "create" : "remove";
- 
+
+    AddToImplIncludes("V8EventListenerList.h");
     push(@implContentDecls, <<END);
 static v8::Handle<v8::Value> ${functionName}EventListenerCallback(const v8::Arguments& args)
 {
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFind${lookupType});
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFind${lookupType});
     if (listener) {
         V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]);
         V8${interfaceName}::toNative(args.Holder())->${functionName}EventListener(stringResource, listener${passRefPtrHandling}, args[2]->BooleanValue());

Modified: trunk/Source/WebCore/bindings/scripts/test/V8/V8TestEventTarget.cpp (140614 => 140615)


--- trunk/Source/WebCore/bindings/scripts/test/V8/V8TestEventTarget.cpp	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/scripts/test/V8/V8TestEventTarget.cpp	2013-01-24 00:43:14 UTC (rev 140615)
@@ -30,6 +30,7 @@
 #include "V8Collection.h"
 #include "V8DOMWrapper.h"
 #include "V8Event.h"
+#include "V8EventListenerList.h"
 #include "V8Node.h"
 #include <wtf/UnusedParam.h>
 
@@ -61,7 +62,7 @@
 
 static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args)
 {
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOrCreate);
     if (listener) {
         V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]);
         V8TestEventTarget::toNative(args.Holder())->addEventListener(stringResource, listener, args[2]->BooleanValue());
@@ -72,7 +73,7 @@
 
 static v8::Handle<v8::Value> removeEventListenerCallback(const v8::Arguments& args)
 {
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOnly);
     if (listener) {
         V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]);
         V8TestEventTarget::toNative(args.Holder())->removeEventListener(stringResource, listener.get(), args[2]->BooleanValue());

Modified: trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp (140614 => 140615)


--- trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp	2013-01-24 00:43:14 UTC (rev 140615)
@@ -41,6 +41,7 @@
 #include "V8DOMStringList.h"
 #include "V8DOMWrapper.h"
 #include "V8Document.h"
+#include "V8EventListenerList.h"
 #include "V8Float32Array.h"
 #include "V8Node.h"
 #include "V8SVGDocument.h"
@@ -1069,7 +1070,7 @@
 
 static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args)
 {
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOrCreate);
     if (listener) {
         V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]);
         V8TestObj::toNative(args.Holder())->addEventListener(stringResource, listener, args[2]->BooleanValue());
@@ -1080,7 +1081,7 @@
 
 static v8::Handle<v8::Value> removeEventListenerCallback(const v8::Arguments& args)
 {
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOnly);
     if (listener) {
         V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithNullCheck>, stringResource, args[0]);
         V8TestObj::toNative(args.Holder())->removeEventListener(stringResource, listener.get(), args[2]->BooleanValue());

Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp (140614 => 140615)


--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp	2013-01-24 00:43:14 UTC (rev 140615)
@@ -33,13 +33,11 @@
 
 #include "V8Binding.h"
 #include "V8DOMWindow.h"
-#include "V8EventListenerList.h"
 #include "V8HTMLCollection.h"
 #include "V8HTMLDocument.h"
 #include "V8HiddenPropertyName.h"
 #include "V8ObjectConstructor.h"
 #include "V8PerContextData.h"
-#include "V8WorkerContextEventListener.h"
 
 namespace WebCore {
 
@@ -130,20 +128,4 @@
     return typeInfo == type;
 }
 
-PassRefPtr<EventListener> V8DOMWrapper::getEventListener(v8::Local<v8::Value> value, bool isAttribute, ListenerLookupType lookup)
-{
-    v8::Handle<v8::Context> context = v8::Context::GetCurrent();
-    if (context.IsEmpty())
-        return 0;
-    if (lookup == ListenerFindOnly)
-        return V8EventListenerList::findWrapper(value, isAttribute);
-    if (isWrapperOfType(toInnerGlobalObject(context), &V8DOMWindow::info))
-        return V8EventListenerList::findOrCreateWrapper<V8EventListener>(value, isAttribute);
-#if ENABLE(WORKERS)
-    return V8EventListenerList::findOrCreateWrapper<V8WorkerContextEventListener>(value, isAttribute);
-#else
-    return 0;
-#endif
-}
-
 }  // namespace WebCore

Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h (140614 => 140615)


--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h	2013-01-24 00:43:14 UTC (rev 140615)
@@ -46,11 +46,6 @@
 
 namespace WebCore {
 
-    enum ListenerLookupType {
-        ListenerFindOnly,
-        ListenerFindOrCreate,
-    };
-
     class V8DOMWrapper {
     public:
 #ifndef NDEBUG
@@ -67,9 +62,6 @@
         static inline void setWrapperClass(void*, v8::Persistent<v8::Object>);
         static inline void setWrapperClass(Node*, v8::Persistent<v8::Object>);
 
-        // FIXME: This function should probably move to V8EventListenerList.h
-        static PassRefPtr<EventListener> getEventListener(v8::Local<v8::Value>, bool isAttribute, ListenerLookupType);
-
         static bool isWrapperOfType(v8::Handle<v8::Value>, WrapperTypeInfo*);
 
         // FIXME: Why is this function in V8DOMWrapper?

Modified: trunk/Source/WebCore/bindings/v8/V8EventListenerList.cpp (140614 => 140615)


--- trunk/Source/WebCore/bindings/v8/V8EventListenerList.cpp	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/v8/V8EventListenerList.cpp	2013-01-24 00:43:14 UTC (rev 140615)
@@ -31,6 +31,26 @@
 #include "config.h"
 #include "V8EventListenerList.h"
 
+#include "V8Binding.h"
+#include "V8DOMWindow.h"
+#include "V8WorkerContextEventListener.h"
+
 namespace WebCore {
 
+PassRefPtr<EventListener> V8EventListenerList::getEventListener(v8::Local<v8::Value> value, bool isAttribute, ListenerLookupType lookup)
+{
+    v8::Handle<v8::Context> context = v8::Context::GetCurrent();
+    if (context.IsEmpty())
+        return 0;
+    if (lookup == ListenerFindOnly)
+        return V8EventListenerList::findWrapper(value, isAttribute);
+    if (V8DOMWrapper::isWrapperOfType(toInnerGlobalObject(context), &V8DOMWindow::info))
+        return V8EventListenerList::findOrCreateWrapper<V8EventListener>(value, isAttribute);
+#if ENABLE(WORKERS)
+    return V8EventListenerList::findOrCreateWrapper<V8WorkerContextEventListener>(value, isAttribute);
+#else
+    return 0;
+#endif
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/v8/V8EventListenerList.h (140614 => 140615)


--- trunk/Source/WebCore/bindings/v8/V8EventListenerList.h	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/v8/V8EventListenerList.h	2013-01-24 00:43:14 UTC (rev 140615)
@@ -38,68 +38,76 @@
 #include <wtf/PassRefPtr.h>
 
 namespace WebCore {
-    class Frame;
 
-    // This is a container for V8EventListener objects that uses hidden properties of v8::Object to speed up lookups.
-    class V8EventListenerList {
-    public:
-        static PassRefPtr<V8EventListener> findWrapper(v8::Local<v8::Value> value, bool isAttribute)
-        {
-            ASSERT(v8::Context::InContext());
-            if (!value->IsObject())
-                return 0;
+class Frame;
 
-            v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
-            return doFindWrapper(v8::Local<v8::Object>::Cast(value), wrapperProperty);
-        }
+enum ListenerLookupType {
+    ListenerFindOnly,
+    ListenerFindOrCreate,
+};
 
-        template<typename WrapperType>
-        static PassRefPtr<V8EventListener> findOrCreateWrapper(v8::Local<v8::Value>, bool isAttribute);
+// This is a container for V8EventListener objects that uses hidden properties of v8::Object to speed up lookups.
+class V8EventListenerList {
+public:
+    static PassRefPtr<V8EventListener> findWrapper(v8::Local<v8::Value> value, bool isAttribute)
+    {
+        ASSERT(v8::Context::InContext());
+        if (!value->IsObject())
+            return 0;
 
-        static void clearWrapper(v8::Handle<v8::Object> listenerObject, bool isAttribute)
-        {
-            v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
-            listenerObject->DeleteHiddenValue(wrapperProperty);
-        }
+        v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
+        return doFindWrapper(v8::Local<v8::Object>::Cast(value), wrapperProperty);
+    }
 
-    private:
-        static V8EventListener* doFindWrapper(v8::Local<v8::Object> object, v8::Handle<v8::String> wrapperProperty)
-        {
-            ASSERT(v8::Context::InContext());
-            v8::HandleScope scope;
-            v8::Local<v8::Value> listener = object->GetHiddenValue(wrapperProperty);
-            if (listener.IsEmpty())
-                return 0;
-            return static_cast<V8EventListener*>(v8::External::Cast(*listener)->Value());
-        }
+    template<typename WrapperType>
+    static PassRefPtr<V8EventListener> findOrCreateWrapper(v8::Local<v8::Value>, bool isAttribute);
 
-        static inline v8::Handle<v8::String> getHiddenProperty(bool isAttribute)
-        {
-            return isAttribute ? V8HiddenPropertyName::attributeListener() : V8HiddenPropertyName::listener();
-        }
-    };
+    static void clearWrapper(v8::Handle<v8::Object> listenerObject, bool isAttribute)
+    {
+        v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
+        listenerObject->DeleteHiddenValue(wrapperProperty);
+    }
 
-    template<typename WrapperType>
-    PassRefPtr<V8EventListener> V8EventListenerList::findOrCreateWrapper(v8::Local<v8::Value> value, bool isAttribute)
+    static PassRefPtr<EventListener> getEventListener(v8::Local<v8::Value>, bool isAttribute, ListenerLookupType);
+
+private:
+    static V8EventListener* doFindWrapper(v8::Local<v8::Object> object, v8::Handle<v8::String> wrapperProperty)
     {
         ASSERT(v8::Context::InContext());
-        if (!value->IsObject())
+        v8::HandleScope scope;
+        v8::Local<v8::Value> listener = object->GetHiddenValue(wrapperProperty);
+        if (listener.IsEmpty())
             return 0;
+        return static_cast<V8EventListener*>(v8::External::Cast(*listener)->Value());
+    }
 
-        v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(value);
-        v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
+    static inline v8::Handle<v8::String> getHiddenProperty(bool isAttribute)
+    {
+        return isAttribute ? V8HiddenPropertyName::attributeListener() : V8HiddenPropertyName::listener();
+    }
+};
 
-        V8EventListener* wrapper = doFindWrapper(object, wrapperProperty);
-        if (wrapper)
-            return wrapper;
+template<typename WrapperType>
+PassRefPtr<V8EventListener> V8EventListenerList::findOrCreateWrapper(v8::Local<v8::Value> value, bool isAttribute)
+{
+    ASSERT(v8::Context::InContext());
+    if (!value->IsObject())
+        return 0;
 
-        PassRefPtr<V8EventListener> wrapperPtr = WrapperType::create(object, isAttribute, WorldContextHandle(UseCurrentWorld));
-        if (wrapperPtr)
-            object->SetHiddenValue(wrapperProperty, v8::External::New(wrapperPtr.get()));
+    v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(value);
+    v8::Handle<v8::String> wrapperProperty = getHiddenProperty(isAttribute);
 
-        return wrapperPtr;
-    }
+    V8EventListener* wrapper = doFindWrapper(object, wrapperProperty);
+    if (wrapper)
+        return wrapper;
 
+    RefPtr<V8EventListener> wrapperPtr = WrapperType::create(object, isAttribute, WorldContextHandle(UseCurrentWorld));
+    if (wrapperPtr)
+        object->SetHiddenValue(wrapperProperty, v8::External::New(wrapperPtr.get()));
+
+    return wrapperPtr;
+}
+
 } // namespace WebCore
 
 #endif // V8EventListenerList_h

Modified: trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp (140614 => 140615)


--- trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp	2013-01-24 00:34:42 UTC (rev 140614)
+++ trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp	2013-01-24 00:43:14 UTC (rev 140615)
@@ -56,6 +56,7 @@
 #include "Storage.h"
 #include "V8Binding.h"
 #include "V8EventListener.h"
+#include "V8EventListenerList.h"
 #include "V8GCForContextDispose.h"
 #include "V8HiddenPropertyName.h"
 #include "V8HTMLCollection.h"
@@ -244,7 +245,7 @@
     if (!imp->frame())
         return v8::Undefined();
 
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOrCreate);
 
     if (listener) {
         imp->addEventListener(eventType, listener, useCapture);
@@ -273,7 +274,7 @@
     if (!imp->frame())
         return v8::Undefined();
 
-    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
+    RefPtr<EventListener> listener = V8EventListenerList::getEventListener(args[1], false, ListenerFindOnly);
 
     if (listener) {
         imp->removeEventListener(eventType, listener.get(), useCapture);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to