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