Title: [202531] trunk
Revision
202531
Author
[email protected]
Date
2016-06-27 18:13:53 -0700 (Mon, 27 Jun 2016)

Log Message

Adopt the iOS TouchEventHandler API for cases that must have synchronous dispatch
https://bugs.webkit.org/show_bug.cgi?id=159179
rdar://problem/27006387

Reviewed by Simon Fraser.

Source/WebCore:

Tests: fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html
       fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html
       fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html
       fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html
       fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html
       fast/events/touch/ios/drag-block-without-overflow-scroll.html

* dom/Document.cpp:
(WebCore::Document::prepareForDestruction):
(WebCore::Document::removeAllEventListeners):
* dom/Node.cpp:
(WebCore::Node::willBeDeletedFrom):
(WebCore::tryAddEventListener):
(WebCore::tryRemoveEventListener):
* html/shadow/SliderThumbElement.cpp:
(WebCore::SliderThumbElement::registerForTouchEvents):
(WebCore::SliderThumbElement::unregisterForTouchEvents):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::registerAsTouchEventListenerForScrolling):
(WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling):

LayoutTests:

Several of those tests expose existing bugs with overflow scrolling.
They are not using PASS/FAIL at the moment, just dump the called listeners.

* fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state-expected.txt: Added.
* fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html: Added.
* fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state-expected.txt: Added.
* fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html: Added.
* fast/events/touch/ios/block-without-overflow-scroll-scrolling-state-expected.txt: Added.
* fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block-expected.txt: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document-expected.txt: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll-expected.txt: Added.
* fast/events/touch/ios/drag-block-without-overflow-scroll.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (202530 => 202531)


--- trunk/LayoutTests/ChangeLog	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/LayoutTests/ChangeLog	2016-06-28 01:13:53 UTC (rev 202531)
@@ -1,3 +1,27 @@
+2016-06-27  Benjamin Poulain  <[email protected]>
+
+        Adopt the iOS TouchEventHandler API for cases that must have synchronous dispatch
+        https://bugs.webkit.org/show_bug.cgi?id=159179
+        rdar://problem/27006387
+
+        Reviewed by Simon Fraser.
+
+        Several of those tests expose existing bugs with overflow scrolling.
+        They are not using PASS/FAIL at the moment, just dump the called listeners.
+
+        * fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state-expected.txt: Added.
+        * fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html: Added.
+        * fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state-expected.txt: Added.
+        * fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html: Added.
+        * fast/events/touch/ios/block-without-overflow-scroll-scrolling-state-expected.txt: Added.
+        * fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block-expected.txt: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document-expected.txt: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll-expected.txt: Added.
+        * fast/events/touch/ios/drag-block-without-overflow-scroll.html: Added.
+
 2016-06-27  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: When modifying sessionStorage, localStorage gets updated

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,15 @@
+Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it even with asynchronous listeners.
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (synchronous event dispatch region for event touchend
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchstart
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchforcechange
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchmove
+    at (8,8) size 784x200)
+)
+

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=1">
+    <script>
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function runTest()
+        {
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.scrollTop = 5;
+            eventTarget.scrollTop = 0;
+            if (window.testRunner) {
+                document.getElementById("output").innerText = window.internals.scrollingStateTreeAsText();
+                testRunner.notifyDone();
+            }
+        }
+        function testSetup()
+        {
+            let eventTarget = document.getElementById("eventTarget");
+            function touchEventHandler(event) { throw "This is not supposed to happen!"; }
+            eventTarget.addEventListener('touchstart', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchmove', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchend', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchcancel', touchEventHandler, { 'passive': true });
+            setTimeout(runTest, 15);
+        }
+
+        window.addEventListener('load', testSetup, false);
+    </script>
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p>Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it even with asynchronous listeners.</p>
+    <pre id="output">
+    </pre>
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,17 @@
+Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it even within a asynchronous dispatch region.
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (asynchronous event dispatch region
+    at (0,0) size 800x600)
+  (synchronous event dispatch region for event touchend
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchstart
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchforcechange
+    at (8,8) size 784x200)
+  (synchronous event dispatch region for event touchmove
+    at (8,8) size 784x200)
+)
+

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=1">
+    <script>
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function touchEventHandler(event) { throw "This is not supposed to happen!"; }
+        document.addEventListener('touchstart', touchEventHandler, { 'passive': true });
+        document.addEventListener('touchmove', touchEventHandler, { 'passive': true });
+        document.addEventListener('touchend', touchEventHandler, { 'passive': true });
+        document.addEventListener('touchcancel', touchEventHandler, { 'passive': true });
+
+        function runTest()
+        {
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.scrollTop = 5;
+            eventTarget.scrollTop = 0;
+            if (window.testRunner) {
+                document.getElementById("output").innerText = window.internals.scrollingStateTreeAsText();
+                testRunner.notifyDone();
+            }
+        }
+
+        window.addEventListener('load', function() { setTimeout(runTest, 15); }, false);
+    </script>
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p>Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it even within a asynchronous dispatch region.</p>
+    <pre id="output">
+    </pre>
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,15 @@
+Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it.
+
+(Frame scrolling node
+  (scrollable area size 800 600)
+  (contents size 800 600)
+  (synchronous event dispatch region for event touchend
+    at (0,0) size 800x200)
+  (synchronous event dispatch region for event touchstart
+    at (0,0) size 800x200)
+  (synchronous event dispatch region for event touchforcechange
+    at (0,0) size 800x200)
+  (synchronous event dispatch region for event touchmove
+    at (0,0) size 800x200)
+)
+

Added: trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body {
+            margin: 0;
+        }
+    </style>
+    <meta name="viewport" content="initial-scale=1">
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p id="description">Verify that the block scrolling on overflow has touch event region with synchronous dispatch associated with it.</p>
+    <pre id="output">
+    </pre>
+    <script>
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+
+        function runTest()
+        {
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.scrollTop = 5;
+            eventTarget.scrollTop = 0;
+            document.getElementById("output").innerText = window.internals.scrollingStateTreeAsText();
+            testRunner.notifyDone();
+        }
+
+        window.addEventListener('load', function() { setTimeout(runTest, 15); }, false);
+    </script>
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,24 @@
+Test scrolling on a block without -webkit-overflow-scrolling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+    PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop is 0
+PASS document.getElementById('eventTarget').scrollLeft is 0
+Received cancelable event touchstart at 50, 150
+Received cancelable event touchmove at 50, 50
+PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop > 0 is true
+PASS document.getElementById('eventTarget').scrollLeft is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <script src=""
+    <style>
+        body {
+            margin: 0;
+        }
+    </style>
+    <meta name="viewport" content="initial-scale=1">
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p id="description"></p>
+    <div id="console">
+    </div>
+    <script>
+        description("Test scrolling on a block without -webkit-overflow-scrolling.");
+        window.jsTestIsAsync = true;
+
+        function getDragUIScript(startX, startY, endX, endY)
+        {
+            return `
+            (function() {
+                uiController.dragFromPointToPoint(${startX}, ${startY}, ${endX}, ${endY}, 0.15, function() {
+                    uiController.uiScriptComplete("Dispatched Drag");
+                });
+            })();`
+        }
+
+        function runTest()
+        {
+            function scrollEventHandler(event) {
+                shouldBe("window.scrollX", "0");
+                shouldBe("window.scrollY", "0");
+                shouldBe("document.documentElement.scrollTop", "0");
+                shouldBe("document.documentElement.scrollLeft", "0");
+                shouldBeTrue("document.getElementById('eventTarget').scrollTop > 0");
+                shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+                finishJSTest();
+            }
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.addEventListener("scroll", scrollEventHandler);
+
+            function touchEventHandler(event) {
+                debug("Received" + (event.cancelable ? " cancelable" : "") + " event " + event.type + " at " + event.touches[0].clientX + ", " + event.touches[0].clientY);
+            }
+            eventTarget.addEventListener('touchstart', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchmove', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchend', touchEventHandler, { 'passive': true });
+            eventTarget.addEventListener('touchcancel', touchEventHandler, { 'passive': true });
+
+            if (window.testRunner) {
+                testRunner.runUIScript(getDragUIScript(50, 150, 50, 50), function(result) {
+                    debug(result);
+                });
+            }
+
+            shouldBe("window.scrollX", "0");
+            shouldBe("window.scrollY", "0");
+            shouldBe("document.documentElement.scrollTop", "0");
+            shouldBe("document.documentElement.scrollLeft", "0");
+            shouldBe("document.getElementById('eventTarget').scrollTop", "0");
+            shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+        }
+
+        window.addEventListener('load', runTest, false);
+    </script>
+    <script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,24 @@
+Test scrolling on a block without -webkit-overflow-scrolling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+    PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop is 0
+PASS document.getElementById('eventTarget').scrollLeft is 0
+Received cancelable event touchstart at 50, 150
+Received cancelable event touchmove at 50, 50
+PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop > 0 is true
+PASS document.getElementById('eventTarget').scrollLeft is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <script src=""
+    <style>
+        body {
+            margin: 0;
+        }
+    </style>
+    <meta name="viewport" content="initial-scale=1">
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p id="description"></p>
+    <div id="console">
+    </div>
+    <script>
+        description("Test scrolling on a block without -webkit-overflow-scrolling.");
+        window.jsTestIsAsync = true;
+
+        function getDragUIScript(startX, startY, endX, endY)
+        {
+            return `
+            (function() {
+                uiController.dragFromPointToPoint(${startX}, ${startY}, ${endX}, ${endY}, 0.15, function() {
+                    uiController.uiScriptComplete("Dispatched Drag");
+                });
+            })();`
+        }
+
+        function runTest()
+        {
+            function scrollEventHandler(event) {
+                shouldBe("window.scrollX", "0");
+                shouldBe("window.scrollY", "0");
+                shouldBe("document.documentElement.scrollTop", "0");
+                shouldBe("document.documentElement.scrollLeft", "0");
+                shouldBeTrue("document.getElementById('eventTarget').scrollTop > 0");
+                shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+                finishJSTest();
+            }
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.addEventListener("scroll", scrollEventHandler);
+
+            function touchEventHandler(event) {
+                debug("Received" + (event.cancelable ? " cancelable" : "") + " event " + event.type + " at " + event.touches[0].clientX + ", " + event.touches[0].clientY);
+            }
+            document.addEventListener('touchstart', touchEventHandler, { 'passive': true });
+            document.addEventListener('touchmove', touchEventHandler, { 'passive': true });
+            document.addEventListener('touchend', touchEventHandler, { 'passive': true });
+            document.addEventListener('touchcancel', touchEventHandler, { 'passive': true });
+
+            if (window.testRunner) {
+                testRunner.runUIScript(getDragUIScript(50, 150, 50, 50), function(result) {
+                    debug(result);
+                });
+            }
+
+            shouldBe("window.scrollX", "0");
+            shouldBe("window.scrollY", "0");
+            shouldBe("document.documentElement.scrollTop", "0");
+            shouldBe("document.documentElement.scrollLeft", "0");
+            shouldBe("document.getElementById('eventTarget').scrollTop", "0");
+            shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+        }
+
+        window.addEventListener('load', runTest, false);
+    </script>
+    <script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-expected.txt (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll-expected.txt	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,23 @@
+Test scrolling on a block without -webkit-overflow-scrolling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+    PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop is 0
+PASS document.getElementById('eventTarget').scrollLeft is 0
+scrollEventHandler called.
+PASS window.scrollX is 0
+PASS window.scrollY is 0
+PASS document.documentElement.scrollTop is 0
+PASS document.documentElement.scrollLeft is 0
+PASS document.getElementById('eventTarget').scrollTop > 0 is true
+PASS document.getElementById('eventTarget').scrollLeft is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll.html (0 => 202531)


--- trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/touch/ios/drag-block-without-overflow-scroll.html	2016-06-28 01:13:53 UTC (rev 202531)
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <script src=""
+    <style>
+        body {
+            margin: 0;
+        }
+    </style>
+    <meta name="viewport" content="initial-scale=1">
+</head>
+<body>
+    <div id="eventTarget" style="overflow: scroll; height: 200px">
+        <div style="height: 3000px"></div>
+    </div>
+    <p id="description"></p>
+    <div id="console">
+    </div>
+    <script>
+        description("Test scrolling on a block without -webkit-overflow-scrolling.");
+        window.jsTestIsAsync = true;
+
+        function getDragUIScript(startX, startY, endX, endY)
+        {
+            return `
+            (function() {
+                uiController.dragFromPointToPoint(${startX}, ${startY}, ${endX}, ${endY}, 0.15, function() {
+                    uiController.uiScriptComplete("Dispatched Drag");
+                });
+            })();`
+        }
+
+        function runTest()
+        {
+            function scrollEventHandler(event) {
+                debug("scrollEventHandler called.");
+                shouldBe("window.scrollX", "0");
+                shouldBe("window.scrollY", "0");
+                shouldBe("document.documentElement.scrollTop", "0");
+                shouldBe("document.documentElement.scrollLeft", "0");
+                shouldBeTrue("document.getElementById('eventTarget').scrollTop > 0");
+                shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+                finishJSTest();
+            }
+            let eventTarget = document.getElementById("eventTarget");
+            eventTarget.addEventListener("scroll", scrollEventHandler);
+
+            if (window.testRunner) {
+                testRunner.runUIScript(getDragUIScript(50, 150, 50, 50), function(result) { });
+            }
+
+            shouldBe("window.scrollX", "0");
+            shouldBe("window.scrollY", "0");
+            shouldBe("document.documentElement.scrollTop", "0");
+            shouldBe("document.documentElement.scrollLeft", "0");
+            shouldBe("document.getElementById('eventTarget').scrollTop", "0");
+            shouldBe("document.getElementById('eventTarget').scrollLeft", "0");
+        }
+
+        window.addEventListener('load', runTest, false);
+    </script>
+    <script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (202530 => 202531)


--- trunk/Source/WebCore/ChangeLog	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/Source/WebCore/ChangeLog	2016-06-28 01:13:53 UTC (rev 202531)
@@ -1,3 +1,32 @@
+2016-06-27  Benjamin Poulain  <[email protected]>
+
+        Adopt the iOS TouchEventHandler API for cases that must have synchronous dispatch
+        https://bugs.webkit.org/show_bug.cgi?id=159179
+        rdar://problem/27006387
+
+        Reviewed by Simon Fraser.
+
+        Tests: fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-block-scrolling-state.html
+               fast/events/touch/ios/block-without-overflow-scroll-and-passive-observer-on-document-scrolling-state.html
+               fast/events/touch/ios/block-without-overflow-scroll-scrolling-state.html
+               fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-block.html
+               fast/events/touch/ios/drag-block-without-overflow-scroll-and-passive-observer-on-document.html
+               fast/events/touch/ios/drag-block-without-overflow-scroll.html
+
+        * dom/Document.cpp:
+        (WebCore::Document::prepareForDestruction):
+        (WebCore::Document::removeAllEventListeners):
+        * dom/Node.cpp:
+        (WebCore::Node::willBeDeletedFrom):
+        (WebCore::tryAddEventListener):
+        (WebCore::tryRemoveEventListener):
+        * html/shadow/SliderThumbElement.cpp:
+        (WebCore::SliderThumbElement::registerForTouchEvents):
+        (WebCore::SliderThumbElement::unregisterForTouchEvents):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::registerAsTouchEventListenerForScrolling):
+        (WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling):
+
 2016-06-27  Alex Christensen  <[email protected]>
 
         Fix Windows build.

Modified: trunk/Source/WebCore/dom/Document.cpp (202530 => 202531)


--- trunk/Source/WebCore/dom/Document.cpp	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/Source/WebCore/dom/Document.cpp	2016-06-28 01:13:53 UTC (rev 202531)
@@ -2332,7 +2332,7 @@
         return;
 
 #if ENABLE(IOS_TOUCH_EVENTS)
-    clearTouchEventListeners();
+    clearTouchEventHandlersAndListeners();
 #endif
 
 #if HAVE(ACCESSIBILITY)
@@ -2401,7 +2401,7 @@
     if (m_domWindow)
         m_domWindow->removeAllEventListeners();
 #if ENABLE(IOS_TOUCH_EVENTS)
-    clearTouchEventListeners();
+    clearTouchEventHandlersAndListeners();
 #endif
     for (Node* node = firstChild(); node; node = NodeTraversal::next(*node))
         node->removeAllEventListeners();

Modified: trunk/Source/WebCore/dom/Node.cpp (202530 => 202531)


--- trunk/Source/WebCore/dom/Node.cpp	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/Source/WebCore/dom/Node.cpp	2016-06-28 01:13:53 UTC (rev 202531)
@@ -317,6 +317,7 @@
         document.didRemoveWheelEventHandler(*this, EventHandlerRemoval::All);
 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS)
         document.removeTouchEventListener(this, true);
+        document.removeTouchEventHandler(this, true);
 #else
         // FIXME: This should call didRemoveTouchEventHandler().
 #endif
@@ -1933,7 +1934,7 @@
 
 #if ENABLE(IOS_GESTURE_EVENTS) && ENABLE(TOUCH_EVENTS)
     if (eventType == eventNames().gesturestartEvent || eventType == eventNames().gesturechangeEvent || eventType == eventNames().gestureendEvent)
-        targetNode->document().addTouchEventListener(targetNode);
+        targetNode->document().addTouchEventHandler(targetNode);
 #endif
 
     return true;
@@ -1974,7 +1975,7 @@
 
 #if ENABLE(IOS_GESTURE_EVENTS) && ENABLE(TOUCH_EVENTS)
     if (eventType == eventNames().gesturestartEvent || eventType == eventNames().gesturechangeEvent || eventType == eventNames().gestureendEvent)
-        targetNode->document().removeTouchEventListener(targetNode);
+        targetNode->document().removeTouchEventHandler(targetNode);
 #endif
 
     return true;

Modified: trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp (202530 => 202531)


--- trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp	2016-06-28 01:13:53 UTC (rev 202531)
@@ -550,7 +550,7 @@
 
     ASSERT(shouldAcceptTouchEvents());
 
-    document().addTouchEventListener(this);
+    document().addTouchEventHandler(this);
     m_isRegisteredAsTouchEventListener = true;
 }
 
@@ -562,7 +562,7 @@
     clearExclusiveTouchIdentifier();
     stopDragging();
 
-    document().removeTouchEventListener(this);
+    document().removeTouchEventHandler(this);
     m_isRegisteredAsTouchEventListener = false;
 }
 

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (202530 => 202531)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2016-06-28 01:00:25 UTC (rev 202530)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2016-06-28 01:13:53 UTC (rev 202531)
@@ -2188,7 +2188,7 @@
     if (!renderer().element() || m_registeredAsTouchEventListenerForScrolling)
         return;
     
-    renderer().document().addTouchEventListener(renderer().element());
+    renderer().document().addTouchEventHandler(renderer().element());
     m_registeredAsTouchEventListenerForScrolling = true;
 }
 
@@ -2197,7 +2197,7 @@
     if (!renderer().element() || !m_registeredAsTouchEventListenerForScrolling)
         return;
 
-    renderer().document().removeTouchEventListener(renderer().element());
+    renderer().document().removeTouchEventHandler(renderer().element());
     m_registeredAsTouchEventListenerForScrolling = false;
 }
 #endif // ENABLE(IOS_TOUCH_EVENTS)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to