- 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;