OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "content/browser/renderer_host/input/gesture_event_queue.h" | 7 #include "content/browser/renderer_host/input/gesture_event_queue.h" |
8 #include "content/common/input/synthetic_web_input_event_builders.h" | 8 #include "content/common/input/synthetic_web_input_event_builders.h" |
9 #include "content/common/input/web_input_event_traits.h" | 9 #include "content/common/input/web_input_event_traits.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 PushGesture(WebInputEvent::GestureScrollBegin); | 191 PushGesture(WebInputEvent::GestureScrollBegin); |
192 PressTouchPoint(1, 1); | 192 PressTouchPoint(1, 1); |
193 EXPECT_FALSE(GesturesSent()); | 193 EXPECT_FALSE(GesturesSent()); |
194 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 194 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
195 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), | 195 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
196 GetAndResetSentGestures())); | 196 GetAndResetSentGestures())); |
197 | 197 |
198 // Multiple gestures can be queued for a single event. | 198 // Multiple gestures can be queued for a single event. |
199 PushGesture(WebInputEvent::GestureFlingStart); | 199 PushGesture(WebInputEvent::GestureFlingStart); |
200 PushGesture(WebInputEvent::GestureFlingCancel); | 200 PushGesture(WebInputEvent::GestureFlingCancel); |
201 MoveTouchPoint(0, 1, 1); | 201 ReleaseTouchPoint(0); |
202 EXPECT_FALSE(GesturesSent()); | 202 EXPECT_FALSE(GesturesSent()); |
203 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 203 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
204 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, | 204 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, |
205 WebInputEvent::GestureFlingCancel), | 205 WebInputEvent::GestureFlingCancel), |
206 GetAndResetSentGestures())); | 206 GetAndResetSentGestures())); |
| 207 } |
207 | 208 |
| 209 TEST_F(GestureEventQueueTest, BasicGesturesConsumed) { |
208 // A consumed touch's gesture should not be sent. | 210 // A consumed touch's gesture should not be sent. |
| 211 PushGesture(WebInputEvent::GestureScrollBegin); |
| 212 PressTouchPoint(1, 1); |
| 213 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 214 EXPECT_FALSE(GesturesSent()); |
| 215 |
209 PushGesture(WebInputEvent::GestureFlingStart); | 216 PushGesture(WebInputEvent::GestureFlingStart); |
210 PushGesture(WebInputEvent::GestureFlingCancel); | 217 PushGesture(WebInputEvent::GestureFlingCancel); |
211 ReleaseTouchPoint(0); | 218 ReleaseTouchPoint(0); |
212 EXPECT_FALSE(GesturesSent()); | |
213 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); | 219 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
214 EXPECT_FALSE(GesturesSent()); | 220 EXPECT_FALSE(GesturesSent()); |
215 } | 221 } |
216 | 222 |
217 TEST_F(GestureEventQueueTest, ConsumedThenNotConsumed) { | 223 TEST_F(GestureEventQueueTest, ConsumedThenNotConsumed) { |
218 // A consumed touch's gesture should not be sent. | 224 // A consumed touch's gesture should not be sent. |
219 PushGesture(WebInputEvent::GestureScrollBegin); | 225 PushGesture(WebInputEvent::GestureScrollBegin); |
220 PressTouchPoint(1, 1); | 226 PressTouchPoint(1, 1); |
221 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); | 227 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
222 EXPECT_FALSE(GesturesSent()); | 228 EXPECT_FALSE(GesturesSent()); |
223 | 229 |
224 // Even if the subsequent touch is not consumed, continue dropping gestures. | 230 // Even if the subsequent touch is not consumed, continue dropping gestures. |
225 PushGesture(WebInputEvent::GestureScrollUpdate); | 231 PushGesture(WebInputEvent::GestureScrollUpdate); |
226 MoveTouchPoint(0, 2, 2); | 232 MoveTouchPoint(0, 2, 2); |
227 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 233 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
228 EXPECT_FALSE(GesturesSent()); | 234 EXPECT_FALSE(GesturesSent()); |
229 | 235 |
230 // Even if the subsequent touch had no consumer, continue dropping gestures. | 236 // Even if the subsequent touch had no consumer, continue dropping gestures. |
231 PushGesture(WebInputEvent::GestureFlingStart); | 237 PushGesture(WebInputEvent::GestureFlingStart); |
232 ReleaseTouchPoint(0); | 238 ReleaseTouchPoint(0); |
233 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 239 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
234 EXPECT_FALSE(GesturesSent()); | 240 EXPECT_FALSE(GesturesSent()); |
235 } | 241 } |
236 | 242 |
| 243 |
| 244 TEST_F(GestureEventQueueTest, NotConsumedThenConsumed) { |
| 245 // A not consumed touch's gesture should be sent. |
| 246 PushGesture(WebInputEvent::GestureScrollBegin); |
| 247 PressTouchPoint(1, 1); |
| 248 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 249 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
| 250 GetAndResetSentGestures())); |
| 251 |
| 252 // A newly consumed gesture should not be sent. |
| 253 PushGesture(WebInputEvent::GesturePinchBegin); |
| 254 PressTouchPoint(10, 10); |
| 255 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 256 EXPECT_FALSE(GesturesSent()); |
| 257 |
| 258 // And subsequent non-consumed updates should not be sent. |
| 259 PushGesture(WebInputEvent::GestureScrollUpdate); |
| 260 PushGesture(WebInputEvent::GesturePinchUpdate); |
| 261 MoveTouchPoint(0, 2, 2); |
| 262 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 263 EXPECT_FALSE(GesturesSent()); |
| 264 |
| 265 // End events dispatched only when their start events were. |
| 266 PushGesture(WebInputEvent::GesturePinchEnd); |
| 267 ReleaseTouchPoint(1); |
| 268 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 269 EXPECT_FALSE(GesturesSent()); |
| 270 |
| 271 PushGesture(WebInputEvent::GestureScrollEnd); |
| 272 ReleaseTouchPoint(0); |
| 273 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 274 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), |
| 275 GetAndResetSentGestures())); |
| 276 } |
| 277 |
237 TEST_F(GestureEventQueueTest, NotConsumedThenNoConsumer) { | 278 TEST_F(GestureEventQueueTest, NotConsumedThenNoConsumer) { |
238 // An unconsumed touch's gesture should be sent. | 279 // An unconsumed touch's gesture should be sent. |
239 PushGesture(WebInputEvent::GestureScrollBegin); | 280 PushGesture(WebInputEvent::GestureScrollBegin); |
240 PressTouchPoint(1, 1); | 281 PressTouchPoint(1, 1); |
241 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 282 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
242 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), | 283 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
243 GetAndResetSentGestures())); | 284 GetAndResetSentGestures())); |
244 | 285 |
245 // If the subsequent touch has no consumer (e.g., a secondary pointer is | 286 // If the subsequent touch has no consumer (e.g., a secondary pointer is |
246 // pressed but not on a touch handling rect), send the gesture. | 287 // pressed but not on a touch handling rect), send the gesture. |
247 PushGesture(WebInputEvent::GesturePinchBegin); | 288 PushGesture(WebInputEvent::GesturePinchBegin); |
248 PressTouchPoint(2, 2); | 289 PressTouchPoint(2, 2); |
249 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 290 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
250 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), | 291 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), |
251 GetAndResetSentGestures())); | 292 GetAndResetSentGestures())); |
252 | 293 |
253 // If the subsequent touch is consumed, then the remaining gesture sequence | 294 // End events should be dispatched when their start events were, independent |
254 // should be dropped, regardless of subsequent touch ack disposition. | 295 // of the ack state. |
| 296 PushGesture(WebInputEvent::GesturePinchEnd); |
| 297 ReleaseTouchPoint(1); |
| 298 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 299 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), |
| 300 GetAndResetSentGestures())); |
| 301 |
| 302 PushGesture(WebInputEvent::GestureScrollEnd); |
| 303 ReleaseTouchPoint(0); |
| 304 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 305 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), |
| 306 GetAndResetSentGestures())); |
| 307 } |
| 308 |
| 309 TEST_F(GestureEventQueueTest, EndingEventsSent) { |
| 310 PushGesture(WebInputEvent::GestureScrollBegin); |
| 311 PressTouchPoint(1, 1); |
| 312 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 313 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
| 314 GetAndResetSentGestures())); |
| 315 |
| 316 PushGesture(WebInputEvent::GesturePinchBegin); |
| 317 PressTouchPoint(2, 2); |
| 318 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 319 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), |
| 320 GetAndResetSentGestures())); |
| 321 |
| 322 // Consuming the touchend event can't suppress the match end gesture. |
| 323 PushGesture(WebInputEvent::GesturePinchEnd); |
| 324 ReleaseTouchPoint(1); |
| 325 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 326 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), |
| 327 GetAndResetSentGestures())); |
| 328 |
| 329 // But other events in the same packet are still suppressed. |
255 PushGesture(WebInputEvent::GestureScrollUpdate); | 330 PushGesture(WebInputEvent::GestureScrollUpdate); |
256 PushGesture(WebInputEvent::GesturePinchUpdate); | 331 PushGesture(WebInputEvent::GestureScrollEnd); |
| 332 ReleaseTouchPoint(0); |
| 333 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 334 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), |
| 335 GetAndResetSentGestures())); |
| 336 |
| 337 // GestureScrollEnd and GestureFlingStart behave the same in this regard. |
| 338 PushGesture(WebInputEvent::GestureScrollBegin); |
| 339 PressTouchPoint(1, 1); |
| 340 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 341 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
| 342 GetAndResetSentGestures())); |
| 343 |
| 344 PushGesture(WebInputEvent::GestureFlingStart); |
| 345 ReleaseTouchPoint(0); |
| 346 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 347 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart), |
| 348 GetAndResetSentGestures())); |
| 349 } |
| 350 |
| 351 TEST_F(GestureEventQueueTest, EndingEventsNotSent) { |
| 352 // Consuming a begin event ensures no end events are sent. |
| 353 PushGesture(WebInputEvent::GestureScrollBegin); |
| 354 PressTouchPoint(1, 1); |
| 355 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 356 EXPECT_FALSE(GesturesSent()); |
| 357 |
| 358 PushGesture(WebInputEvent::GesturePinchBegin); |
| 359 PressTouchPoint(2, 2); |
| 360 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 361 EXPECT_FALSE(GesturesSent()); |
| 362 |
| 363 PushGesture(WebInputEvent::GesturePinchEnd); |
| 364 ReleaseTouchPoint(1); |
| 365 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 366 EXPECT_FALSE(GesturesSent()); |
| 367 |
| 368 PushGesture(WebInputEvent::GestureScrollEnd); |
| 369 ReleaseTouchPoint(0); |
| 370 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 371 EXPECT_FALSE(GesturesSent()); |
| 372 } |
| 373 |
| 374 TEST_F(GestureEventQueueTest, IndependentPacketsAllowed) { |
| 375 PushGesture(WebInputEvent::GestureScrollBegin); |
| 376 PressTouchPoint(1, 1); |
| 377 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 378 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
| 379 GetAndResetSentGestures())); |
| 380 |
| 381 // Consuming a single scroll or pinch update should suppress only that event. |
| 382 PushGesture(WebInputEvent::GestureScrollUpdate); |
257 MoveTouchPoint(0, 2, 2); | 383 MoveTouchPoint(0, 2, 2); |
258 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); | 384 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
259 EXPECT_FALSE(GesturesSent()); | 385 EXPECT_FALSE(GesturesSent()); |
260 | 386 |
| 387 PushGesture(WebInputEvent::GesturePinchBegin); |
| 388 PressTouchPoint(2, 2); |
| 389 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 390 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), |
| 391 GetAndResetSentGestures())); |
| 392 |
| 393 PushGesture(WebInputEvent::GesturePinchUpdate); |
| 394 MoveTouchPoint(1, 2, 3); |
| 395 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 396 EXPECT_FALSE(GesturesSent()); |
| 397 |
| 398 // Subsequent updates should not be affected. |
| 399 PushGesture(WebInputEvent::GestureScrollUpdate); |
| 400 MoveTouchPoint(0, 4, 4); |
| 401 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 402 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollUpdate), |
| 403 GetAndResetSentGestures())); |
| 404 |
| 405 PushGesture(WebInputEvent::GesturePinchUpdate); |
| 406 MoveTouchPoint(0, 4, 5); |
| 407 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 408 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchUpdate), |
| 409 GetAndResetSentGestures())); |
| 410 |
| 411 PushGesture(WebInputEvent::GesturePinchEnd); |
| 412 ReleaseTouchPoint(1); |
| 413 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 414 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), |
| 415 GetAndResetSentGestures())); |
| 416 |
| 417 PushGesture(WebInputEvent::GestureScrollEnd); |
| 418 ReleaseTouchPoint(0); |
| 419 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 420 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), |
| 421 GetAndResetSentGestures())); |
| 422 } |
| 423 |
| 424 TEST_F(GestureEventQueueTest, IndependentPacketsNotAllowed) { |
| 425 PushGesture(WebInputEvent::GestureScrollBegin); |
| 426 PressTouchPoint(1, 1); |
| 427 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 428 EXPECT_FALSE(GesturesSent()); |
| 429 |
| 430 // Independent packets are never sent when the global state is to drop. |
| 431 PushGesture(WebInputEvent::GestureScrollUpdate); |
| 432 MoveTouchPoint(0, 2, 2); |
| 433 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 434 EXPECT_FALSE(GesturesSent()); |
| 435 |
| 436 PushGesture(WebInputEvent::GesturePinchBegin); |
| 437 PressTouchPoint(2, 2); |
| 438 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 439 EXPECT_FALSE(GesturesSent()); |
| 440 |
| 441 PushGesture(WebInputEvent::GesturePinchUpdate); |
| 442 MoveTouchPoint(1, 2, 3); |
| 443 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
| 444 EXPECT_FALSE(GesturesSent()); |
| 445 |
261 PushGesture(WebInputEvent::GesturePinchEnd); | 446 PushGesture(WebInputEvent::GesturePinchEnd); |
262 ReleaseTouchPoint(1); | 447 ReleaseTouchPoint(1); |
263 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 448 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
264 EXPECT_FALSE(GesturesSent()); | 449 EXPECT_FALSE(GesturesSent()); |
265 | 450 |
266 PushGesture(WebInputEvent::GestureScrollEnd); | 451 PushGesture(WebInputEvent::GestureScrollEnd); |
267 ReleaseTouchPoint(0); | 452 ReleaseTouchPoint(0); |
268 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 453 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
269 EXPECT_FALSE(GesturesSent()); | 454 EXPECT_FALSE(GesturesSent()); |
270 } | 455 } |
271 | 456 |
272 TEST_F(GestureEventQueueTest, MultipleTouchSequences) { | 457 TEST_F(GestureEventQueueTest, MultipleTouchSequences) { |
273 // Queue two touch-to-gestures sequences. | 458 // Queue two touch-to-gestures sequences. |
274 PushGesture(WebInputEvent::GestureFlingStart); | 459 PushGesture(WebInputEvent::GestureTapDown); |
275 PressTouchPoint(1, 1); | 460 PressTouchPoint(1, 1); |
276 PushGesture(WebInputEvent::GestureFlingCancel); | 461 PushGesture(WebInputEvent::GestureTap); |
277 ReleaseTouchPoint(0); | 462 ReleaseTouchPoint(0); |
278 PushGesture(WebInputEvent::GestureFlingStart); | 463 PushGesture(WebInputEvent::GestureScrollBegin); |
279 PressTouchPoint(1, 1); | 464 PressTouchPoint(1, 1); |
280 PushGesture(WebInputEvent::GestureFlingCancel); | 465 PushGesture(WebInputEvent::GestureScrollEnd); |
281 ReleaseTouchPoint(0); | 466 ReleaseTouchPoint(0); |
282 | 467 |
283 // The first gesture sequence should not be allowed. | 468 // The first gesture sequence should not be allowed. |
284 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); | 469 SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); |
285 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 470 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
286 EXPECT_FALSE(GesturesSent()); | 471 EXPECT_FALSE(GesturesSent()); |
287 | 472 |
288 // The subsequent sequence should "reset" allowance. | 473 // The subsequent sequence should "reset" allowance. |
289 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 474 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
290 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 475 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
291 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, | 476 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, |
292 WebInputEvent::GestureFlingCancel), | 477 WebInputEvent::GestureScrollEnd), |
293 GetAndResetSentGestures())); | 478 GetAndResetSentGestures())); |
294 } | 479 } |
295 | 480 |
296 TEST_F(GestureEventQueueTest, FlingCancelledOnNewTouchSequence) { | 481 TEST_F(GestureEventQueueTest, FlingCancelledOnNewTouchSequence) { |
297 // Simulate a fling. | 482 // Simulate a fling. |
| 483 PushGesture(WebInputEvent::GestureScrollBegin); |
298 PressTouchPoint(1, 1); | 484 PressTouchPoint(1, 1); |
299 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 485 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 486 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), |
| 487 GetAndResetSentGestures())); |
300 PushGesture(WebInputEvent::GestureFlingStart); | 488 PushGesture(WebInputEvent::GestureFlingStart); |
301 ReleaseTouchPoint(0); | 489 ReleaseTouchPoint(0); |
302 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 490 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
303 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart), | 491 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart), |
304 GetAndResetSentGestures())); | 492 GetAndResetSentGestures())); |
305 | 493 |
306 // A new touch seqeuence should cancel the outstanding fling. | 494 // A new touch seqeuence should cancel the outstanding fling. |
307 PressTouchPoint(1, 1); | 495 PressTouchPoint(1, 1); |
308 ReleaseTouchPoint(0); | |
309 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 496 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
310 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel), | 497 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel), |
311 GetAndResetSentGestures())); | 498 GetAndResetSentGestures())); |
| 499 ReleaseTouchPoint(0); |
| 500 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
| 501 EXPECT_FALSE(GesturesSent()); |
312 } | 502 } |
313 | 503 |
314 TEST_F(GestureEventQueueTest, FlingCancelledOnScrollBegin) { | 504 TEST_F(GestureEventQueueTest, FlingCancelledOnScrollBegin) { |
315 // Simulate a fling sequence. | 505 // Simulate a fling sequence. |
316 PushGesture(WebInputEvent::GestureScrollBegin); | 506 PushGesture(WebInputEvent::GestureScrollBegin); |
317 PushGesture(WebInputEvent::GestureFlingStart); | 507 PushGesture(WebInputEvent::GestureFlingStart); |
318 PressTouchPoint(1, 1); | 508 PressTouchPoint(1, 1); |
319 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 509 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
320 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, | 510 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, |
321 WebInputEvent::GestureFlingStart), | 511 WebInputEvent::GestureFlingStart), |
322 GetAndResetSentGestures())); | 512 GetAndResetSentGestures())); |
323 | 513 |
324 // The new fling should cancel the preceding one. | 514 // The new fling should cancel the preceding one. |
325 PushGesture(WebInputEvent::GestureScrollBegin); | 515 PushGesture(WebInputEvent::GestureScrollBegin); |
326 PushGesture(WebInputEvent::GestureFlingStart); | 516 PushGesture(WebInputEvent::GestureFlingStart); |
327 ReleaseTouchPoint(0); | 517 ReleaseTouchPoint(0); |
328 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 518 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
329 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel, | 519 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel, |
330 WebInputEvent::GestureScrollBegin, | 520 WebInputEvent::GestureScrollBegin, |
331 WebInputEvent::GestureFlingStart), | 521 WebInputEvent::GestureFlingStart), |
332 GetAndResetSentGestures())); | 522 GetAndResetSentGestures())); |
333 } | 523 } |
334 | 524 |
335 TEST_F(GestureEventQueueTest, FlingNotCancelledIfGFCEventReceived) { | 525 TEST_F(GestureEventQueueTest, FlingNotCancelledIfGFCEventReceived) { |
336 // Simulate a fling that is started then cancelled. | 526 // Simulate a fling that is started then cancelled. |
| 527 PushGesture(WebInputEvent::GestureScrollBegin); |
| 528 PressTouchPoint(1, 1); |
| 529 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
337 PushGesture(WebInputEvent::GestureFlingStart); | 530 PushGesture(WebInputEvent::GestureFlingStart); |
338 PressTouchPoint(1, 1); | 531 MoveTouchPoint(0, 1, 1); |
339 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 532 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
340 PushGesture(WebInputEvent::GestureFlingCancel); | 533 PushGesture(WebInputEvent::GestureFlingCancel); |
341 ReleaseTouchPoint(0); | 534 ReleaseTouchPoint(0); |
342 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 535 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
343 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, | 536 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, |
| 537 WebInputEvent::GestureFlingStart, |
344 WebInputEvent::GestureFlingCancel), | 538 WebInputEvent::GestureFlingCancel), |
345 GetAndResetSentGestures())); | 539 GetAndResetSentGestures())); |
346 | 540 |
347 // A new touch sequence will not inject a GestureFlingCancel, as the fling | 541 // A new touch sequence will not inject a GestureFlingCancel, as the fling |
348 // has already been cancelled. | 542 // has already been cancelled. |
349 PressTouchPoint(1, 1); | 543 PressTouchPoint(1, 1); |
| 544 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
350 ReleaseTouchPoint(0); | 545 ReleaseTouchPoint(0); |
351 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); | 546 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); |
352 EXPECT_FALSE(GesturesSent()); | 547 EXPECT_FALSE(GesturesSent()); |
353 } | 548 } |
354 | 549 |
355 TEST_F(GestureEventQueueTest, TapCancelledWhenScrollBegins) { | 550 TEST_F(GestureEventQueueTest, TapCancelledWhenScrollBegins) { |
356 PushGesture(WebInputEvent::GestureTapDown); | 551 PushGesture(WebInputEvent::GestureTapDown); |
357 PressTouchPoint(1, 1); | 552 PressTouchPoint(1, 1); |
358 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 553 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
359 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapDown), | 554 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapDown), |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 | 635 |
441 SendTimeoutGesture(WebInputEvent::GestureLongPress); | 636 SendTimeoutGesture(WebInputEvent::GestureLongPress); |
442 EXPECT_FALSE(GesturesSent()); | 637 EXPECT_FALSE(GesturesSent()); |
443 | 638 |
444 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 639 SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
445 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureLongPress), | 640 EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureLongPress), |
446 GetAndResetSentGestures())); | 641 GetAndResetSentGestures())); |
447 } | 642 } |
448 | 643 |
449 } // namespace content | 644 } // namespace content |
OLD | NEW |