Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Unified Diff: LayoutTests/fast/events/touch/multi-touch-partial-sequence.html

Issue 259413003: Correctly handle touch events that contain touches not previously reported to blink (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rjkroege cr Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/events/touch/multi-touch-partial-sequence.html
diff --git a/LayoutTests/fast/events/touch/multi-touch-partial-sequence.html b/LayoutTests/fast/events/touch/multi-touch-partial-sequence.html
new file mode 100644
index 0000000000000000000000000000000000000000..b3e2f66206c1ee2fa4c32f52ba15cb6e267f59b4
--- /dev/null
+++ b/LayoutTests/fast/events/touch/multi-touch-partial-sequence.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../../../resources/js-test.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="target" style="padding: 10px; background-color: blue;"></div>
+<div id="console"></div>
+<script>
+description("Tests that events are received properly even when we never saw the touchstart for the first finger (eg. was skipped by cc touch hit testing) - crbug.com/363321");
+
+var event;
+var expectingStart = false;
+var expectingEnd = false;
+
+var target = document.getElementById('target');
+var rect = target.getBoundingClientRect();
+var targetX = rect.left + rect.width / 2;
+var targetY = rect.top + rect.height / 2;
+
+window.addEventListener('touchstart', function(e) {
+ if (!expectingStart) {
+ testFailed('Got unexpected touchstart event');
+ return;
+ }
+ expectingStart = false;
+ event = e;
+
+ shouldBe('event.target', 'target');
+
+ // Touch ID 0 is the one we never got a touchstart for, so it should
+ // be targetted at the document.
+ shouldBe('event.touches.length', '2');
+ shouldBe('event.touches[0].identifier', '0');
+ shouldBe('event.touches[0].pageX', '12');
+ shouldBe('event.touches[0].pageY', '0');
+ shouldBe('event.touches[0].target', 'document');
+
+ // Touch ID 1 should be the new touch.
+ shouldBe('event.touches[1].identifier', '1');
+ shouldBe('event.touches[1].pageX', 'targetX');
+ shouldBe('event.touches[1].pageY', 'targetY');
+ shouldBe('event.touches[1].target', 'target');
+
+ shouldBe('event.changedTouches.length', '1');
+ shouldBe('event.changedTouches[0].identifier', '1');
+
+ shouldBe('event.targetTouches.length', '1');
+ shouldBe('event.targetTouches[0].identifier', '1');
+});
+
+window.addEventListener('touchmove', function(e) {
+ testFailed('Got unexpected touchmove event');
+});
+
+window.addEventListener('touchend', function(e) {
+ if (!expectingEnd) {
+ testFailed('Got unexpected touchstart event');
+ return;
+ }
+ expectingEnd = false;
+ event = e;
+
+ shouldBe('event.target', 'target');
+
+ shouldBe('event.touches.length', '0');
+
+ shouldBe('event.changedTouches.length', '1');
+ shouldBe('event.changedTouches[0].identifier', '1');
+ shouldBe('event.changedTouches[0].pageX', 'targetX');
+ shouldBe('event.changedTouches[0].pageY', 'targetY');
+ shouldBe('event.changedTouches[0].target', 'target');
+
+ shouldBe('event.targetTouches.length', '0');
+});
+
+if (document.elementFromPoint(targetX, targetY) != target) {
+ testFailed('Failed to hit expected target at ' + targetX + ',' + targetY);
+} else if (!window.eventSender) {
+ testFailed('This test requires eventSender');
+} else {
+ eventSender.clearTouchPoints();
+
+ // First touch point is outside our target, but we never actually
+ // get a touchstart event sent to the renderer for it.
+ eventSender.addTouchPoint(10, 0);
+ eventSender.updateTouchPoint(0, 12, 0);
+
+ // Second point is on our target and we expect touchstart
+ eventSender.addTouchPoint(targetX, targetY);
+ debug('Sending touchstart event.');
+ expectingStart = true;
+ eventSender.touchStart();
+ if (expectingStart)
+ testFailed("Didn't receive expected touchstart event");
+ debug('');
+
+ // Make sure we don't get any events (or crash) if we receive a move or
+ // end for just the first touch point.
+ debug('Sending touchmove and touchend for unrelated touch point.');
+ eventSender.updateTouchPoint(0, 13, 0);
+ eventSender.touchMove();
+ eventSender.releaseTouchPoint(0);
+ eventSender.touchEnd();
+ debug('');
+
+ // If the 2nd touch point lifts, we get an event showing just that change.
+ debug('Sending touchend.');
+ eventSender.releaseTouchPoint(0);
+ expectingEnd = true;
+ eventSender.touchEnd();
+ if (expectingEnd)
+ testFailed("Didn't receive expected touchend event");
+ debug('');
+}
+</script>
+</body>
+</html>
+

Powered by Google App Engine
This is Rietveld 408576698