Title: [190939] releases/WebKitGTK/webkit-2.10
Revision
190939
Author
[email protected]
Date
2015-10-13 02:39:04 -0700 (Tue, 13 Oct 2015)

Log Message

Merge r190153 - Event fired on a detached node does not bubble up
https://bugs.webkit.org/show_bug.cgi?id=149488

Reviewed by Antti Koivisto.

LayoutTests/imported/w3c:

Rebaselined a test now that one more test case passes.

* web-platform-tests/dom/events/EventTarget-dispatchEvent-expected.txt:

Source/WebCore:

The bug was caused by an explicit check inside EventPath to match an old Firefox behavior (see r19897).
Since Firefox's behavior has changed to match DOM4: https://dom.spec.whatwg.org/#concept-event-dispatch

Fixed the bug by removing the check. The new behavior matches DO4 and behaviors of Firefox and Chrome.

Test: fast/events/event-propagation-in-detached-tree.html

* dom/EventDispatcher.cpp:
(WebCore::EventPath::EventPath):

LayoutTests:

Added a regression test. Also modified and rebaselined mouseout-dead-node.html added in r19897
since our new behavior matches that of the latest Firefox as well as Chrome.

* fast/events/event-propagation-in-detached-tree-expected.txt: Added.
* fast/events/event-propagation-in-detached-tree.html: Added.
* fast/events/mouseout-dead-node-expected.txt:
* fast/events/mouseout-dead-node.html:

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/ChangeLog	2015-10-13 09:39:04 UTC (rev 190939)
@@ -1,3 +1,18 @@
+2015-09-22  Ryosuke Niwa  <[email protected]>
+
+        Event fired on a detached node does not bubble up
+        https://bugs.webkit.org/show_bug.cgi?id=149488
+
+        Reviewed by Antti Koivisto.
+
+        Added a regression test. Also modified and rebaselined mouseout-dead-node.html added in r19897
+        since our new behavior matches that of the latest Firefox as well as Chrome.
+
+        * fast/events/event-propagation-in-detached-tree-expected.txt: Added.
+        * fast/events/event-propagation-in-detached-tree.html: Added.
+        * fast/events/mouseout-dead-node-expected.txt:
+        * fast/events/mouseout-dead-node.html:
+
 2015-09-22  sangdeug.kim  <[email protected]>
 
         Add test for checking currentTime of mediacontroller when playback is completed.

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree-expected.txt (0 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree-expected.txt	2015-10-13 09:39:04 UTC (rev 190939)
@@ -0,0 +1,25 @@
+Tests dispatching an event that bubbles inside a detached tree. The event should propagate to the ancestors of the target
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+clonedRoot = cloneNode(root)
+clonedTarget = clonedRoot.getElementById("target"); dispatchEventWithLog(clonedTarget);
+PASS clonedRoot instanceof DocumentFragment is true
+PASS log.length is 4
+PASS log[0] is [clonedTarget, clonedTarget]
+PASS log[1] is [clonedTarget.parentNode, clonedTarget]
+PASS log[2] is [clonedTarget.parentNode.parentNode, clonedTarget]
+PASS log[3] is [clonedRoot, clonedTarget]
+PASS clonedRoot.parentNode is null
+
+root.remove(); dispatchEventWithLog(target);
+PASS log.length is 3
+PASS log[0] is [target, target]
+PASS log[1] is [target.parentNode, target]
+PASS log[2] is [root, target]
+PASS root.parentNode is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree.html (0 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/event-propagation-in-detached-tree.html	2015-10-13 09:39:04 UTC (rev 190939)
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<body>
+<div id="root">
+    <span>
+        <span id="target"></span>
+    </span>
+</div>
+<script src=""
+<script>
+
+description('Tests dispatching an event that bubbles inside a detached tree. The event should propagate to the ancestors of the target');
+
+var log;
+
+function dispatchEventWithLog(target) {
+    log = [];
+    for (var node = target; node; node = node.parentNode)
+        node.addEventListener('foo', (function (event) { log.push([this, event.target]); }).bind(node));
+    target.dispatchEvent(new Event("foo", {bubbles: true}));
+}
+
+function cloneNode(node) {
+    range = new Range;
+    range.selectNode(node);
+    return range.cloneContents();
+}
+
+var target = document.getElementById("target");
+var root = document.getElementById("root");
+
+evalAndLog('clonedRoot = cloneNode(root)');
+evalAndLog('clonedTarget = clonedRoot.getElementById("target"); dispatchEventWithLog(clonedTarget);');
+
+shouldBeTrue('clonedRoot instanceof DocumentFragment');
+shouldBe('log.length', '4');
+shouldBe('log[0]', '[clonedTarget, clonedTarget]');
+shouldBe('log[1]', '[clonedTarget.parentNode, clonedTarget]');
+shouldBe('log[2]', '[clonedTarget.parentNode.parentNode, clonedTarget]');
+shouldBe('log[3]', '[clonedRoot, clonedTarget]');
+shouldBeNull('clonedRoot.parentNode');
+
+debug('');
+evalAndLog('root.remove(); dispatchEventWithLog(target);');
+
+shouldBe('log.length', '3');
+shouldBe('log[0]', '[target, target]');
+shouldBe('log[1]', '[target.parentNode, target]');
+shouldBe('log[2]', '[root, target]');
+shouldBeNull('root.parentNode');
+
+var successfullyParsed = true;
+
+</script>
+<script src=""
+</body>
+</html>

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node-expected.txt (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node-expected.txt	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node-expected.txt	2015-10-13 09:39:04 UTC (rev 190939)
@@ -3,8 +3,10 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS mouseout
-PASS mouseout
+PASS mouseout 1
+PASS mouseout 2
+PASS mouseout 3
+PASS mouseout 4
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node.html (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node.html	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/fast/events/mouseout-dead-node.html	2015-10-13 09:39:04 UTC (rev 190939)
@@ -7,16 +7,16 @@
 <p id="description"></p>
 <div id="test-container">
 <div id=d0 style='border:2px solid red'>
-<div _onmouseout_='testFailed("mouseout")'  _onmouseover_='document.getElementById("d0").innerHTML ="you should see PASS below"'>
-<div _onmouseout_='testFailed("mouseout")'>
-<span id=target1 _onmouseout_='testPassed("mouseout")' >
+<div _onmouseout_='testPassed("mouseout 3")'  _onmouseover_='document.getElementById("d0").innerHTML ="you should see PASS below"'>
+<div _onmouseout_='testPassed("mouseout 2")'>
+<span id=target1 _onmouseout_='testPassed("mouseout 1")' >
 mouse over me
 </span>
 </div>
 </div>
 </div>
 <div id=d1 style='border:2px solid blue'>
-<div id=target2 _onmouseout_='testPassed("mouseout")'  _onmouseover_='document.getElementById("d1").innerHTML ="you should see PASS below"' >
+<div id=target2 _onmouseout_='testPassed("mouseout 4")'  _onmouseover_='document.getElementById("d1").innerHTML ="you should see PASS below"' >
 mouse over me
 </div>
 </div>

Modified: releases/WebKitGTK/webkit-2.10/LayoutTests/imported/w3c/ChangeLog (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/LayoutTests/imported/w3c/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/LayoutTests/imported/w3c/ChangeLog	2015-10-13 09:39:04 UTC (rev 190939)
@@ -1,3 +1,14 @@
+2015-09-22  Ryosuke Niwa  <[email protected]>
+
+        Event fired on a detached node does not bubble up
+        https://bugs.webkit.org/show_bug.cgi?id=149488
+
+        Reviewed by Antti Koivisto.
+
+        Rebaselined a test now that one more test case passes.
+
+        * web-platform-tests/dom/events/EventTarget-dispatchEvent-expected.txt:
+
 2015-09-13  Chris Dumez  <[email protected]>
 
         Document.title does not behave according to specification

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2015-10-13 09:39:04 UTC (rev 190939)
@@ -1,3 +1,20 @@
+2015-09-22  Ryosuke Niwa  <[email protected]>
+
+        Event fired on a detached node does not bubble up
+        https://bugs.webkit.org/show_bug.cgi?id=149488
+
+        Reviewed by Antti Koivisto.
+
+        The bug was caused by an explicit check inside EventPath to match an old Firefox behavior (see r19897).
+        Since Firefox's behavior has changed to match DOM4: https://dom.spec.whatwg.org/#concept-event-dispatch
+
+        Fixed the bug by removing the check. The new behavior matches DO4 and behaviors of Firefox and Chrome.
+
+        Test: fast/events/event-propagation-in-detached-tree.html
+
+        * dom/EventDispatcher.cpp:
+        (WebCore::EventPath::EventPath):
+
 2015-09-22  Tim Horton  <[email protected]>
 
         Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/dom/EventDispatcher.cpp (190938 => 190939)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/dom/EventDispatcher.cpp	2015-10-13 09:35:51 UTC (rev 190938)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/dom/EventDispatcher.cpp	2015-10-13 09:39:04 UTC (rev 190939)
@@ -415,7 +415,6 @@
 
 EventPath::EventPath(Node& targetNode, Event& event)
 {
-    bool inDocument = targetNode.inDocument();
     bool isSVGElement = targetNode.isSVGElement();
     bool isMouseOrFocusEvent = event.isMouseEvent() || event.isFocusEvent();
 #if ENABLE(TOUCH_EVENTS) && !PLATFORM(IOS)
@@ -437,8 +436,6 @@
 #endif
             else
                 m_path.append(std::make_unique<EventContext>(node, currentTarget, target));
-            if (!inDocument)
-                return;
             if (is<ShadowRoot>(*node))
                 break;
         }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to