Title: [111549] trunk
Revision
111549
Author
[email protected]
Date
2012-03-21 09:09:40 -0700 (Wed, 21 Mar 2012)

Log Message

Web Inspector: event listener section doesn't show all event listeners of the element ancestors
https://bugs.webkit.org/show_bug.cgi?id=81782

Source/WebCore:

Event listeners section now contains all event listeners for the selected
element ancestors chain (in case option "All Nodes" is selected).

Reviewed by Pavel Feldman.

* inspector/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::getEventListenersForNode):
* inspector/front-end/EventListenersSidebarPane.js:
(WebInspector.EventListenersSidebarPane.prototype.update.callback):
(WebInspector.EventListenersSidebarPane.prototype.update):
(WebInspector.EventListenersSidebarPane.prototype):

LayoutTests:

Reviewed by Pavel Feldman.

* http/tests/inspector/elements-test.js:
(initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersEventBars):
(initialize_ElementTest.InspectorTest.dumpSelectedElementEventListeners):
* inspector/elements/event-listener-sidebar-expected.txt:
* inspector/elements/event-listener-sidebar.html:
* platform/chromium/inspector/elements/event-listener-sidebar-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (111548 => 111549)


--- trunk/LayoutTests/ChangeLog	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/LayoutTests/ChangeLog	2012-03-21 16:09:40 UTC (rev 111549)
@@ -1,3 +1,17 @@
+2012-03-21  Yury Semikhatsky  <[email protected]>
+
+        Web Inspector: event listener section doesn't show all event listeners of the element ancestors
+        https://bugs.webkit.org/show_bug.cgi?id=81782
+
+        Reviewed by Pavel Feldman.
+
+        * http/tests/inspector/elements-test.js:
+        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersEventBars):
+        (initialize_ElementTest.InspectorTest.dumpSelectedElementEventListeners):
+        * inspector/elements/event-listener-sidebar-expected.txt:
+        * inspector/elements/event-listener-sidebar.html:
+        * platform/chromium/inspector/elements/event-listener-sidebar-expected.txt:
+
 2012-03-21  hermwong  <[email protected]>
 
         Convert some fast/regions pixel tests to reftests

Modified: trunk/LayoutTests/http/tests/inspector/elements-test.js (111548 => 111549)


--- trunk/LayoutTests/http/tests/inspector/elements-test.js	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/LayoutTests/http/tests/inspector/elements-test.js	2012-03-21 16:09:40 UTC (rev 111549)
@@ -192,7 +192,7 @@
 {
     var eventListenerSections = WebInspector.panels.elements.sidebarPanes.eventListeners.sections;
     for (var i = 0; i < eventListenerSections.length; ++i) {
-        var eventBarChildren = eventListenerSections[i].eventBars.children;
+        var eventBarChildren = eventListenerSections[i]._eventBars.children;
         for (var j = 0; j < eventBarChildren.length; ++j)
             eventBarChildren[j]._section.expand();
     }
@@ -214,7 +214,7 @@
         var eventType = section._title;
         InspectorTest.addResult("");
         InspectorTest.addResult("======== " + eventType + " ========");
-        var eventBarChildren = section.eventBars.children;
+        var eventBarChildren = section._eventBars.children;
         for (var j = 0; j < eventBarChildren.length; ++j) {
             var objectPropertiesSection = eventBarChildren[j]._section;
             InspectorTest.dumpObjectPropertySection(objectPropertiesSection, {

Modified: trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt (111548 => 111549)


--- trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt	2012-03-21 16:09:40 UTC (rev 111549)
@@ -52,6 +52,16 @@
     type: click
     useCapture: false
 
+======== custom event ========
+[expanded] body event-listener-sidebar.html:10
+    isAttribute: false
+    lineNumber: 10
+    listenerBody: function f() {}
+    node: HTMLBodyElement
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: custom event
+    useCapture: true
+
 ======== hover ========
 [expanded] button#node event-listener-sidebar.html:14
     isAttribute: false
@@ -62,3 +72,32 @@
     type: hover
     useCapture: false
 
+======== click ========
+[expanded] document event-listener-sidebar.html:19
+    isAttribute: false
+    lineNumber: 19
+    listenerBody: function (event) { console.log("click - document - capturing"); }
+    node: HTMLDocument
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: true
+[expanded] document event-listener-sidebar.html:6
+    isAttribute: true
+    lineNumber: 6
+    listenerBody: function documentClickHandler(event) { console.log("click - document - attribute"); }
+    node: HTMLDocument
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+
+======== custom event ========
+[expanded] body event-listener-sidebar.html:10
+    isAttribute: false
+    lineNumber: 10
+    listenerBody: function f() {}
+    node: HTMLBodyElement
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: custom event
+    useCapture: true
+Listeners for selected node only(should be no listeners):
+

Modified: trunk/LayoutTests/inspector/elements/event-listener-sidebar.html (111548 => 111549)


--- trunk/LayoutTests/inspector/elements/event-listener-sidebar.html	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/LayoutTests/inspector/elements/event-listener-sidebar.html	2012-03-21 16:09:40 UTC (rev 111549)
@@ -19,14 +19,37 @@
     document.addEventListener("click", function(event) { console.log("click - document - capturing"); }, true);
     document.addEventListener("mousedown", f, false);
     document.removeEventListener("mousedown", f, false);
+
+    document.body.addEventListener("custom event", f, true);
 }
 
 function test()
 {
-    InspectorTest.selectNodeWithId("node", callback);
+    WebInspector.settings.eventListenersFilter.set("all");
+    InspectorTest.selectNodeWithId("node", step1);
 
-    function callback()
+    function step1()
     {
+        InspectorTest.expandAndDumpSelectedElementEventListeners(step2);
+    }
+    function step2()
+    {
+        InspectorTest.selectNodeWithId("node-without-listeners", step3);
+    }
+    function step3()
+    {
+        InspectorTest.expandAndDumpSelectedElementEventListeners(step4);
+    }
+    function step4()
+    {
+        var eventListenersPane = WebInspector.panels.elements.sidebarPanes.eventListeners;
+        eventListenersPane.settingsSelectElement.selectedIndex = 1;
+        eventListenersPane._changeSetting();
+        InspectorTest.addResult("Listeners for selected node only(should be no listeners):");
+        InspectorTest.expandAndDumpSelectedElementEventListeners(step5);
+    }
+    function step5()
+    {
         InspectorTest.expandAndDumpSelectedElementEventListeners(InspectorTest.completeTest);
     }
 }
@@ -46,5 +69,7 @@
 
 <button id="node">Inspect Me</button>
 
+<div id="node-without-listeners"></div>
+
 </body>
 </html>

Modified: trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt (111548 => 111549)


--- trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt	2012-03-21 16:09:40 UTC (rev 111549)
@@ -52,6 +52,16 @@
     type: click
     useCapture: false
 
+======== custom event ========
+[expanded] body event-listener-sidebar.html:10
+    isAttribute: false
+    lineNumber: 10
+    listenerBody: function f() {}
+    node: HTMLBodyElement
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: custom event
+    useCapture: true
+
 ======== hover ========
 [expanded] button#node event-listener-sidebar.html:14
     isAttribute: false
@@ -62,3 +72,32 @@
     type: hover
     useCapture: false
 
+======== click ========
+[expanded] document event-listener-sidebar.html:19
+    isAttribute: false
+    lineNumber: 19
+    listenerBody: function (event) { console.log("click - document - capturing"); }
+    node: HTMLDocument
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: true
+[expanded] document event-listener-sidebar.html:6
+    isAttribute: true
+    lineNumber: 6
+    listenerBody: function documentClickHandler(event) { console.log("click - document - attribute"); }
+    node: HTMLDocument
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+
+======== custom event ========
+[expanded] body event-listener-sidebar.html:10
+    isAttribute: false
+    lineNumber: 10
+    listenerBody: function f() {}
+    node: HTMLBodyElement
+    sourceName: [clipped-for-test]/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: custom event
+    useCapture: true
+Listeners for selected node only(should be no listeners):
+

Modified: trunk/Source/WebCore/ChangeLog (111548 => 111549)


--- trunk/Source/WebCore/ChangeLog	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/Source/WebCore/ChangeLog	2012-03-21 16:09:40 UTC (rev 111549)
@@ -1,3 +1,20 @@
+2012-03-21  Yury Semikhatsky  <[email protected]>
+
+        Web Inspector: event listener section doesn't show all event listeners of the element ancestors
+        https://bugs.webkit.org/show_bug.cgi?id=81782
+
+        Event listeners section now contains all event listeners for the selected
+        element ancestors chain (in case option "All Nodes" is selected).
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/InspectorDOMAgent.cpp:
+        (WebCore::InspectorDOMAgent::getEventListenersForNode):
+        * inspector/front-end/EventListenersSidebarPane.js:
+        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
+        (WebInspector.EventListenersSidebarPane.prototype.update):
+        (WebInspector.EventListenersSidebarPane.prototype):
+
 2012-03-21  Ilya Tikhonovsky  <[email protected]>
 
         Web Inspector: HeapSnapshot: move all builders and calculation calls to HeapSnapshot._init function.

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp (111548 => 111549)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-03-21 16:09:40 UTC (rev 111549)
@@ -725,15 +725,11 @@
 
 void InspectorDOMAgent::getEventListenersForNode(ErrorString* errorString, int nodeId, RefPtr<InspectorArray>& listenersArray)
 {
-    Node* node = nodeForId(nodeId);
-    if (!node) {
-        *errorString = "No such node";
+    Node* node = assertNode(errorString, nodeId);
+    if (!node)
         return;
-    }
     Vector<EventListenerInfo> eventInformation;
     getEventListeners(node, eventInformation, true);
-    if (eventInformation.isEmpty())
-        return;
 
     // Get Capturing Listeners (in this order)
     size_t eventInformationLength = eventInformation.size();
@@ -761,42 +757,28 @@
 
 void InspectorDOMAgent::getEventListeners(Node* node, Vector<EventListenerInfo>& eventInformation, bool includeAncestors)
 {
-    EventTargetData* d;
-
-    // Quick break if no listeners at all
-    if (!(d = node->eventTargetData()))
-        return;
-
-    // Get the list of event types this Node is concerned with
-    Vector<AtomicString> eventTypes = d->eventListenerMap.eventTypes();
-
-    // Quick break if no useful listeners
-    size_t eventTypesLength = eventTypes.size();
-    if (!eventTypesLength)
-        return;
-
+    // The Node's Ancestors including self.
+    Vector<Node*> ancestors;
+    // Push this node as the firs element.
+    ancestors.append(node);
     if (includeAncestors) {
-        // The Node's Ancestors (not including self)
-        Vector<ContainerNode*> ancestors;
         for (ContainerNode* ancestor = node->parentOrHostNode(); ancestor; ancestor = ancestor->parentOrHostNode())
             ancestors.append(ancestor);
+    }
 
-        // Nodes and their Listeners for the concerned event types (order is top to bottom)
-        for (size_t i = ancestors.size(); i; --i) {
-            ContainerNode* ancestor = ancestors[i - 1];
-            for (size_t j = 0; j < eventTypesLength; ++j) {
-                AtomicString& type = eventTypes[j];
-                if (ancestor->hasEventListeners(type))
-                    eventInformation.append(EventListenerInfo(ancestor, type, ancestor->getEventListeners(type)));
-            }
+    // Nodes and their Listeners for the concerned event types (order is top to bottom)
+    for (size_t i = ancestors.size(); i; --i) {
+        Node* ancestor = ancestors[i - 1];
+        EventTargetData* d = ancestor->eventTargetData();
+        if (!d)
+            continue;
+        // Get the list of event types this Node is concerned with
+        Vector<AtomicString> eventTypes = d->eventListenerMap.eventTypes();
+        for (size_t j = 0; j < eventTypes.size(); ++j) {
+            AtomicString& type = eventTypes[j];
+            eventInformation.append(EventListenerInfo(ancestor, type, ancestor->getEventListeners(type)));
         }
     }
-
-    // Insert the Current Node at the end of that list (last in capturing, first in bubbling)
-    for (size_t i = 0; i < eventTypesLength; ++i) {
-        const AtomicString& type = eventTypes[i];
-        eventInformation.append(EventListenerInfo(node, type, node->getEventListeners(type)));
-    }
 }
 
 void InspectorDOMAgent::performSearch(ErrorString*, const String& whitespaceTrimmedQuery, String* searchId, int* resultCount)

Modified: trunk/Source/WebCore/inspector/front-end/EventListenersSidebarPane.js (111548 => 111549)


--- trunk/Source/WebCore/inspector/front-end/EventListenersSidebarPane.js	2012-03-21 15:48:46 UTC (rev 111548)
+++ trunk/Source/WebCore/inspector/front-end/EventListenersSidebarPane.js	2012-03-21 16:09:40 UTC (rev 111549)
@@ -81,10 +81,13 @@
             if (error)
                 return;
 
+            var selectedNodeOnly = "selected" === WebInspector.settings.eventListenersFilter.get();
             var sectionNames = [];
             var sectionMap = {};
             for (var i = 0; i < eventListeners.length; ++i) {
                 var eventListener = eventListeners[i];
+                if (selectedNodeOnly && (node.id !== eventListener.nodeId))
+                    continue;
                 eventListener.node = WebInspector.domAgent.nodeForId(eventListener.nodeId);
                 delete eventListener.nodeId; // no longer needed
                 if (/^function _inspectorCommandLineAPI_logEvent\(/.test(eventListener.handlerBody.toString()))
@@ -111,22 +114,25 @@
             sectionNames.sort();
             for (var i = 0; i < sectionNames.length; ++i) {
                 var section = sectionMap[sectionNames[i]];
-                section.update();
                 body.appendChild(section.element);
             }
         }
 
         if (node)
             node.eventListeners(callback);
+        this._selectedNode = node;
     },
 
-    _changeSetting: function(event)
+    willHide: function()
     {
+        delete this._selectedNode;
+    },
+
+    _changeSetting: function()
+    {
         var selectedOption = this.settingsSelectElement[this.settingsSelectElement.selectedIndex];
         WebInspector.settings.eventListenersFilter.set(selectedOption.value);
-
-        for (var i = 0; i < this.sections.length; ++i)
-            this.sections[i].update();
+        this.update(this._selectedNode);
     }
 }
 
@@ -148,37 +154,16 @@
     delete this.propertiesElement;
     delete this.propertiesTreeOutline;
 
-    this.eventBars = document.createElement("div");
-    this.eventBars.className = "event-bars";
-    this.element.appendChild(this.eventBars);
+    this._eventBars = document.createElement("div");
+    this._eventBars.className = "event-bars";
+    this.element.appendChild(this._eventBars);
 }
 
 WebInspector.EventListenersSection.prototype = {
-    update: function()
-    {
-        // A Filtered Array simplifies when to create connectors
-        var filteredEventListeners = this.eventListeners;
-        if (WebInspector.settings.eventListenersFilter.get() == "selected") {
-            filteredEventListeners = [];
-            for (var i = 0; i < this.eventListeners.length; ++i) {
-                var eventListener = this.eventListeners[i];
-                if (eventListener.node.id === this._nodeId)
-                    filteredEventListeners.push(eventListener);
-            }
-        }
-
-        this.eventBars.removeChildren();
-        var length = filteredEventListeners.length;
-        for (var i = 0; i < length; ++i) {
-            var eventListener = filteredEventListeners[i];
-            var eventListenerBar = new WebInspector.EventListenerBar(eventListener, this._nodeId, this._linkifier);
-            this.eventBars.appendChild(eventListenerBar.element);
-        }
-    },
-
     addListener: function(eventListener)
     {
-        this.eventListeners.push(eventListener);
+        var eventListenerBar = new WebInspector.EventListenerBar(eventListener, this._nodeId, this._linkifier);
+        this._eventBars.appendChild(eventListenerBar.element);
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to