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

Side by Side Diff: content/browser/renderer_host/input/touch_event_queue_unittest.cc

Issue 48973005: Move TouchEvent timeout code to the TouchEventQueue (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h"
9 #include "content/browser/renderer_host/input/timeout_monitor.h"
8 #include "content/browser/renderer_host/input/touch_event_queue.h" 10 #include "content/browser/renderer_host/input/touch_event_queue.h"
9 #include "content/common/input/synthetic_web_input_event_builders.h" 11 #include "content/common/input/synthetic_web_input_event_builders.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/WebKit/public/web/WebInputEvent.h" 13 #include "third_party/WebKit/public/web/WebInputEvent.h"
12 14
13 using blink::WebGestureEvent; 15 using blink::WebGestureEvent;
14 using blink::WebInputEvent; 16 using blink::WebInputEvent;
15 using blink::WebTouchEvent; 17 using blink::WebTouchEvent;
16 using blink::WebTouchPoint; 18 using blink::WebTouchPoint;
17 19
18 namespace content { 20 namespace content {
21 namespace {
22 const size_t kDefaultTouchTimeoutDelayMs = 10;
23 }
19 24
20 class TouchEventQueueTest : public testing::Test, 25 class TouchEventQueueTest : public testing::Test,
21 public TouchEventQueueClient { 26 public TouchEventQueueClient {
22 public: 27 public:
23 TouchEventQueueTest() 28 TouchEventQueueTest()
24 : sent_event_count_(0), 29 : sent_event_count_(0),
25 acked_event_count_(0), 30 acked_event_count_(0),
26 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {} 31 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {}
27 32
28 virtual ~TouchEventQueueTest() {} 33 virtual ~TouchEventQueueTest() {}
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 scoped_ptr<WebGestureEvent> followup_gesture_event = 65 scoped_ptr<WebGestureEvent> followup_gesture_event =
61 followup_gesture_event_.Pass(); 66 followup_gesture_event_.Pass();
62 queue_->OnGestureScrollEvent( 67 queue_->OnGestureScrollEvent(
63 GestureEventWithLatencyInfo(*followup_gesture_event, 68 GestureEventWithLatencyInfo(*followup_gesture_event,
64 ui::LatencyInfo())); 69 ui::LatencyInfo()));
65 } 70 }
66 } 71 }
67 72
68 protected: 73 protected:
69 74
75 void SetUpForTimeoutTesting(size_t timeout_delay_ms) {
76 queue_->SetAckTimeoutEnabled(true, timeout_delay_ms);
77 }
78
70 void SendTouchEvent(const WebTouchEvent& event) { 79 void SendTouchEvent(const WebTouchEvent& event) {
71 queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo())); 80 queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo()));
72 } 81 }
73 82
74 void SendTouchEvent() {
75 SendTouchEvent(touch_event_);
76 touch_event_.ResetPoints();
77 }
78
79 void SendGestureEvent(WebInputEvent::Type type) { 83 void SendGestureEvent(WebInputEvent::Type type) {
80 WebGestureEvent event; 84 WebGestureEvent event;
81 event.type = type; 85 event.type = type;
82 queue_->OnGestureScrollEvent( 86 queue_->OnGestureScrollEvent(
83 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); 87 GestureEventWithLatencyInfo(event, ui::LatencyInfo()));
84 } 88 }
85 89
86 void SendTouchEventACK(InputEventAckState ack_result) { 90 void SendTouchEventACK(InputEventAckState ack_result) {
87 queue_->ProcessTouchAck(ack_result, ui::LatencyInfo()); 91 queue_->ProcessTouchAck(ack_result, ui::LatencyInfo());
88 } 92 }
89 93
90 void SetFollowupEvent(const WebTouchEvent& event) { 94 void SetFollowupEvent(const WebTouchEvent& event) {
91 followup_touch_event_.reset(new WebTouchEvent(event)); 95 followup_touch_event_.reset(new WebTouchEvent(event));
92 } 96 }
93 97
94 void SetFollowupEvent(const WebGestureEvent& event) { 98 void SetFollowupEvent(const WebGestureEvent& event) {
95 followup_gesture_event_.reset(new WebGestureEvent(event)); 99 followup_gesture_event_.reset(new WebGestureEvent(event));
96 } 100 }
97 101
98 void SetSyncAckResult(InputEventAckState sync_ack_result) { 102 void SetSyncAckResult(InputEventAckState sync_ack_result) {
99 sync_ack_result_.reset(new InputEventAckState(sync_ack_result)); 103 sync_ack_result_.reset(new InputEventAckState(sync_ack_result));
100 } 104 }
101 105
102 int PressTouchPoint(int x, int y) { 106 void PressTouchPoint(int x, int y) {
103 return touch_event_.PressPoint(x, y); 107 touch_event_.PressPoint(x, y);
108 SendTouchEvent();
104 } 109 }
105 110
106 void MoveTouchPoint(int index, int x, int y) { 111 void MoveTouchPoint(int index, int x, int y) {
107 touch_event_.MovePoint(index, x, y); 112 touch_event_.MovePoint(index, x, y);
113 SendTouchEvent();
114 }
115
116 void MoveTouchPoints(int index0, int x0, int y0, int index1, int x1, int y1) {
117 touch_event_.MovePoint(index0, x0, y0);
118 touch_event_.MovePoint(index1, x1, y1);
119 SendTouchEvent();
108 } 120 }
109 121
110 void ReleaseTouchPoint(int index) { 122 void ReleaseTouchPoint(int index) {
111 touch_event_.ReleasePoint(index); 123 touch_event_.ReleasePoint(index);
124 SendTouchEvent();
112 } 125 }
113 126
114 void CancelTouchPoint(int index) { 127 void CancelTouchPoint(int index) {
115 touch_event_.CancelPoint(index); 128 touch_event_.CancelPoint(index);
129 SendTouchEvent();
116 } 130 }
117 131
118 size_t GetAndResetAckedEventCount() { 132 size_t GetAndResetAckedEventCount() {
119 size_t count = acked_event_count_; 133 size_t count = acked_event_count_;
120 acked_event_count_ = 0; 134 acked_event_count_ = 0;
121 return count; 135 return count;
122 } 136 }
123 137
124 size_t GetAndResetSentEventCount() { 138 size_t GetAndResetSentEventCount() {
125 size_t count = sent_event_count_; 139 size_t count = sent_event_count_;
126 sent_event_count_ = 0; 140 sent_event_count_ = 0;
127 return count; 141 return count;
128 } 142 }
129 143
130 bool IsPendingAckTouchStart() const { 144 bool IsPendingAckTouchStart() const {
131 return queue_->IsPendingAckTouchStart(); 145 return queue_->IsPendingAckTouchStart();
132 } 146 }
133 147
134 void Flush() { 148 void Flush() {
135 queue_->FlushQueue(); 149 queue_->FlushQueue();
136 } 150 }
137 151
152 void SetEnableTouchForwarding(bool enabled) {
153 queue_->no_touch_to_renderer_ = !enabled;
154 }
155
156 bool WillForwardTouchEvents() {
157 return !queue_->no_touch_to_renderer_ && !queue_->HasTimeoutEvent();
158 }
159
160 bool IsTimeoutRunning() {
161 return queue_->IsTimeoutRunningForTesting();
162 }
163
138 size_t queued_event_count() const { 164 size_t queued_event_count() const {
139 return queue_->GetQueueSize(); 165 return queue_->size();
140 } 166 }
141 167
142 const WebTouchEvent& latest_event() const { 168 const WebTouchEvent& latest_event() const {
143 return queue_->GetLatestEvent().event; 169 return queue_->GetLatestEventForTesting().event;
144 } 170 }
145 171
146 const WebTouchEvent& acked_event() const { 172 const WebTouchEvent& acked_event() const {
147 return last_acked_event_; 173 return last_acked_event_;
148 } 174 }
149 175
150 const WebTouchEvent& sent_event() const { 176 const WebTouchEvent& sent_event() const {
151 return last_sent_event_; 177 return last_sent_event_;
152 } 178 }
153 179
154 InputEventAckState acked_event_state() const { 180 InputEventAckState acked_event_state() const {
155 return last_acked_event_state_; 181 return last_acked_event_state_;
156 } 182 }
157 183
158 void set_no_touch_to_renderer(bool no_touch) { 184 void set_no_touch_to_renderer(bool no_touch) {
159 queue_->no_touch_to_renderer_ = no_touch; 185 queue_->no_touch_to_renderer_ = no_touch;
160 } 186 }
161 187
162 bool no_touch_to_renderer() const { 188 bool no_touch_to_renderer() const {
163 return queue_->no_touch_to_renderer_; 189 return queue_->no_touch_to_renderer_;
164 } 190 }
165 191
166 private: 192 private:
193 void SendTouchEvent() {
194 SendTouchEvent(touch_event_);
195 touch_event_.ResetPoints();
196 }
197
167 scoped_ptr<TouchEventQueue> queue_; 198 scoped_ptr<TouchEventQueue> queue_;
168 size_t sent_event_count_; 199 size_t sent_event_count_;
169 size_t acked_event_count_; 200 size_t acked_event_count_;
170 WebTouchEvent last_sent_event_; 201 WebTouchEvent last_sent_event_;
171 WebTouchEvent last_acked_event_; 202 WebTouchEvent last_acked_event_;
172 InputEventAckState last_acked_event_state_; 203 InputEventAckState last_acked_event_state_;
173 SyntheticWebTouchEvent touch_event_; 204 SyntheticWebTouchEvent touch_event_;
174 scoped_ptr<WebTouchEvent> followup_touch_event_; 205 scoped_ptr<WebTouchEvent> followup_touch_event_;
175 scoped_ptr<WebGestureEvent> followup_gesture_event_; 206 scoped_ptr<WebGestureEvent> followup_gesture_event_;
176 scoped_ptr<InputEventAckState> sync_ack_result_; 207 scoped_ptr<InputEventAckState> sync_ack_result_;
208 base::MessageLoopForUI message_loop_;
177 }; 209 };
178 210
179 211
180 // Tests that touch-events are queued properly. 212 // Tests that touch-events are queued properly.
181 TEST_F(TouchEventQueueTest, Basic) { 213 TEST_F(TouchEventQueueTest, Basic) {
182 PressTouchPoint(1, 1); 214 PressTouchPoint(1, 1);
183 SendTouchEvent();
184 EXPECT_EQ(1U, queued_event_count()); 215 EXPECT_EQ(1U, queued_event_count());
185 EXPECT_EQ(1U, GetAndResetSentEventCount()); 216 EXPECT_EQ(1U, GetAndResetSentEventCount());
186 217
187 // The second touch should not be sent since one is already in queue. 218 // The second touch should not be sent since one is already in queue.
188 MoveTouchPoint(0, 5, 5); 219 MoveTouchPoint(0, 5, 5);
189 SendTouchEvent();
190 EXPECT_EQ(2U, queued_event_count()); 220 EXPECT_EQ(2U, queued_event_count());
191 EXPECT_EQ(0U, GetAndResetSentEventCount()); 221 EXPECT_EQ(0U, GetAndResetSentEventCount());
192 222
193 // Receive an ACK for the first touch-event. 223 // Receive an ACK for the first touch-event.
194 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 224 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
195 EXPECT_EQ(1U, queued_event_count()); 225 EXPECT_EQ(1U, queued_event_count());
196 EXPECT_EQ(1U, GetAndResetSentEventCount()); 226 EXPECT_EQ(1U, GetAndResetSentEventCount());
197 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 227 EXPECT_EQ(1U, GetAndResetAckedEventCount());
198 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 228 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
199 229
200 // Receive an ACK for the second touch-event. 230 // Receive an ACK for the second touch-event.
201 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 231 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
202 EXPECT_EQ(0U, queued_event_count()); 232 EXPECT_EQ(0U, queued_event_count());
203 EXPECT_EQ(0U, GetAndResetSentEventCount()); 233 EXPECT_EQ(0U, GetAndResetSentEventCount());
204 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 234 EXPECT_EQ(1U, GetAndResetAckedEventCount());
205 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 235 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
206 } 236 }
207 237
208 // Tests that the touch-queue is emptied if a page stops listening for touch 238 // Tests that the touch-queue is emptied if a page stops listening for touch
209 // events. 239 // events.
210 TEST_F(TouchEventQueueTest, Flush) { 240 TEST_F(TouchEventQueueTest, Flush) {
211 Flush(); 241 Flush();
212 EXPECT_EQ(0U, queued_event_count()); 242 EXPECT_EQ(0U, queued_event_count());
213 EXPECT_EQ(0U, GetAndResetSentEventCount()); 243 EXPECT_EQ(0U, GetAndResetSentEventCount());
214 244
215 // Send a touch-press event. 245 // Send a touch-press event.
216 PressTouchPoint(1, 1); 246 PressTouchPoint(1, 1);
217 SendTouchEvent();
218 EXPECT_EQ(1U, GetAndResetSentEventCount()); 247 EXPECT_EQ(1U, GetAndResetSentEventCount());
219 248
220 ReleaseTouchPoint(0); 249 ReleaseTouchPoint(0);
221 SendTouchEvent();
222 250
223 // Events will be queued until the first sent event is ack'ed. 251 // Events will be queued until the first sent event is ack'ed.
224 for (int i = 5; i < 15; ++i) { 252 for (int i = 5; i < 15; ++i) {
225 PressTouchPoint(1, 1); 253 PressTouchPoint(1, 1);
226 SendTouchEvent();
227 MoveTouchPoint(0, i, i); 254 MoveTouchPoint(0, i, i);
228 SendTouchEvent();
229 ReleaseTouchPoint(0); 255 ReleaseTouchPoint(0);
230 SendTouchEvent();
231 } 256 }
232 EXPECT_EQ(32U, queued_event_count()); 257 EXPECT_EQ(32U, queued_event_count());
233 EXPECT_EQ(0U, GetAndResetSentEventCount()); 258 EXPECT_EQ(0U, GetAndResetSentEventCount());
234 259
235 // Receive an ACK for the first touch-event. One of the queued touch-event 260 // Receive an ACK for the first touch-event. One of the queued touch-event
236 // should be forwarded. 261 // should be forwarded.
237 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 262 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
238 EXPECT_EQ(31U, queued_event_count()); 263 EXPECT_EQ(31U, queued_event_count());
239 EXPECT_EQ(1U, GetAndResetSentEventCount()); 264 EXPECT_EQ(1U, GetAndResetSentEventCount());
240 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 265 EXPECT_EQ(1U, GetAndResetAckedEventCount());
241 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 266 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
242 267
243 // Flush the queue. The touch-event queue should now be emptied, but none of 268 // Flush the queue. The touch-event queue should now be emptied, but none of
244 // the queued touch-events should be sent to the renderer. 269 // the queued touch-events should be sent to the renderer.
245 Flush(); 270 Flush();
246 EXPECT_EQ(0U, queued_event_count()); 271 EXPECT_EQ(0U, queued_event_count());
247 EXPECT_EQ(0U, GetAndResetSentEventCount()); 272 EXPECT_EQ(0U, GetAndResetSentEventCount());
248 EXPECT_EQ(31U, GetAndResetAckedEventCount()); 273 EXPECT_EQ(31U, GetAndResetAckedEventCount());
249 } 274 }
250 275
251 // Tests that touch-events are coalesced properly in the queue. 276 // Tests that touch-events are coalesced properly in the queue.
252 TEST_F(TouchEventQueueTest, Coalesce) { 277 TEST_F(TouchEventQueueTest, Coalesce) {
253 // Send a touch-press event. 278 // Send a touch-press event.
254 PressTouchPoint(1, 1); 279 PressTouchPoint(1, 1);
255 SendTouchEvent();
256 EXPECT_EQ(1U, GetAndResetSentEventCount()); 280 EXPECT_EQ(1U, GetAndResetSentEventCount());
257 281
258 // Send a few touch-move events, followed by a touch-release event. All the 282 // Send a few touch-move events, followed by a touch-release event. All the
259 // touch-move events should be coalesced into a single event. 283 // touch-move events should be coalesced into a single event.
260 for (int i = 5; i < 15; ++i) { 284 for (int i = 5; i < 15; ++i)
261 MoveTouchPoint(0, i, i); 285 MoveTouchPoint(0, i, i);
262 SendTouchEvent(); 286
263 }
264 EXPECT_EQ(0U, GetAndResetSentEventCount()); 287 EXPECT_EQ(0U, GetAndResetSentEventCount());
265 ReleaseTouchPoint(0); 288 ReleaseTouchPoint(0);
266 SendTouchEvent();
267 EXPECT_EQ(0U, GetAndResetSentEventCount()); 289 EXPECT_EQ(0U, GetAndResetSentEventCount());
268 EXPECT_EQ(3U, queued_event_count()); 290 EXPECT_EQ(3U, queued_event_count());
269 291
270 // ACK the press. Coalesced touch-move events should be sent. 292 // ACK the press. Coalesced touch-move events should be sent.
271 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 293 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
272 EXPECT_EQ(2U, queued_event_count()); 294 EXPECT_EQ(2U, queued_event_count());
273 EXPECT_EQ(1U, GetAndResetSentEventCount()); 295 EXPECT_EQ(1U, GetAndResetSentEventCount());
274 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 296 EXPECT_EQ(1U, GetAndResetAckedEventCount());
275 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 297 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
276 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); 298 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state());
(...skipping 11 matching lines...) Expand all
288 EXPECT_EQ(0U, GetAndResetSentEventCount()); 310 EXPECT_EQ(0U, GetAndResetSentEventCount());
289 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 311 EXPECT_EQ(1U, GetAndResetAckedEventCount());
290 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); 312 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type);
291 } 313 }
292 314
293 // Tests that an event that has already been sent but hasn't been ack'ed yet 315 // Tests that an event that has already been sent but hasn't been ack'ed yet
294 // doesn't get coalesced with newer events. 316 // doesn't get coalesced with newer events.
295 TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) { 317 TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) {
296 // Send a touch-press event. 318 // Send a touch-press event.
297 PressTouchPoint(1, 1); 319 PressTouchPoint(1, 1);
298 SendTouchEvent();
299 EXPECT_EQ(1U, GetAndResetSentEventCount()); 320 EXPECT_EQ(1U, GetAndResetSentEventCount());
300 321
301 // Send a few touch-move events, followed by a touch-release event. All the 322 // Send a few touch-move events, followed by a touch-release event. All the
302 // touch-move events should be coalesced into a single event. 323 // touch-move events should be coalesced into a single event.
303 for (int i = 5; i < 15; ++i) { 324 for (int i = 5; i < 15; ++i)
304 MoveTouchPoint(0, i, i); 325 MoveTouchPoint(0, i, i);
305 SendTouchEvent(); 326
306 }
307 EXPECT_EQ(0U, GetAndResetSentEventCount()); 327 EXPECT_EQ(0U, GetAndResetSentEventCount());
308 EXPECT_EQ(2U, queued_event_count()); 328 EXPECT_EQ(2U, queued_event_count());
309 329
310 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 330 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
311 EXPECT_EQ(1U, GetAndResetSentEventCount()); 331 EXPECT_EQ(1U, GetAndResetSentEventCount());
312 EXPECT_EQ(1U, queued_event_count()); 332 EXPECT_EQ(1U, queued_event_count());
313 333
314 // The coalesced touch-move event has been sent to the renderer. Any new 334 // The coalesced touch-move event has been sent to the renderer. Any new
315 // touch-move event should not be coalesced with the sent event. 335 // touch-move event should not be coalesced with the sent event.
316 MoveTouchPoint(0, 5, 5); 336 MoveTouchPoint(0, 5, 5);
317 SendTouchEvent();
318 EXPECT_EQ(2U, queued_event_count()); 337 EXPECT_EQ(2U, queued_event_count());
319 338
320 MoveTouchPoint(0, 7, 7); 339 MoveTouchPoint(0, 7, 7);
321 SendTouchEvent();
322 EXPECT_EQ(2U, queued_event_count()); 340 EXPECT_EQ(2U, queued_event_count());
323 } 341 }
324 342
325 // Tests that coalescing works correctly for multi-touch events. 343 // Tests that coalescing works correctly for multi-touch events.
326 TEST_F(TouchEventQueueTest, MultiTouch) { 344 TEST_F(TouchEventQueueTest, MultiTouch) {
327 // Press the first finger. 345 // Press the first finger.
328 PressTouchPoint(1, 1); 346 PressTouchPoint(1, 1);
329 SendTouchEvent();
330 EXPECT_EQ(1U, GetAndResetSentEventCount()); 347 EXPECT_EQ(1U, GetAndResetSentEventCount());
331 348
332 // Move the finger. 349 // Move the finger.
333 MoveTouchPoint(0, 5, 5); 350 MoveTouchPoint(0, 5, 5);
334 SendTouchEvent();
335 EXPECT_EQ(2U, queued_event_count()); 351 EXPECT_EQ(2U, queued_event_count());
336 352
337 // Now press a second finger. 353 // Now press a second finger.
338 PressTouchPoint(2, 2); 354 PressTouchPoint(2, 2);
339 SendTouchEvent();
340 EXPECT_EQ(3U, queued_event_count()); 355 EXPECT_EQ(3U, queued_event_count());
341 356
342 // Move both fingers. 357 // Move both fingers.
343 MoveTouchPoint(0, 10, 10); 358 MoveTouchPoints(0, 10, 10, 1, 20, 20);
344 MoveTouchPoint(1, 20, 20); 359 MoveTouchPoint(1, 20, 20);
345 SendTouchEvent();
346 EXPECT_EQ(4U, queued_event_count()); 360 EXPECT_EQ(4U, queued_event_count());
347 361
348 // Move only one finger now. 362 // Move only one finger now.
349 MoveTouchPoint(0, 15, 15); 363 MoveTouchPoint(0, 15, 15);
350 SendTouchEvent();
351 EXPECT_EQ(4U, queued_event_count()); 364 EXPECT_EQ(4U, queued_event_count());
352 365
353 // Move the other finger. 366 // Move the other finger.
354 MoveTouchPoint(1, 25, 25); 367 MoveTouchPoint(1, 25, 25);
355 SendTouchEvent();
356 EXPECT_EQ(4U, queued_event_count()); 368 EXPECT_EQ(4U, queued_event_count());
357 369
358 // Make sure both fingers are marked as having been moved in the coalesced 370 // Make sure both fingers are marked as having been moved in the coalesced
359 // event. 371 // event.
360 const WebTouchEvent& event = latest_event(); 372 const WebTouchEvent& event = latest_event();
361 EXPECT_EQ(WebTouchPoint::StateMoved, event.touches[0].state); 373 EXPECT_EQ(WebTouchPoint::StateMoved, event.touches[0].state);
362 EXPECT_EQ(WebTouchPoint::StateMoved, event.touches[1].state); 374 EXPECT_EQ(WebTouchPoint::StateMoved, event.touches[1].state);
363 } 375 }
364 376
365 // Tests that if a touch-event queue is destroyed in response to a touch-event 377 // Tests that if a touch-event queue is destroyed in response to a touch-event
366 // in the renderer, then there is no crash when the ACK for that touch-event 378 // in the renderer, then there is no crash when the ACK for that touch-event
367 // comes back. 379 // comes back.
368 TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) { 380 TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) {
369 // Send some touch-events to the renderer. 381 // Send some touch-events to the renderer.
370 PressTouchPoint(1, 1); 382 PressTouchPoint(1, 1);
371 SendTouchEvent();
372 EXPECT_EQ(1U, GetAndResetSentEventCount()); 383 EXPECT_EQ(1U, GetAndResetSentEventCount());
373 EXPECT_EQ(1U, queued_event_count()); 384 EXPECT_EQ(1U, queued_event_count());
374 385
375 MoveTouchPoint(0, 10, 10); 386 MoveTouchPoint(0, 10, 10);
376 SendTouchEvent();
377 EXPECT_EQ(0U, GetAndResetSentEventCount()); 387 EXPECT_EQ(0U, GetAndResetSentEventCount());
378 EXPECT_EQ(2U, queued_event_count()); 388 EXPECT_EQ(2U, queued_event_count());
379 389
380 // Receive an ACK for the press. This should cause the queued touch-move to 390 // Receive an ACK for the press. This should cause the queued touch-move to
381 // be sent to the renderer. 391 // be sent to the renderer.
382 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 392 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
383 EXPECT_EQ(1U, GetAndResetSentEventCount()); 393 EXPECT_EQ(1U, GetAndResetSentEventCount());
384 EXPECT_EQ(1U, queued_event_count()); 394 EXPECT_EQ(1U, queued_event_count());
385 395
386 Flush(); 396 Flush();
387 EXPECT_EQ(0U, GetAndResetSentEventCount()); 397 EXPECT_EQ(0U, GetAndResetSentEventCount());
388 EXPECT_EQ(0U, queued_event_count()); 398 EXPECT_EQ(0U, queued_event_count());
389 399
390 // Now receive an ACK for the move. 400 // Now receive an ACK for the move.
391 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 401 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
392 EXPECT_EQ(0U, GetAndResetSentEventCount()); 402 EXPECT_EQ(0U, GetAndResetSentEventCount());
393 EXPECT_EQ(0U, queued_event_count()); 403 EXPECT_EQ(0U, queued_event_count());
394 } 404 }
395 405
396 // Tests that touch-move events are not sent to the renderer if the preceding 406 // Tests that touch-move events are not sent to the renderer if the preceding
397 // touch-press event did not have a consumer (and consequently, did not hit the 407 // touch-press event did not have a consumer (and consequently, did not hit the
398 // main thread in the renderer). Also tests that all queued/coalesced touch 408 // main thread in the renderer). Also tests that all queued/coalesced touch
399 // events are flushed immediately when the ACK for the touch-press comes back 409 // events are flushed immediately when the ACK for the touch-press comes back
400 // with NO_CONSUMER status. 410 // with NO_CONSUMER status.
401 TEST_F(TouchEventQueueTest, NoConsumer) { 411 TEST_F(TouchEventQueueTest, NoConsumer) {
402 // The first touch-press should reach the renderer. 412 // The first touch-press should reach the renderer.
403 PressTouchPoint(1, 1); 413 PressTouchPoint(1, 1);
404 SendTouchEvent();
405 EXPECT_EQ(1U, GetAndResetSentEventCount()); 414 EXPECT_EQ(1U, GetAndResetSentEventCount());
406 415
407 // The second touch should not be sent since one is already in queue. 416 // The second touch should not be sent since one is already in queue.
408 MoveTouchPoint(0, 5, 5); 417 MoveTouchPoint(0, 5, 5);
409 SendTouchEvent();
410 EXPECT_EQ(0U, GetAndResetSentEventCount()); 418 EXPECT_EQ(0U, GetAndResetSentEventCount());
411 EXPECT_EQ(2U, queued_event_count()); 419 EXPECT_EQ(2U, queued_event_count());
412 420
413 // Receive an ACK for the first touch-event. This should release the queued 421 // Receive an ACK for the first touch-event. This should release the queued
414 // touch-event, but it should not be sent to the renderer. 422 // touch-event, but it should not be sent to the renderer.
415 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 423 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
416 EXPECT_EQ(0U, queued_event_count()); 424 EXPECT_EQ(0U, queued_event_count());
417 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 425 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
418 EXPECT_EQ(2U, GetAndResetAckedEventCount()); 426 EXPECT_EQ(2U, GetAndResetAckedEventCount());
419 EXPECT_EQ(0U, GetAndResetSentEventCount()); 427 EXPECT_EQ(0U, GetAndResetSentEventCount());
420 428
421 // Send a release event. This should not reach the renderer. 429 // Send a release event. This should not reach the renderer.
422 ReleaseTouchPoint(0); 430 ReleaseTouchPoint(0);
423 SendTouchEvent();
424 EXPECT_EQ(0U, GetAndResetSentEventCount()); 431 EXPECT_EQ(0U, GetAndResetSentEventCount());
425 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); 432 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type);
426 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 433 EXPECT_EQ(1U, GetAndResetAckedEventCount());
427 434
428 // Send a press-event, followed by move and release events, and another press 435 // Send a press-event, followed by move and release events, and another press
429 // event, before the ACK for the first press event comes back. All of the 436 // event, before the ACK for the first press event comes back. All of the
430 // events should be queued first. After the NO_CONSUMER ack for the first 437 // events should be queued first. After the NO_CONSUMER ack for the first
431 // touch-press, all events upto the second touch-press should be flushed. 438 // touch-press, all events upto the second touch-press should be flushed.
432 PressTouchPoint(10, 10); 439 PressTouchPoint(10, 10);
433 SendTouchEvent();
434 EXPECT_EQ(1U, GetAndResetSentEventCount()); 440 EXPECT_EQ(1U, GetAndResetSentEventCount());
435 441
436 MoveTouchPoint(0, 5, 5); 442 MoveTouchPoint(0, 5, 5);
437 SendTouchEvent();
438 MoveTouchPoint(0, 6, 5); 443 MoveTouchPoint(0, 6, 5);
439 SendTouchEvent();
440 ReleaseTouchPoint(0); 444 ReleaseTouchPoint(0);
441 SendTouchEvent();
442 445
443 PressTouchPoint(6, 5); 446 PressTouchPoint(6, 5);
444 SendTouchEvent();
445 EXPECT_EQ(0U, GetAndResetSentEventCount()); 447 EXPECT_EQ(0U, GetAndResetSentEventCount());
446 // The queue should hold the first sent touch-press event, the coalesced 448 // The queue should hold the first sent touch-press event, the coalesced
447 // touch-move event, the touch-end event and the second touch-press event. 449 // touch-move event, the touch-end event and the second touch-press event.
448 EXPECT_EQ(4U, queued_event_count()); 450 EXPECT_EQ(4U, queued_event_count());
449 451
450 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 452 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
451 EXPECT_EQ(1U, GetAndResetSentEventCount()); 453 EXPECT_EQ(1U, GetAndResetSentEventCount());
452 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); 454 EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type);
453 EXPECT_EQ(4U, GetAndResetAckedEventCount()); 455 EXPECT_EQ(4U, GetAndResetAckedEventCount());
454 EXPECT_EQ(1U, queued_event_count()); 456 EXPECT_EQ(1U, queued_event_count());
455 457
456 // ACK the second press event as NO_CONSUMER too. 458 // ACK the second press event as NO_CONSUMER too.
457 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 459 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
458 EXPECT_EQ(0U, GetAndResetSentEventCount()); 460 EXPECT_EQ(0U, GetAndResetSentEventCount());
459 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 461 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
460 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 462 EXPECT_EQ(1U, GetAndResetAckedEventCount());
461 EXPECT_EQ(0U, queued_event_count()); 463 EXPECT_EQ(0U, queued_event_count());
462 464
463 // Send a second press event. Even though the first touch had NO_CONSUMER, 465 // Send a second press event. Even though the first touch had NO_CONSUMER,
464 // this press event should reach the renderer. 466 // this press event should reach the renderer.
465 PressTouchPoint(1, 1); 467 PressTouchPoint(1, 1);
466 SendTouchEvent();
467 EXPECT_EQ(1U, GetAndResetSentEventCount()); 468 EXPECT_EQ(1U, GetAndResetSentEventCount());
468 EXPECT_EQ(1U, queued_event_count()); 469 EXPECT_EQ(1U, queued_event_count());
469 } 470 }
470 471
471 TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { 472 TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) {
472 // Press two touch points and move them around a bit. The renderer consumes 473 // Press two touch points and move them around a bit. The renderer consumes
473 // the events for the first touch point, but returns NO_CONSUMER_EXISTS for 474 // the events for the first touch point, but returns NO_CONSUMER_EXISTS for
474 // the second touch point. 475 // the second touch point.
475 476
476 PressTouchPoint(1, 1); 477 PressTouchPoint(1, 1);
477 SendTouchEvent();
478 EXPECT_EQ(1U, GetAndResetSentEventCount()); 478 EXPECT_EQ(1U, GetAndResetSentEventCount());
479 479
480 MoveTouchPoint(0, 5, 5); 480 MoveTouchPoint(0, 5, 5);
481 SendTouchEvent();
482 481
483 PressTouchPoint(10, 10); 482 PressTouchPoint(10, 10);
484 SendTouchEvent();
485 483
486 MoveTouchPoint(0, 2, 2); 484 MoveTouchPoint(0, 2, 2);
487 SendTouchEvent();
488 485
489 MoveTouchPoint(1, 4, 10); 486 MoveTouchPoint(1, 4, 10);
490 SendTouchEvent();
491 487
492 MoveTouchPoint(0, 10, 10); 488 MoveTouchPoints(0, 10, 10, 1, 20, 20);
493 MoveTouchPoint(1, 20, 20);
494 SendTouchEvent();
495 489
496 // Since the first touch-press is still pending ACK, no other event should 490 // Since the first touch-press is still pending ACK, no other event should
497 // have been sent to the renderer. 491 // have been sent to the renderer.
498 EXPECT_EQ(0U, GetAndResetSentEventCount()); 492 EXPECT_EQ(0U, GetAndResetSentEventCount());
499 // The queue includes the two presses, the first touch-move of the first 493 // The queue includes the two presses, the first touch-move of the first
500 // point, and a coalesced touch-move of both points. 494 // point, and a coalesced touch-move of both points.
501 EXPECT_EQ(4U, queued_event_count()); 495 EXPECT_EQ(4U, queued_event_count());
502 496
503 // ACK the first press as CONSUMED. This should cause the first touch-move of 497 // ACK the first press as CONSUMED. This should cause the first touch-move of
504 // the first touch-point to be dispatched. 498 // the first touch-point to be dispatched.
(...skipping 15 matching lines...) Expand all
520 EXPECT_EQ(1U, queued_event_count()); 514 EXPECT_EQ(1U, queued_event_count());
521 515
522 // ACK the coalesced move as NOT_CONSUMED. 516 // ACK the coalesced move as NOT_CONSUMED.
523 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 517 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
524 EXPECT_EQ(0U, GetAndResetSentEventCount()); 518 EXPECT_EQ(0U, GetAndResetSentEventCount());
525 EXPECT_EQ(0U, queued_event_count()); 519 EXPECT_EQ(0U, queued_event_count());
526 520
527 // Move just the second touch point. Because the first touch point did not 521 // Move just the second touch point. Because the first touch point did not
528 // move, this event should not reach the renderer. 522 // move, this event should not reach the renderer.
529 MoveTouchPoint(1, 30, 30); 523 MoveTouchPoint(1, 30, 30);
530 SendTouchEvent();
531 EXPECT_EQ(0U, GetAndResetSentEventCount()); 524 EXPECT_EQ(0U, GetAndResetSentEventCount());
532 EXPECT_EQ(0U, queued_event_count()); 525 EXPECT_EQ(0U, queued_event_count());
533 526
534 // Move just the first touch point. This should reach the renderer. 527 // Move just the first touch point. This should reach the renderer.
535 MoveTouchPoint(0, 10, 10); 528 MoveTouchPoint(0, 10, 10);
536 SendTouchEvent();
537 EXPECT_EQ(1U, GetAndResetSentEventCount()); 529 EXPECT_EQ(1U, GetAndResetSentEventCount());
538 EXPECT_EQ(1U, queued_event_count()); 530 EXPECT_EQ(1U, queued_event_count());
539 531
540 // Move both fingers. This event should reach the renderer (after the ACK of 532 // Move both fingers. This event should reach the renderer (after the ACK of
541 // the previous move event is received), because the first touch point did 533 // the previous move event is received), because the first touch point did
542 // move. 534 // move.
543 MoveTouchPoint(0, 15, 15); 535 MoveTouchPoints(0, 15, 15, 1, 25, 25);
544 MoveTouchPoint(1, 25, 25);
545 SendTouchEvent();
546 EXPECT_EQ(0U, GetAndResetSentEventCount()); 536 EXPECT_EQ(0U, GetAndResetSentEventCount());
547 537
548 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 538 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
549 EXPECT_EQ(1U, GetAndResetSentEventCount()); 539 EXPECT_EQ(1U, GetAndResetSentEventCount());
550 EXPECT_EQ(1U, queued_event_count()); 540 EXPECT_EQ(1U, queued_event_count());
551 541
552 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 542 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
553 EXPECT_EQ(0U, GetAndResetSentEventCount()); 543 EXPECT_EQ(0U, GetAndResetSentEventCount());
554 EXPECT_EQ(0U, queued_event_count()); 544 EXPECT_EQ(0U, queued_event_count());
555 545
556 // Release the first finger. Then move the second finger around some, then 546 // Release the first finger. Then move the second finger around some, then
557 // press another finger. Once the release event is ACKed, the move events of 547 // press another finger. Once the release event is ACKed, the move events of
558 // the second finger should be immediately released to the view, and the 548 // the second finger should be immediately released to the view, and the
559 // touch-press event should be dispatched to the renderer. 549 // touch-press event should be dispatched to the renderer.
560 ReleaseTouchPoint(0); 550 ReleaseTouchPoint(0);
561 SendTouchEvent();
562 EXPECT_EQ(1U, GetAndResetSentEventCount()); 551 EXPECT_EQ(1U, GetAndResetSentEventCount());
563 EXPECT_EQ(1U, queued_event_count()); 552 EXPECT_EQ(1U, queued_event_count());
564 553
565 MoveTouchPoint(1, 40, 40); 554 MoveTouchPoint(1, 40, 40);
566 SendTouchEvent();
567 555
568 MoveTouchPoint(1, 50, 50); 556 MoveTouchPoint(1, 50, 50);
569 SendTouchEvent();
570 557
571 PressTouchPoint(1, 1); 558 PressTouchPoint(1, 1);
572 SendTouchEvent();
573 559
574 MoveTouchPoint(1, 30, 30); 560 MoveTouchPoint(1, 30, 30);
575 SendTouchEvent();
576 EXPECT_EQ(0U, GetAndResetSentEventCount()); 561 EXPECT_EQ(0U, GetAndResetSentEventCount());
577 EXPECT_EQ(4U, queued_event_count()); 562 EXPECT_EQ(4U, queued_event_count());
578 563
579 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 564 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
580 EXPECT_EQ(1U, GetAndResetSentEventCount()); 565 EXPECT_EQ(1U, GetAndResetSentEventCount());
581 EXPECT_EQ(2U, queued_event_count()); 566 EXPECT_EQ(2U, queued_event_count());
582 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 567 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
583 568
584 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued 569 // ACK the press with NO_CONSUMED_EXISTS. This should release the queued
585 // touch-move events to the view. 570 // touch-move events to the view.
586 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); 571 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
587 EXPECT_EQ(0U, GetAndResetSentEventCount()); 572 EXPECT_EQ(0U, GetAndResetSentEventCount());
588 EXPECT_EQ(0U, queued_event_count()); 573 EXPECT_EQ(0U, queued_event_count());
589 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 574 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
590 575
591 ReleaseTouchPoint(2); 576 ReleaseTouchPoint(2);
592 ReleaseTouchPoint(1); 577 ReleaseTouchPoint(1);
593 EXPECT_EQ(0U, GetAndResetSentEventCount()); 578 EXPECT_EQ(0U, GetAndResetSentEventCount());
594 EXPECT_EQ(0U, queued_event_count()); 579 EXPECT_EQ(0U, queued_event_count());
595 } 580 }
596 581
597 // Tests that touch-event's enqueued via a touch ack are properly handled. 582 // Tests that touch-event's enqueued via a touch ack are properly handled.
598 TEST_F(TouchEventQueueTest, AckWithFollowupEvents) { 583 TEST_F(TouchEventQueueTest, AckWithFollowupEvents) {
599 // Queue a touch down. 584 // Queue a touch down.
600 PressTouchPoint(1, 1); 585 PressTouchPoint(1, 1);
601 SendTouchEvent();
602 EXPECT_EQ(1U, queued_event_count()); 586 EXPECT_EQ(1U, queued_event_count());
603 EXPECT_EQ(1U, GetAndResetSentEventCount()); 587 EXPECT_EQ(1U, GetAndResetSentEventCount());
604 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 588 EXPECT_EQ(0U, GetAndResetAckedEventCount());
605 589
606 // Create a touch event that will be queued synchronously by a touch ack. 590 // Create a touch event that will be queued synchronously by a touch ack.
607 // Note, this will be triggered by all subsequent touch acks. 591 // Note, this will be triggered by all subsequent touch acks.
608 WebTouchEvent followup_event; 592 WebTouchEvent followup_event;
609 followup_event.type = WebInputEvent::TouchStart; 593 followup_event.type = WebInputEvent::TouchStart;
610 followup_event.touchesLength = 1; 594 followup_event.touchesLength = 1;
611 followup_event.touches[0].id = 1; 595 followup_event.touches[0].id = 1;
612 followup_event.touches[0].state = WebTouchPoint::StatePressed; 596 followup_event.touches[0].state = WebTouchPoint::StatePressed;
613 SetFollowupEvent(followup_event); 597 SetFollowupEvent(followup_event);
614 598
615 // Receive an ACK for the press. This should cause the followup touch-move to 599 // Receive an ACK for the press. This should cause the followup touch-move to
616 // be sent to the renderer. 600 // be sent to the renderer.
617 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 601 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
618 EXPECT_EQ(1U, queued_event_count()); 602 EXPECT_EQ(1U, queued_event_count());
619 EXPECT_EQ(1U, GetAndResetSentEventCount()); 603 EXPECT_EQ(1U, GetAndResetSentEventCount());
620 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 604 EXPECT_EQ(1U, GetAndResetAckedEventCount());
621 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); 605 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state());
622 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 606 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
623 607
624 // Queue another event. 608 // Queue another event.
625 PressTouchPoint(1, 1);
626 MoveTouchPoint(0, 2, 2); 609 MoveTouchPoint(0, 2, 2);
627 SendTouchEvent();
628 EXPECT_EQ(2U, queued_event_count()); 610 EXPECT_EQ(2U, queued_event_count());
629 611
630 // Receive an ACK for the touch-move followup event. This should cause the 612 // Receive an ACK for the touch-move followup event. This should cause the
631 // subsequent touch move event be sent to the renderer. 613 // subsequent touch move event be sent to the renderer.
632 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 614 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
633 EXPECT_EQ(1U, queued_event_count()); 615 EXPECT_EQ(1U, queued_event_count());
634 EXPECT_EQ(1U, GetAndResetSentEventCount()); 616 EXPECT_EQ(1U, GetAndResetSentEventCount());
635 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 617 EXPECT_EQ(1U, GetAndResetAckedEventCount());
636 } 618 }
637 619
638 // Tests that touch-events can be synchronously ack'ed. 620 // Tests that touch-events can be synchronously ack'ed.
639 TEST_F(TouchEventQueueTest, SynchronousAcks) { 621 TEST_F(TouchEventQueueTest, SynchronousAcks) {
640 // TouchStart 622 // TouchStart
641 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); 623 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
642 PressTouchPoint(1, 1); 624 PressTouchPoint(1, 1);
643 SendTouchEvent();
644 EXPECT_EQ(0U, queued_event_count()); 625 EXPECT_EQ(0U, queued_event_count());
645 EXPECT_EQ(1U, GetAndResetSentEventCount()); 626 EXPECT_EQ(1U, GetAndResetSentEventCount());
646 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 627 EXPECT_EQ(1U, GetAndResetAckedEventCount());
647 628
648 // TouchMove 629 // TouchMove
649 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); 630 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
650 PressTouchPoint(1, 1);
651 MoveTouchPoint(0, 2, 2); 631 MoveTouchPoint(0, 2, 2);
652 SendTouchEvent();
653 EXPECT_EQ(0U, queued_event_count()); 632 EXPECT_EQ(0U, queued_event_count());
654 EXPECT_EQ(1U, GetAndResetSentEventCount()); 633 EXPECT_EQ(1U, GetAndResetSentEventCount());
655 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 634 EXPECT_EQ(1U, GetAndResetAckedEventCount());
656 635
657 // TouchEnd 636 // TouchEnd
658 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); 637 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
659 PressTouchPoint(1, 1);
660 ReleaseTouchPoint(0); 638 ReleaseTouchPoint(0);
661 SendTouchEvent();
662 EXPECT_EQ(0U, queued_event_count()); 639 EXPECT_EQ(0U, queued_event_count());
663 EXPECT_EQ(1U, GetAndResetSentEventCount()); 640 EXPECT_EQ(1U, GetAndResetSentEventCount());
664 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 641 EXPECT_EQ(1U, GetAndResetAckedEventCount());
665 642
666 // TouchCancel (first inserting a TouchStart so the TouchCancel will be sent) 643 // TouchCancel (first inserting a TouchStart so the TouchCancel will be sent)
667 PressTouchPoint(1, 1); 644 PressTouchPoint(1, 1);
668 SendTouchEvent();
669 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); 645 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
670 EXPECT_EQ(0U, queued_event_count()); 646 EXPECT_EQ(0U, queued_event_count());
671 EXPECT_EQ(1U, GetAndResetSentEventCount()); 647 EXPECT_EQ(1U, GetAndResetSentEventCount());
672 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 648 EXPECT_EQ(1U, GetAndResetAckedEventCount());
673 649
674 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED); 650 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
675 PressTouchPoint(1, 1);
676 CancelTouchPoint(0); 651 CancelTouchPoint(0);
677 SendTouchEvent();
678 EXPECT_EQ(0U, queued_event_count()); 652 EXPECT_EQ(0U, queued_event_count());
679 EXPECT_EQ(1U, GetAndResetSentEventCount()); 653 EXPECT_EQ(1U, GetAndResetSentEventCount());
680 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 654 EXPECT_EQ(1U, GetAndResetAckedEventCount());
681 } 655 }
682 656
683 // Tests that followup events triggered by an immediate ack from 657 // Tests that followup events triggered by an immediate ack from
684 // TouchEventQueue::QueueEvent() are properly handled. 658 // TouchEventQueue::QueueEvent() are properly handled.
685 TEST_F(TouchEventQueueTest, ImmediateAckWithFollowupEvents) { 659 TEST_F(TouchEventQueueTest, ImmediateAckWithFollowupEvents) {
686 // Create a touch event that will be queued synchronously by a touch ack. 660 // Create a touch event that will be queued synchronously by a touch ack.
687 WebTouchEvent followup_event; 661 WebTouchEvent followup_event;
(...skipping 16 matching lines...) Expand all
704 EXPECT_EQ(1U, queued_event_count()); 678 EXPECT_EQ(1U, queued_event_count());
705 EXPECT_EQ(1U, GetAndResetSentEventCount()); 679 EXPECT_EQ(1U, GetAndResetSentEventCount());
706 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 680 EXPECT_EQ(1U, GetAndResetAckedEventCount());
707 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 681 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
708 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); 682 EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type);
709 } 683 }
710 684
711 // Tests basic TouchEvent forwarding suppression. 685 // Tests basic TouchEvent forwarding suppression.
712 TEST_F(TouchEventQueueTest, NoTouchBasic) { 686 TEST_F(TouchEventQueueTest, NoTouchBasic) {
713 // Disable TouchEvent forwarding. 687 // Disable TouchEvent forwarding.
714 set_no_touch_to_renderer(true); 688 SetEnableTouchForwarding(false);
715 MoveTouchPoint(0, 30, 5); 689 MoveTouchPoint(0, 30, 5);
716 SendTouchEvent();
717 EXPECT_EQ(0U, GetAndResetSentEventCount()); 690 EXPECT_EQ(0U, GetAndResetSentEventCount());
718 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 691 EXPECT_EQ(1U, GetAndResetAckedEventCount());
719 692
720 // TouchMove should not be sent to renderer. 693 // TouchMove should not be sent to renderer.
721 MoveTouchPoint(0, 65, 10); 694 MoveTouchPoint(0, 65, 10);
722 SendTouchEvent();
723 EXPECT_EQ(0U, GetAndResetSentEventCount()); 695 EXPECT_EQ(0U, GetAndResetSentEventCount());
724 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 696 EXPECT_EQ(1U, GetAndResetAckedEventCount());
725 697
726 // TouchEnd should not be sent to renderer. 698 // TouchEnd should not be sent to renderer.
727 ReleaseTouchPoint(0); 699 ReleaseTouchPoint(0);
728 SendTouchEvent();
729 EXPECT_EQ(0U, GetAndResetSentEventCount()); 700 EXPECT_EQ(0U, GetAndResetSentEventCount());
730 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 701 EXPECT_EQ(1U, GetAndResetAckedEventCount());
731 702
732 // TouchStart should not be sent to renderer. 703 // TouchStart should not be sent to renderer.
733 PressTouchPoint(5, 5); 704 PressTouchPoint(5, 5);
734 SendTouchEvent();
735 EXPECT_EQ(0U, GetAndResetSentEventCount()); 705 EXPECT_EQ(0U, GetAndResetSentEventCount());
736 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 706 EXPECT_EQ(1U, GetAndResetAckedEventCount());
737 707
738 // Enable TouchEvent forwarding. 708 // Enable TouchEvent forwarding.
739 set_no_touch_to_renderer(false); 709 SetEnableTouchForwarding(true);
740 710
741 PressTouchPoint(80, 10); 711 PressTouchPoint(80, 10);
742 SendTouchEvent();
743 EXPECT_EQ(1U, GetAndResetSentEventCount()); 712 EXPECT_EQ(1U, GetAndResetSentEventCount());
744 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 713 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
745 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 714 EXPECT_EQ(1U, GetAndResetAckedEventCount());
746 715
747 MoveTouchPoint(0, 80, 20); 716 MoveTouchPoint(0, 80, 20);
748 SendTouchEvent();
749 EXPECT_EQ(1U, GetAndResetSentEventCount()); 717 EXPECT_EQ(1U, GetAndResetSentEventCount());
750 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 718 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
751 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 719 EXPECT_EQ(1U, GetAndResetAckedEventCount());
752 720
753 ReleaseTouchPoint(0); 721 ReleaseTouchPoint(0);
754 SendTouchEvent();
755 EXPECT_EQ(1U, GetAndResetSentEventCount()); 722 EXPECT_EQ(1U, GetAndResetSentEventCount());
756 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 723 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
757 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 724 EXPECT_EQ(1U, GetAndResetAckedEventCount());
758 } 725 }
759 726
760 // Tests that no TouchEvents are sent to renderer during scrolling. 727 // Tests that no TouchEvents are sent to renderer during scrolling.
761 TEST_F(TouchEventQueueTest, NoTouchOnScroll) { 728 TEST_F(TouchEventQueueTest, NoTouchOnScroll) {
762 // Queue a TouchStart. 729 // Queue a TouchStart.
763 PressTouchPoint(0, 1); 730 PressTouchPoint(0, 1);
764 SendTouchEvent();
765 EXPECT_EQ(1U, GetAndResetSentEventCount()); 731 EXPECT_EQ(1U, GetAndResetSentEventCount());
766 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 732 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
767 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 733 EXPECT_EQ(1U, GetAndResetAckedEventCount());
768 734
769 MoveTouchPoint(0, 20, 5); 735 MoveTouchPoint(0, 20, 5);
770 SendTouchEvent();
771 EXPECT_EQ(1U, queued_event_count()); 736 EXPECT_EQ(1U, queued_event_count());
772 EXPECT_EQ(1U, GetAndResetSentEventCount()); 737 EXPECT_EQ(1U, GetAndResetSentEventCount());
773 738
774 // Queue another TouchStart. 739 // Queue another TouchStart.
775 PressTouchPoint(20, 20); 740 PressTouchPoint(20, 20);
776 SendTouchEvent();
777 EXPECT_EQ(2U, queued_event_count()); 741 EXPECT_EQ(2U, queued_event_count());
778 EXPECT_EQ(0U, GetAndResetSentEventCount()); 742 EXPECT_EQ(0U, GetAndResetSentEventCount());
779 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); 743 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type);
780 744
781 // GestureScrollBegin inserts a synthetic TouchCancel before the TouchStart. 745 // GestureScrollBegin inserts a synthetic TouchCancel before the TouchStart.
782 WebGestureEvent followup_scroll; 746 WebGestureEvent followup_scroll;
783 followup_scroll.type = WebInputEvent::GestureScrollBegin; 747 followup_scroll.type = WebInputEvent::GestureScrollBegin;
784 SetFollowupEvent(followup_scroll); 748 SetFollowupEvent(followup_scroll);
785 ASSERT_FALSE(no_touch_to_renderer()); 749 ASSERT_TRUE(WillForwardTouchEvents());
786 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 750 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
787 EXPECT_TRUE(no_touch_to_renderer()); 751 EXPECT_FALSE(WillForwardTouchEvents());
788 EXPECT_EQ(1U, GetAndResetSentEventCount()); 752 EXPECT_EQ(1U, GetAndResetSentEventCount());
789 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 753 EXPECT_EQ(1U, GetAndResetAckedEventCount());
790 EXPECT_EQ(2U, queued_event_count()); 754 EXPECT_EQ(2U, queued_event_count());
791 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type); 755 EXPECT_EQ(WebInputEvent::TouchCancel, sent_event().type);
792 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); 756 EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type);
793 757
794 // Acking the TouchCancel will result in dispatch of the next TouchStart. 758 // Acking the TouchCancel will result in dispatch of the next TouchStart.
795 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 759 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
796 // The synthetic TouchCancel should not reach client, only the TouchStart. 760 // The synthetic TouchCancel should not reach client, only the TouchStart.
797 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 761 EXPECT_EQ(1U, GetAndResetAckedEventCount());
798 EXPECT_EQ(0U, GetAndResetSentEventCount()); 762 EXPECT_EQ(0U, GetAndResetSentEventCount());
799 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); 763 EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type);
800 764
801 // TouchMove should not be sent to renderer. 765 // TouchMove should not be sent to the renderer.
802 MoveTouchPoint(0, 30, 5); 766 MoveTouchPoint(0, 30, 5);
803 SendTouchEvent();
804 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 767 EXPECT_EQ(1U, GetAndResetAckedEventCount());
805 EXPECT_EQ(0U, GetAndResetSentEventCount()); 768 EXPECT_EQ(0U, GetAndResetSentEventCount());
806 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 769 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
807 770
808 // GestureScrollUpdates should not change affect touch forwarding. 771 // GestureScrollUpdates should not change affect touch forwarding.
809 SendGestureEvent(WebInputEvent::GestureScrollUpdate); 772 SendGestureEvent(WebInputEvent::GestureScrollUpdate);
810 EXPECT_TRUE(no_touch_to_renderer()); 773 EXPECT_FALSE(WillForwardTouchEvents());
811 774
812 // TouchEnd should not be sent to renderer. 775 // TouchEnd should not be sent to the renderer.
813 ReleaseTouchPoint(0); 776 ReleaseTouchPoint(0);
814 SendTouchEvent();
815 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 777 EXPECT_EQ(1U, GetAndResetAckedEventCount());
816 EXPECT_EQ(0U, GetAndResetSentEventCount()); 778 EXPECT_EQ(0U, GetAndResetSentEventCount());
817 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state()); 779 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, acked_event_state());
818 780
819 // GestureScrollEnd will resume the sending of TouchEvents to renderer. 781 // GestureScrollEnd will resume the sending of TouchEvents to renderer.
820 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd); 782 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd);
821 EXPECT_FALSE(no_touch_to_renderer()); 783 EXPECT_TRUE(WillForwardTouchEvents());
822 784
823 // Now TouchEvents should be forwarded normally. 785 // Now TouchEvents should be forwarded normally.
824 PressTouchPoint(80, 10); 786 PressTouchPoint(80, 10);
825 SendTouchEvent();
826 EXPECT_EQ(1U, GetAndResetSentEventCount()); 787 EXPECT_EQ(1U, GetAndResetSentEventCount());
827 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 788 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
828 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 789 EXPECT_EQ(1U, GetAndResetAckedEventCount());
829 790
830 MoveTouchPoint(0, 80, 20); 791 MoveTouchPoint(0, 80, 20);
831 SendTouchEvent();
832 EXPECT_EQ(1U, GetAndResetSentEventCount()); 792 EXPECT_EQ(1U, GetAndResetSentEventCount());
833 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 793 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
834 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 794 EXPECT_EQ(1U, GetAndResetAckedEventCount());
835 795
836 ReleaseTouchPoint(0); 796 ReleaseTouchPoint(0);
837 SendTouchEvent();
838 EXPECT_EQ(1U, GetAndResetSentEventCount()); 797 EXPECT_EQ(1U, GetAndResetSentEventCount());
839 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 798 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
840 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 799 EXPECT_EQ(1U, GetAndResetAckedEventCount());
841 } 800 }
842 801
843 // Tests that IsTouchStartPendingAck works correctly. 802 // Tests that IsTouchStartPendingAck works correctly.
844 TEST_F(TouchEventQueueTest, PendingStart) { 803 TEST_F(TouchEventQueueTest, PendingStart) {
845 804
846 EXPECT_FALSE(IsPendingAckTouchStart()); 805 EXPECT_FALSE(IsPendingAckTouchStart());
847 806
848 // Send the touchstart for one point (#1). 807 // Send the touchstart for one point (#1).
849 PressTouchPoint(1, 1); 808 PressTouchPoint(1, 1);
850 SendTouchEvent();
851 EXPECT_EQ(1U, queued_event_count()); 809 EXPECT_EQ(1U, queued_event_count());
852 EXPECT_TRUE(IsPendingAckTouchStart()); 810 EXPECT_TRUE(IsPendingAckTouchStart());
853 811
854 // Send a touchmove for that point (#2). 812 // Send a touchmove for that point (#2).
855 MoveTouchPoint(0, 5, 5); 813 MoveTouchPoint(0, 5, 5);
856 SendTouchEvent();
857 EXPECT_EQ(2U, queued_event_count()); 814 EXPECT_EQ(2U, queued_event_count());
858 EXPECT_TRUE(IsPendingAckTouchStart()); 815 EXPECT_TRUE(IsPendingAckTouchStart());
859 816
860 // Ack the touchstart (#1). 817 // Ack the touchstart (#1).
861 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 818 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
862 EXPECT_EQ(1U, queued_event_count()); 819 EXPECT_EQ(1U, queued_event_count());
863 EXPECT_FALSE(IsPendingAckTouchStart()); 820 EXPECT_FALSE(IsPendingAckTouchStart());
864 821
865 // Send a touchstart for another point (#3). 822 // Send a touchstart for another point (#3).
866 PressTouchPoint(10, 10); 823 PressTouchPoint(10, 10);
867 SendTouchEvent();
868 EXPECT_EQ(2U, queued_event_count()); 824 EXPECT_EQ(2U, queued_event_count());
869 EXPECT_FALSE(IsPendingAckTouchStart()); 825 EXPECT_FALSE(IsPendingAckTouchStart());
870 826
871 // Ack the touchmove (#2). 827 // Ack the touchmove (#2).
872 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 828 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
873 EXPECT_EQ(1U, queued_event_count()); 829 EXPECT_EQ(1U, queued_event_count());
874 EXPECT_TRUE(IsPendingAckTouchStart()); 830 EXPECT_TRUE(IsPendingAckTouchStart());
875 831
876 // Send a touchstart for a third point (#4). 832 // Send a touchstart for a third point (#4).
877 PressTouchPoint(15, 15); 833 PressTouchPoint(15, 15);
878 SendTouchEvent();
879 EXPECT_EQ(2U, queued_event_count()); 834 EXPECT_EQ(2U, queued_event_count());
880 EXPECT_TRUE(IsPendingAckTouchStart()); 835 EXPECT_TRUE(IsPendingAckTouchStart());
881 836
882 // Ack the touchstart for the second point (#3). 837 // Ack the touchstart for the second point (#3).
883 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 838 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
884 EXPECT_EQ(1U, queued_event_count()); 839 EXPECT_EQ(1U, queued_event_count());
885 EXPECT_TRUE(IsPendingAckTouchStart()); 840 EXPECT_TRUE(IsPendingAckTouchStart());
886 841
887 // Ack the touchstart for the third point (#4). 842 // Ack the touchstart for the third point (#4).
888 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 843 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
889 EXPECT_EQ(0U, queued_event_count()); 844 EXPECT_EQ(0U, queued_event_count());
890 EXPECT_FALSE(IsPendingAckTouchStart()); 845 EXPECT_FALSE(IsPendingAckTouchStart());
891 } 846 }
892 847
848 // Tests that the touch timeout is started when sending certain touch types.
849 TEST_F(TouchEventQueueTest, TouchTimeoutTypes) {
850 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
851
852 // Sending a TouchStart will start the timeout.
853 PressTouchPoint(0, 1);
854 EXPECT_TRUE(IsTimeoutRunning());
855 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
856 EXPECT_FALSE(IsTimeoutRunning());
857
858 // A TouchMove should start the timeout.
859 MoveTouchPoint(0, 5, 5);
860 EXPECT_TRUE(IsTimeoutRunning());
861 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
862 EXPECT_FALSE(IsTimeoutRunning());
863
864 // A TouchEnd should not start the timeout.
865 ReleaseTouchPoint(0);
866 EXPECT_FALSE(IsTimeoutRunning());
867 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
868 EXPECT_FALSE(IsTimeoutRunning());
869
870 // A TouchCancel should not start the timeout.
871 PressTouchPoint(0, 1);
872 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
873 ASSERT_FALSE(IsTimeoutRunning());
874 CancelTouchPoint(0);
875 EXPECT_FALSE(IsTimeoutRunning());
876 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
877 EXPECT_FALSE(IsTimeoutRunning());
878 }
879
880 // Tests that a delayed TouchEvent ack will trigger a TouchCancel timeout,
881 // disabling touch forwarding until the next TouchStart is received after
882 // the timeout events are ack'ed.
883 TEST_F(TouchEventQueueTest, TouchTimeoutBasic) {
884 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
885
886 // Queue a TouchStart.
887 GetAndResetSentEventCount();
888 GetAndResetAckedEventCount();
889 PressTouchPoint(0, 1);
890 ASSERT_EQ(1U, GetAndResetSentEventCount());
891 ASSERT_EQ(0U, GetAndResetAckedEventCount());
892 EXPECT_TRUE(IsTimeoutRunning());
893 EXPECT_TRUE(WillForwardTouchEvents());
894
895 // Delay the ack.
896 base::MessageLoop::current()->PostDelayedTask(
897 FROM_HERE,
898 base::MessageLoop::QuitClosure(),
899 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
900 base::MessageLoop::current()->Run();
901
902 // The timeout should have fired, synthetically ack'ing the timed-out event.
903 // TouchEvent forwarding is disabled until the ack is received for the
904 // timed-out event and the future cancel event.
905 EXPECT_FALSE(IsTimeoutRunning());
906 EXPECT_FALSE(WillForwardTouchEvents());
907 EXPECT_EQ(0U, GetAndResetSentEventCount());
908 EXPECT_EQ(1U, GetAndResetAckedEventCount());
909
910 // Ack'ing the original event should trigger a cancel event.
911 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
912 EXPECT_FALSE(IsTimeoutRunning());
913 EXPECT_FALSE(WillForwardTouchEvents());
914 EXPECT_EQ(0U, GetAndResetAckedEventCount());
915 EXPECT_EQ(1U, GetAndResetSentEventCount());
916
917 // Touch events should not be forwarded until we receive the cancel acks.
918 PressTouchPoint(0, 1);
919 ASSERT_EQ(0U, GetAndResetSentEventCount());
920 ASSERT_EQ(1U, GetAndResetAckedEventCount());
921
922 // The synthetic TouchCancel ack should not reach the client, but should
923 // resume touch forwarding.
924 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
925 EXPECT_EQ(0U, GetAndResetSentEventCount());
926 EXPECT_EQ(0U, GetAndResetAckedEventCount());
927 EXPECT_TRUE(WillForwardTouchEvents());
928
929 // Subsequent events should be handled normally.
930 PressTouchPoint(0, 1);
931 EXPECT_EQ(1U, GetAndResetSentEventCount());
932 EXPECT_EQ(0U, GetAndResetAckedEventCount());
933 }
934
935 // Tests that the timeout is never started if the renderer consumes
936 // a TouchEvent from the current touch sequence.
937 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) {
938 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
939
940 // Queue a TouchStart.
941 PressTouchPoint(0, 1);
942 ASSERT_TRUE(IsTimeoutRunning());
943
944 // Mark the event as consumed. This should prevent the timeout from
945 // being activated on subsequent TouchEvents in this gesture.
946 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
947 EXPECT_FALSE(IsTimeoutRunning());
948
949 // A TouchMove should not start the timeout.
950 MoveTouchPoint(0, 5, 5);
951 EXPECT_FALSE(IsTimeoutRunning());
952 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
953
954 // A secondary TouchStart should not start the timeout.
955 PressTouchPoint(1, 0);
956 EXPECT_FALSE(IsTimeoutRunning());
957 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
958
959 // A TouchEnd should not start the timeout.
960 ReleaseTouchPoint(1);
961 EXPECT_FALSE(IsTimeoutRunning());
962 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
963
964 // A TouchCancel should not start the timeout.
965 CancelTouchPoint(0);
966 EXPECT_FALSE(IsTimeoutRunning());
967 }
968
969 // Tests that the timeout is never started if the ack is synchronous.
970 TEST_F(TouchEventQueueTest, NoTouchTimeoutIfAckIsSynchronous) {
971 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
972
973 // Queue a TouchStart.
974 SetSyncAckResult(INPUT_EVENT_ACK_STATE_CONSUMED);
975 ASSERT_FALSE(IsTimeoutRunning());
976 PressTouchPoint(0, 1);
977 EXPECT_FALSE(IsTimeoutRunning());
978 }
979
980 // Tests that a TouchCancel timeout plays nice when the timed out touch stream
981 // turns into a scroll gesture sequence.
982 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGesture) {
983 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
984
985 // Queue a TouchStart.
986 PressTouchPoint(0, 1);
987 EXPECT_TRUE(IsTimeoutRunning());
988 EXPECT_TRUE(WillForwardTouchEvents());
989 EXPECT_EQ(1U, GetAndResetSentEventCount());
990
991 // The cancelled sequence may turn into a scroll gesture.
992 WebGestureEvent followup_scroll;
993 followup_scroll.type = WebInputEvent::GestureScrollBegin;
994 SetFollowupEvent(followup_scroll);
995
996 // Delay the ack.
997 base::MessageLoop::current()->PostDelayedTask(
998 FROM_HERE,
999 base::MessageLoop::QuitClosure(),
1000 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1001 base::MessageLoop::current()->Run();
1002
1003 // The timeout should have fired, disabling touch forwarding until both acks
1004 // are received, acking the timed out event.
1005 EXPECT_FALSE(IsTimeoutRunning());
1006 EXPECT_FALSE(WillForwardTouchEvents());
1007 EXPECT_EQ(0U, GetAndResetSentEventCount());
1008 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1009
1010 // Ack the original event, triggering a TouchCancel.
1011 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1012 EXPECT_FALSE(IsTimeoutRunning());
1013 EXPECT_FALSE(WillForwardTouchEvents());
1014 EXPECT_EQ(1U, GetAndResetSentEventCount());
1015 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1016
1017 // Ack the cancel event. Normally, this would resume touch forwarding,
1018 // but we're still within a scroll gesture so it remains disabled.
1019 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1020 EXPECT_FALSE(IsTimeoutRunning());
1021 EXPECT_FALSE(WillForwardTouchEvents());
1022 EXPECT_EQ(0U, GetAndResetSentEventCount());
1023 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1024
1025 // Try to forward a touch event.
1026 GetAndResetSentEventCount();
1027 GetAndResetAckedEventCount();
1028 PressTouchPoint(0, 1);
1029 EXPECT_FALSE(IsTimeoutRunning());
1030 EXPECT_EQ(0U, GetAndResetSentEventCount());
1031 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1032
1033 // Now end the scroll sequence, resuming touch handling.
1034 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd);
1035 EXPECT_TRUE(WillForwardTouchEvents());
1036 PressTouchPoint(0, 1);
1037 EXPECT_TRUE(IsTimeoutRunning());
1038 EXPECT_EQ(1U, GetAndResetSentEventCount());
1039 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1040 }
1041
1042 // Tests that a TouchCancel timeout plays nice when the timed out touch stream
1043 // turns into a scroll gesture sequence, but the original event acks are
1044 // significantly delayed.
1045 TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGestureAndDelayedAck) {
1046 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
1047
1048 // Queue a TouchStart.
1049 PressTouchPoint(0, 1);
1050 EXPECT_TRUE(IsTimeoutRunning());
1051 EXPECT_TRUE(WillForwardTouchEvents());
1052 EXPECT_EQ(1U, GetAndResetSentEventCount());
1053
1054 // The cancelled sequence may turn into a scroll gesture.
1055 WebGestureEvent followup_scroll;
1056 followup_scroll.type = WebInputEvent::GestureScrollBegin;
1057 SetFollowupEvent(followup_scroll);
1058
1059 // Delay the ack.
1060 base::MessageLoop::current()->PostDelayedTask(
1061 FROM_HERE,
1062 base::MessageLoop::QuitClosure(),
1063 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1064 base::MessageLoop::current()->Run();
1065
1066 // The timeout should have fired, disabling touch forwarding until both acks
1067 // are received and acking the timed out event.
1068 EXPECT_FALSE(IsTimeoutRunning());
1069 EXPECT_FALSE(WillForwardTouchEvents());
1070 EXPECT_EQ(0U, GetAndResetSentEventCount());
1071 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1072
1073 // Try to forward a touch event.
1074 GetAndResetSentEventCount();
1075 GetAndResetAckedEventCount();
1076 PressTouchPoint(0, 1);
1077 EXPECT_FALSE(IsTimeoutRunning());
1078 EXPECT_EQ(0U, GetAndResetSentEventCount());
1079 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1080
1081 // Now end the scroll sequence. Events will not be forwarded until the two
1082 // outstanding touch acks are received.
1083 SendGestureEvent(blink::WebInputEvent::GestureScrollEnd);
1084 PressTouchPoint(0, 1);
1085 EXPECT_FALSE(IsTimeoutRunning());
1086 EXPECT_EQ(0U, GetAndResetSentEventCount());
1087 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1088
1089 // Ack the original event, triggering a cancel.
1090 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1091 EXPECT_EQ(1U, GetAndResetSentEventCount());
1092 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1093
1094 // Ack the cancel event, resuming touch forwarding.
1095 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED);
1096 EXPECT_EQ(0U, GetAndResetSentEventCount());
1097 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1098
1099 PressTouchPoint(0, 1);
1100 EXPECT_TRUE(IsTimeoutRunning());
1101 EXPECT_EQ(1U, GetAndResetSentEventCount());
1102 }
1103
1104 // Tests that a delayed TouchEvent ack will not trigger a TouchCancel timeout if
1105 // the timed-out event had no consumer.
1106 TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) {
1107 SetUpForTimeoutTesting(kDefaultTouchTimeoutDelayMs);
1108
1109 // Queue a TouchStart.
1110 PressTouchPoint(0, 1);
1111 ASSERT_EQ(1U, GetAndResetSentEventCount());
1112 ASSERT_EQ(0U, GetAndResetAckedEventCount());
1113 EXPECT_TRUE(IsTimeoutRunning());
1114 EXPECT_TRUE(WillForwardTouchEvents());
1115
1116 // Delay the ack.
1117 base::MessageLoop::current()->PostDelayedTask(
1118 FROM_HERE,
1119 base::MessageLoop::QuitClosure(),
1120 base::TimeDelta::FromMilliseconds(kDefaultTouchTimeoutDelayMs * 2));
1121 base::MessageLoop::current()->Run();
1122
1123 // The timeout should have fired, synthetically ack'ing the timed out event.
1124 // TouchEvent forwarding is disabled until the original ack is received.
1125 EXPECT_FALSE(IsTimeoutRunning());
1126 EXPECT_FALSE(WillForwardTouchEvents());
1127 EXPECT_EQ(0U, GetAndResetSentEventCount());
1128 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1129
1130 // Touch events should not be forwarded until we receive the original ack.
1131 PressTouchPoint(0, 1);
1132 ASSERT_EQ(0U, GetAndResetSentEventCount());
1133 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1134
1135 // Ack'ing the original event should not trigger a cancel event, as the
1136 // TouchStart had no consumer. However, it should re-enable touch forwarding.
1137 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
1138 EXPECT_FALSE(IsTimeoutRunning());
1139 EXPECT_TRUE(WillForwardTouchEvents());
1140 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1141 EXPECT_EQ(0U, GetAndResetSentEventCount());
1142
1143 // Subsequent events should be handled normally.
1144 PressTouchPoint(0, 1);
1145 EXPECT_EQ(1U, GetAndResetSentEventCount());
1146 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1147 }
893 } // namespace content 1148 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/touch_event_queue.cc ('k') | content/browser/renderer_host/render_widget_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698