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

Side by Side 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, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../../resources/js-test.js"></script>
5 </head>
6 <body>
7 <p id="description"></p>
8 <div id="target" style="padding: 10px; background-color: blue;"></div>
9 <div id="console"></div>
10 <script>
11 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) - crbu g.com/363321");
12
13 var event;
14 var expectingStart = false;
15 var expectingEnd = false;
16
17 var target = document.getElementById('target');
18 var rect = target.getBoundingClientRect();
19 var targetX = rect.left + rect.width / 2;
20 var targetY = rect.top + rect.height / 2;
21
22 window.addEventListener('touchstart', function(e) {
23 if (!expectingStart) {
24 testFailed('Got unexpected touchstart event');
25 return;
26 }
27 expectingStart = false;
28 event = e;
29
30 shouldBe('event.target', 'target');
31
32 // Touch ID 0 is the one we never got a touchstart for, so it should
33 // be targetted at the document.
34 shouldBe('event.touches.length', '2');
35 shouldBe('event.touches[0].identifier', '0');
36 shouldBe('event.touches[0].pageX', '12');
37 shouldBe('event.touches[0].pageY', '0');
38 shouldBe('event.touches[0].target', 'document');
39
40 // Touch ID 1 should be the new touch.
41 shouldBe('event.touches[1].identifier', '1');
42 shouldBe('event.touches[1].pageX', 'targetX');
43 shouldBe('event.touches[1].pageY', 'targetY');
44 shouldBe('event.touches[1].target', 'target');
45
46 shouldBe('event.changedTouches.length', '1');
47 shouldBe('event.changedTouches[0].identifier', '1');
48
49 shouldBe('event.targetTouches.length', '1');
50 shouldBe('event.targetTouches[0].identifier', '1');
51 });
52
53 window.addEventListener('touchmove', function(e) {
54 testFailed('Got unexpected touchmove event');
55 });
56
57 window.addEventListener('touchend', function(e) {
58 if (!expectingEnd) {
59 testFailed('Got unexpected touchstart event');
60 return;
61 }
62 expectingEnd = false;
63 event = e;
64
65 shouldBe('event.target', 'target');
66
67 shouldBe('event.touches.length', '0');
68
69 shouldBe('event.changedTouches.length', '1');
70 shouldBe('event.changedTouches[0].identifier', '1');
71 shouldBe('event.changedTouches[0].pageX', 'targetX');
72 shouldBe('event.changedTouches[0].pageY', 'targetY');
73 shouldBe('event.changedTouches[0].target', 'target');
74
75 shouldBe('event.targetTouches.length', '0');
76 });
77
78 if (document.elementFromPoint(targetX, targetY) != target) {
79 testFailed('Failed to hit expected target at ' + targetX + ',' + targetY);
80 } else if (!window.eventSender) {
81 testFailed('This test requires eventSender');
82 } else {
83 eventSender.clearTouchPoints();
84
85 // First touch point is outside our target, but we never actually
86 // get a touchstart event sent to the renderer for it.
87 eventSender.addTouchPoint(10, 0);
88 eventSender.updateTouchPoint(0, 12, 0);
89
90 // Second point is on our target and we expect touchstart
91 eventSender.addTouchPoint(targetX, targetY);
92 debug('Sending touchstart event.');
93 expectingStart = true;
94 eventSender.touchStart();
95 if (expectingStart)
96 testFailed("Didn't receive expected touchstart event");
97 debug('');
98
99 // Make sure we don't get any events (or crash) if we receive a move or
100 // end for just the first touch point.
101 debug('Sending touchmove and touchend for unrelated touch point.');
102 eventSender.updateTouchPoint(0, 13, 0);
103 eventSender.touchMove();
104 eventSender.releaseTouchPoint(0);
105 eventSender.touchEnd();
106 debug('');
107
108 // If the 2nd touch point lifts, we get an event showing just that change.
109 debug('Sending touchend.');
110 eventSender.releaseTouchPoint(0);
111 expectingEnd = true;
112 eventSender.touchEnd();
113 if (expectingEnd)
114 testFailed("Didn't receive expected touchend event");
115 debug('');
116 }
117 </script>
118 </body>
119 </html>
120
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698