Title: [89317] trunk
Revision
89317
Author
[email protected]
Date
2011-06-20 17:01:18 -0700 (Mon, 20 Jun 2011)

Log Message

2011-06-20  Joseph Pecoraro  <[email protected]>

        Reviewed by Pavel Feldman.

        Web Inspector: CRASH if Expanding Event Listener on document
        https://bugs.webkit.org/show_bug.cgi?id=61834

        Add a test to list the event listeners in the sidebar.
        This test includes event listeners on the document, and
        it expands each of the sections which would have caused
        the CRASH fixed by this patch.

        * http/tests/inspector/elements-test.js:
        (initialize_ElementTest.InspectorTest.expandAndDumpSelectedElementEventListeners):
        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListeners):
        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersSubsections):
        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersEventBars):
        (initialize_ElementTest.InspectorTest.dumpSelectedElementEventListeners):
        (initialize_ElementTest.InspectorTest.dumpObjectPropertySection):
        * inspector/elements/event-listener-sidebar-expected.txt: Added.
        * inspector/elements/event-listener-sidebar.html: Added.
        * platform/chromium/inspector/elements/event-listener-sidebar-expected.txt: Added.
        Chromium has slightly different results. It has more properties
        and includes extra information, like line numbers, for functions.

2011-06-20  Joseph Pecoraro  <[email protected]>

        Reviewed by Pavel Feldman.

        Web Inspector: CRASH if Expanding Event Listener on document
        https://bugs.webkit.org/show_bug.cgi?id=61834

        Node::ownerDocument returns null for a document node. So, in
        the case of a document node in resolveNode, use Node::document
        which returns the node, as a document.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::resolveNode):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (89316 => 89317)


--- trunk/LayoutTests/ChangeLog	2011-06-21 00:01:04 UTC (rev 89316)
+++ trunk/LayoutTests/ChangeLog	2011-06-21 00:01:18 UTC (rev 89317)
@@ -1,5 +1,30 @@
 2011-06-20  Joseph Pecoraro  <[email protected]>
 
+        Reviewed by Pavel Feldman.
+
+        Web Inspector: CRASH if Expanding Event Listener on document
+        https://bugs.webkit.org/show_bug.cgi?id=61834
+
+        Add a test to list the event listeners in the sidebar.
+        This test includes event listeners on the document, and
+        it expands each of the sections which would have caused
+        the CRASH fixed by this patch.
+
+        * http/tests/inspector/elements-test.js:
+        (initialize_ElementTest.InspectorTest.expandAndDumpSelectedElementEventListeners):
+        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListeners):
+        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersSubsections):
+        (initialize_ElementTest.InspectorTest.expandSelectedElementEventListenersEventBars):
+        (initialize_ElementTest.InspectorTest.dumpSelectedElementEventListeners):
+        (initialize_ElementTest.InspectorTest.dumpObjectPropertySection):
+        * inspector/elements/event-listener-sidebar-expected.txt: Added.
+        * inspector/elements/event-listener-sidebar.html: Added.
+        * platform/chromium/inspector/elements/event-listener-sidebar-expected.txt: Added.
+        Chromium has slightly different results. It has more properties
+        and includes extra information, like line numbers, for functions.
+
+2011-06-20  Joseph Pecoraro  <[email protected]>
+
         Reviewed by Darin Adler.
 
         Minimize memory due to layer backing stores for pages in the Page Cache

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


--- trunk/LayoutTests/http/tests/inspector/elements-test.js	2011-06-21 00:01:04 UTC (rev 89316)
+++ trunk/LayoutTests/http/tests/inspector/elements-test.js	2011-06-21 00:01:18 UTC (rev 89317)
@@ -102,6 +102,81 @@
     }
 };
 
+InspectorTest.expandAndDumpSelectedElementEventListeners = function(callback)
+{
+    InspectorTest.expandSelectedElementEventListeners(function() {
+        InspectorTest.dumpSelectedElementEventListeners(callback);
+    });
+}
+
+InspectorTest.expandSelectedElementEventListeners = function(callback)
+{
+    var sidebarPane = WebInspector.panels.elements.sidebarPanes.eventListeners;
+    sidebarPane.expand();
+
+    InspectorTest.runAfterPendingDispatches(function() {
+        InspectorTest.expandSelectedElementEventListenersSubsections(callback);
+    });
+}
+
+InspectorTest.expandSelectedElementEventListenersSubsections = function(callback)
+{
+    var eventListenerSections = WebInspector.panels.elements.sidebarPanes.eventListeners.sections;
+    for (var i = 0; i < eventListenerSections.length; ++i)
+        eventListenerSections[i].expand();
+
+    // Multiple sections may expand.
+    InspectorTest.runAfterPendingDispatches(function() {
+        InspectorTest.expandSelectedElementEventListenersEventBars(callback);
+    });
+}
+
+InspectorTest.expandSelectedElementEventListenersEventBars = function(callback)
+{
+    var eventListenerSections = WebInspector.panels.elements.sidebarPanes.eventListeners.sections;
+    for (var i = 0; i < eventListenerSections.length; ++i) {
+        var eventBarChildren = eventListenerSections[i].eventBars.children;
+        for (var j = 0; j < eventBarChildren.length; ++j)
+            eventBarChildren[j]._section.expand();
+    }
+
+    // Multiple sections may expand.
+    InspectorTest.runAfterPendingDispatches(callback);
+}
+
+InspectorTest.dumpSelectedElementEventListeners = function(callback)
+{
+    var eventListenerSections = WebInspector.panels.elements.sidebarPanes.eventListeners.sections;
+    for (var i = 0; i < eventListenerSections.length; ++i) {
+        var section = eventListenerSections[i];
+        var eventType = section._title;
+        InspectorTest.addResult("");
+        InspectorTest.addResult("======== " + eventType + " ========");
+        var eventBarChildren = section.eventBars.children;
+        for (var j = 0; j < eventBarChildren.length; ++j) {
+            var objectPropertiesSection = eventBarChildren[j]._section;
+            InspectorTest.dumpObjectPropertySection(objectPropertiesSection);
+        }
+    }
+
+    callback();
+}
+
+InspectorTest.dumpObjectPropertySection = function(section)
+{
+    var expandedSubstring = section.expanded ? "[expanded]" : "[collapsed]";
+    InspectorTest.addResult(expandedSubstring + " " + section.titleElement.textContent + " " + section.subtitleAsTextForTest);
+    if (!section.propertiesForTest)
+        return;
+
+    for (var i = 0; i < section.propertiesForTest.length; ++i) {
+        var property = section.propertiesForTest[i];
+        var key = property.name;
+        var value = property.value._description;
+        InspectorTest.addResult("    " + key + ": " + value);
+    }
+}
+
 // FIXME: this returns the first tree item found (may fail for same-named properties in a style).
 InspectorTest.getElementStylePropertyTreeItem = function(propertyName)
 {

Added: trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt (0 => 89317)


--- trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt	2011-06-21 00:01:18 UTC (rev 89317)
@@ -0,0 +1,50 @@
+Tests event listeners output in the Elements sidebar panel.
+
+Inspect Me
+
+======== click ========
+[expanded] document (anonymous function)
+    isAttribute: false
+    listenerBody: function (event) { console.log("click - document - capturing"); }
+    node: HTMLDocument
+    type: click
+    useCapture: true
+[expanded] button#node (anonymous function)
+    isAttribute: false
+    listenerBody: function (event) { console.log("click - button - capturing"); }
+    node: HTMLButtonElement
+    type: click
+    useCapture: true
+[expanded] button#node clickHandler
+    isAttribute: false
+    listenerBody: function clickHandler(event) { console.log("click - button - bubbling (registered before attribute)"); }
+    node: HTMLButtonElement
+    type: click
+    useCapture: false
+[expanded] button#node (anonymous function)
+    isAttribute: true
+    listenerBody: function (event) { console.log("click - button - attribute"); }
+    node: HTMLButtonElement
+    type: click
+    useCapture: false
+[expanded] button#node (anonymous function)
+    isAttribute: false
+    listenerBody: function (event) { console.log("click - button - bubbling (registered after attribute)"); }
+    node: HTMLButtonElement
+    type: click
+    useCapture: false
+[expanded] document documentClickHandler
+    isAttribute: true
+    listenerBody: function documentClickHandler(event) { console.log("click - document - attribute"); }
+    node: HTMLDocument
+    type: click
+    useCapture: false
+
+======== hover ========
+[expanded] button#node hoverHandler
+    isAttribute: false
+    listenerBody: function hoverHandler(event) { console.log("hover - button - bubbling"); }
+    node: HTMLButtonElement
+    type: hover
+    useCapture: false
+

Added: trunk/LayoutTests/inspector/elements/event-listener-sidebar.html (0 => 89317)


--- trunk/LayoutTests/inspector/elements/event-listener-sidebar.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/elements/event-listener-sidebar.html	2011-06-21 00:01:18 UTC (rev 89317)
@@ -0,0 +1,50 @@
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function documentClickHandler(event) { console.log("click - document - attribute"); }
+
+function setupEventListeners()
+{
+    function f() {}
+    var button = document.getElementById("node");
+    function clickHandler(event) { console.log("click - button - bubbling (registered before attribute)"); }
+    button.addEventListener("click", clickHandler, false);
+    button.addEventListener("hover", function hoverHandler(event) { console.log("hover - button - bubbling"); }, false);
+    button.addEventListener("click", function(event) { console.log("click - button - capturing"); }, true);
+    button._onclick_ = function(event) { console.log("click - button - attribute"); }
+    button.addEventListener("click", function(event) { console.log("click - button - bubbling (registered after attribute)"); }, false);
+    document._onclick_ = documentClickHandler;
+    document.addEventListener("click", function(event) { console.log("click - document - capturing"); }, true);
+    document.addEventListener("mousedown", f, false);
+    document.removeEventListener("mousedown", f, false);
+}
+
+function test()
+{
+    InspectorTest.selectNodeWithId("node", callback);
+
+    function callback()
+    {
+        InspectorTest.expandAndDumpSelectedElementEventListeners(InspectorTest.completeTest);
+    }
+}
+
+function onloadHandler()
+{
+    setupEventListeners();
+    runTest();
+}
+</script>
+</head>
+
+<body _onload_="onloadHandler()">
+<p>
+Tests event listeners output in the Elements sidebar panel.
+</p>
+
+<button id="node">Inspect Me</button>
+
+</body>
+</html>

Added: trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt (0 => 89317)


--- trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/inspector/elements/event-listener-sidebar-expected.txt	2011-06-21 00:01:18 UTC (rev 89317)
@@ -0,0 +1,64 @@
+Tests event listeners output in the Elements sidebar panel.
+
+Inspect Me
+
+======== click ========
+[expanded] document event-listener-sidebar.html:19
+    isAttribute: false
+    lineNumber: 19
+    listenerBody: function (event) { console.log("click - document - capturing"); }
+    node: HTMLDocument
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: true
+[expanded] button#node event-listener-sidebar.html:15
+    isAttribute: false
+    lineNumber: 15
+    listenerBody: function (event) { console.log("click - button - capturing"); }
+    node: HTMLButtonElement
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: true
+[expanded] button#node event-listener-sidebar.html:12
+    isAttribute: false
+    lineNumber: 12
+    listenerBody: function clickHandler(event) { console.log("click - button - bubbling (registered before attribute)"); }
+    node: HTMLButtonElement
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+[expanded] button#node event-listener-sidebar.html:16
+    isAttribute: true
+    lineNumber: 16
+    listenerBody: function (event) { console.log("click - button - attribute"); }
+    node: HTMLButtonElement
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+[expanded] button#node event-listener-sidebar.html:17
+    isAttribute: false
+    lineNumber: 17
+    listenerBody: function (event) { console.log("click - button - bubbling (registered after attribute)"); }
+    node: HTMLButtonElement
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+[expanded] document event-listener-sidebar.html:6
+    isAttribute: true
+    lineNumber: 6
+    listenerBody: function documentClickHandler(event) { console.log("click - document - attribute"); }
+    node: HTMLDocument
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: click
+    useCapture: false
+
+======== hover ========
+[expanded] button#node event-listener-sidebar.html:14
+    isAttribute: false
+    lineNumber: 14
+    listenerBody: function hoverHandler(event) { console.log("hover - button - bubbling"); }
+    node: HTMLButtonElement
+    sourceName: file:///mnt/git/webkit-commit-queue/LayoutTests/inspector/elements/event-listener-sidebar.html
+    type: hover
+    useCapture: false
+

Modified: trunk/Source/WebCore/ChangeLog (89316 => 89317)


--- trunk/Source/WebCore/ChangeLog	2011-06-21 00:01:04 UTC (rev 89316)
+++ trunk/Source/WebCore/ChangeLog	2011-06-21 00:01:18 UTC (rev 89317)
@@ -1,5 +1,19 @@
 2011-06-20  Joseph Pecoraro  <[email protected]>
 
+        Reviewed by Pavel Feldman.
+
+        Web Inspector: CRASH if Expanding Event Listener on document
+        https://bugs.webkit.org/show_bug.cgi?id=61834
+
+        Node::ownerDocument returns null for a document node. So, in
+        the case of a document node in resolveNode, use Node::document
+        which returns the node, as a document.
+
+        * inspector/InspectorDOMAgent.cpp:
+        (WebCore::InspectorDOMAgent::resolveNode):
+
+2011-06-20  Joseph Pecoraro  <[email protected]>
+
         Reviewed by Simon Fraser.
 
         Minimize memory due to layer backing stores for pages in the Page Cache

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp (89316 => 89317)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2011-06-21 00:01:04 UTC (rev 89316)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2011-06-21 00:01:18 UTC (rev 89317)
@@ -1447,7 +1447,7 @@
 
 PassRefPtr<InspectorObject> InspectorDOMAgent::resolveNode(Node* node)
 {
-    Document* document = node->ownerDocument();
+    Document* document = node->isDocumentNode() ? node->document() : node->ownerDocument();
     Frame* frame = document ? document->frame() : 0;
     if (!frame)
         return 0;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to