OLD | NEW |
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" | 8 #include "base/message_loop/message_loop.h" |
9 #include "content/browser/renderer_host/input/timeout_monitor.h" | 9 #include "content/browser/renderer_host/input/timeout_monitor.h" |
10 #include "content/browser/renderer_host/input/touch_event_queue.h" | 10 #include "content/browser/renderer_host/input/touch_event_queue.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 } // namespace | 28 } // namespace |
29 | 29 |
30 class TouchEventQueueTest : public testing::Test, | 30 class TouchEventQueueTest : public testing::Test, |
31 public TouchEventQueueClient { | 31 public TouchEventQueueClient { |
32 public: | 32 public: |
33 TouchEventQueueTest() | 33 TouchEventQueueTest() |
34 : sent_event_count_(0), | 34 : sent_event_count_(0), |
35 acked_event_count_(0), | 35 acked_event_count_(0), |
36 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN), | 36 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN), |
37 slop_length_dips_(0), | 37 slop_length_dips_(0), |
| 38 slop_includes_boundary_(true), |
38 touch_scrolling_mode_(TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT) {} | 39 touch_scrolling_mode_(TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT) {} |
39 | 40 |
40 virtual ~TouchEventQueueTest() {} | 41 virtual ~TouchEventQueueTest() {} |
41 | 42 |
42 // testing::Test | 43 // testing::Test |
43 virtual void SetUp() OVERRIDE { ResetQueueWithConfig(CreateConfig()); } | 44 virtual void SetUp() OVERRIDE { ResetQueueWithConfig(CreateConfig()); } |
44 | 45 |
45 virtual void TearDown() OVERRIDE { | 46 virtual void TearDown() OVERRIDE { |
46 queue_.reset(); | 47 queue_.reset(); |
47 } | 48 } |
(...skipping 25 matching lines...) Expand all Loading... |
73 GestureEventWithLatencyInfo(*followup_gesture_event, | 74 GestureEventWithLatencyInfo(*followup_gesture_event, |
74 ui::LatencyInfo())); | 75 ui::LatencyInfo())); |
75 } | 76 } |
76 } | 77 } |
77 | 78 |
78 protected: | 79 protected: |
79 TouchEventQueue::Config CreateConfig() { | 80 TouchEventQueue::Config CreateConfig() { |
80 TouchEventQueue::Config config; | 81 TouchEventQueue::Config config; |
81 config.touch_scrolling_mode = touch_scrolling_mode_; | 82 config.touch_scrolling_mode = touch_scrolling_mode_; |
82 config.touchmove_slop_suppression_length_dips = slop_length_dips_; | 83 config.touchmove_slop_suppression_length_dips = slop_length_dips_; |
| 84 config.touchmove_slop_suppression_region_includes_boundary = |
| 85 slop_includes_boundary_; |
83 return config; | 86 return config; |
84 } | 87 } |
85 | 88 |
86 void SetTouchScrollingMode(TouchEventQueue::TouchScrollingMode mode) { | 89 void SetTouchScrollingMode(TouchEventQueue::TouchScrollingMode mode) { |
87 touch_scrolling_mode_ = mode; | 90 touch_scrolling_mode_ = mode; |
88 ResetQueueWithConfig(CreateConfig()); | 91 ResetQueueWithConfig(CreateConfig()); |
89 } | 92 } |
90 | 93 |
91 void SetUpForTouchMoveSlopTesting(double slop_length_dips) { | 94 void SetUpForTouchMoveSlopTesting(double slop_length_dips, |
| 95 bool slop_includes_boundary) { |
92 slop_length_dips_ = slop_length_dips; | 96 slop_length_dips_ = slop_length_dips; |
| 97 slop_includes_boundary_ = slop_includes_boundary; |
93 ResetQueueWithConfig(CreateConfig()); | 98 ResetQueueWithConfig(CreateConfig()); |
94 } | 99 } |
95 | 100 |
96 void SetUpForTimeoutTesting(base::TimeDelta timeout_delay) { | 101 void SetUpForTimeoutTesting(base::TimeDelta timeout_delay) { |
97 TouchEventQueue::Config config = CreateConfig(); | 102 TouchEventQueue::Config config = CreateConfig(); |
98 config.touch_ack_timeout_delay = timeout_delay; | 103 config.touch_ack_timeout_delay = timeout_delay; |
99 config.touch_ack_timeout_supported = true; | 104 config.touch_ack_timeout_supported = true; |
100 ResetQueueWithConfig(config); | 105 ResetQueueWithConfig(config); |
101 } | 106 } |
102 | 107 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 size_t sent_event_count_; | 246 size_t sent_event_count_; |
242 size_t acked_event_count_; | 247 size_t acked_event_count_; |
243 WebTouchEvent last_sent_event_; | 248 WebTouchEvent last_sent_event_; |
244 WebTouchEvent last_acked_event_; | 249 WebTouchEvent last_acked_event_; |
245 InputEventAckState last_acked_event_state_; | 250 InputEventAckState last_acked_event_state_; |
246 SyntheticWebTouchEvent touch_event_; | 251 SyntheticWebTouchEvent touch_event_; |
247 scoped_ptr<WebTouchEvent> followup_touch_event_; | 252 scoped_ptr<WebTouchEvent> followup_touch_event_; |
248 scoped_ptr<WebGestureEvent> followup_gesture_event_; | 253 scoped_ptr<WebGestureEvent> followup_gesture_event_; |
249 scoped_ptr<InputEventAckState> sync_ack_result_; | 254 scoped_ptr<InputEventAckState> sync_ack_result_; |
250 double slop_length_dips_; | 255 double slop_length_dips_; |
| 256 bool slop_includes_boundary_; |
251 TouchEventQueue::TouchScrollingMode touch_scrolling_mode_; | 257 TouchEventQueue::TouchScrollingMode touch_scrolling_mode_; |
252 base::MessageLoopForUI message_loop_; | 258 base::MessageLoopForUI message_loop_; |
253 }; | 259 }; |
254 | 260 |
255 | 261 |
256 // Tests that touch-events are queued properly. | 262 // Tests that touch-events are queued properly. |
257 TEST_F(TouchEventQueueTest, Basic) { | 263 TEST_F(TouchEventQueueTest, Basic) { |
258 PressTouchPoint(1, 1); | 264 PressTouchPoint(1, 1); |
259 EXPECT_EQ(1U, queued_event_count()); | 265 EXPECT_EQ(1U, queued_event_count()); |
260 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 266 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
(...skipping 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 EXPECT_FALSE(IsTimeoutRunning()); | 1346 EXPECT_FALSE(IsTimeoutRunning()); |
1341 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1347 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
1342 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1348 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1343 | 1349 |
1344 // Subsequent events should be handled normally. | 1350 // Subsequent events should be handled normally. |
1345 PressTouchPoint(0, 1); | 1351 PressTouchPoint(0, 1); |
1346 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1352 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1347 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1353 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
1348 } | 1354 } |
1349 | 1355 |
1350 // Tests that TouchMove's are dropped if within the slop suppression region | 1356 // Tests that TouchMove's are dropped if within the boundary-inclusive slop |
1351 // for an unconsumed TouchStart | 1357 // suppression region for an unconsumed TouchStart. |
1352 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) { | 1358 TEST_F(TouchEventQueueTest, TouchMoveSuppressionIncludingSlopBoundary) { |
1353 const double kSlopLengthDips = 10.; | 1359 const double kSlopLengthDips = 10.; |
1354 const double kHalfSlopLengthDips = kSlopLengthDips / 2; | 1360 const double kHalfSlopLengthDips = kSlopLengthDips / 2; |
1355 SetUpForTouchMoveSlopTesting(kSlopLengthDips); | 1361 const bool slop_includes_boundary = true; |
| 1362 SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary); |
1356 | 1363 |
1357 // Queue a TouchStart. | 1364 // Queue a TouchStart. |
1358 PressTouchPoint(0, 0); | 1365 PressTouchPoint(0, 0); |
1359 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1366 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1360 ASSERT_EQ(1U, GetAndResetSentEventCount()); | 1367 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
1361 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1368 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
1362 | 1369 |
1363 // TouchMove's within the region should be suppressed. | 1370 // TouchMove's within the region should be suppressed. |
1364 MoveTouchPoint(0, 0, kHalfSlopLengthDips); | 1371 MoveTouchPoint(0, 0, kHalfSlopLengthDips); |
1365 EXPECT_EQ(0U, queued_event_count()); | 1372 EXPECT_EQ(0U, queued_event_count()); |
1366 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1373 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1367 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1374 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1368 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); | 1375 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
1369 | 1376 |
1370 MoveTouchPoint(0, kHalfSlopLengthDips, 0); | 1377 MoveTouchPoint(0, kHalfSlopLengthDips, 0); |
1371 EXPECT_EQ(0U, queued_event_count()); | 1378 EXPECT_EQ(0U, queued_event_count()); |
1372 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1379 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1373 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1380 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1374 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); | 1381 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
1375 | 1382 |
1376 MoveTouchPoint(0, -kHalfSlopLengthDips, 0); | 1383 MoveTouchPoint(0, -kHalfSlopLengthDips, 0); |
1377 EXPECT_EQ(0U, queued_event_count()); | 1384 EXPECT_EQ(0U, queued_event_count()); |
1378 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1385 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1379 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1386 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1380 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); | 1387 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
1381 | 1388 |
| 1389 MoveTouchPoint(0, -kSlopLengthDips, 0); |
| 1390 EXPECT_EQ(0U, queued_event_count()); |
| 1391 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1392 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1393 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
| 1394 |
| 1395 MoveTouchPoint(0, 0, kSlopLengthDips); |
| 1396 EXPECT_EQ(0U, queued_event_count()); |
| 1397 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1398 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1399 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
| 1400 |
1382 // As soon as a TouchMove exceeds the (Euclidean) distance, no more | 1401 // As soon as a TouchMove exceeds the (Euclidean) distance, no more |
1383 // TouchMove's should be suppressed. | 1402 // TouchMove's should be suppressed. |
1384 const double kFortyFiveDegreeSlopLengthXY = | 1403 const double kFortyFiveDegreeSlopLengthXY = |
1385 kSlopLengthDips * std::sqrt(2.) / 2.; | 1404 kSlopLengthDips * std::sqrt(2.) / 2.; |
1386 MoveTouchPoint(0, kFortyFiveDegreeSlopLengthXY + .2, | 1405 MoveTouchPoint(0, kFortyFiveDegreeSlopLengthXY + .2, |
1387 kFortyFiveDegreeSlopLengthXY + .2); | 1406 kFortyFiveDegreeSlopLengthXY + .2); |
1388 EXPECT_EQ(1U, queued_event_count()); | 1407 EXPECT_EQ(1U, queued_event_count()); |
1389 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1408 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1390 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1409 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
1391 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1410 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
(...skipping 21 matching lines...) Expand all Loading... |
1413 EXPECT_EQ(0U, queued_event_count()); | 1432 EXPECT_EQ(0U, queued_event_count()); |
1414 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1433 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1415 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1434 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1416 | 1435 |
1417 MoveTouchPoint(0, kSlopLengthDips, 0); | 1436 MoveTouchPoint(0, kSlopLengthDips, 0); |
1418 EXPECT_EQ(0U, queued_event_count()); | 1437 EXPECT_EQ(0U, queued_event_count()); |
1419 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1438 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1420 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1439 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1421 } | 1440 } |
1422 | 1441 |
| 1442 // Tests that TouchMove's are dropped if within the boundary-exclusive slop |
| 1443 // suppression region for an unconsumed TouchStart. |
| 1444 TEST_F(TouchEventQueueTest, TouchMoveSuppressionExcludingSlopBoundary) { |
| 1445 const double kSlopLengthDips = 10.; |
| 1446 const double kHalfSlopLengthDips = kSlopLengthDips / 2; |
| 1447 const bool slop_includes_boundary = false; |
| 1448 SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary); |
| 1449 |
| 1450 // Queue a TouchStart. |
| 1451 PressTouchPoint(0, 0); |
| 1452 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1453 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
| 1454 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
| 1455 |
| 1456 // TouchMove's within the region should be suppressed. |
| 1457 MoveTouchPoint(0, 0, kHalfSlopLengthDips); |
| 1458 EXPECT_EQ(0U, queued_event_count()); |
| 1459 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1460 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1461 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
| 1462 |
| 1463 MoveTouchPoint(0, kSlopLengthDips - 0.2f, 0); |
| 1464 EXPECT_EQ(0U, queued_event_count()); |
| 1465 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 1466 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1467 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); |
| 1468 |
| 1469 // As soon as a TouchMove reaches the (Euclidean) slop distance, no more |
| 1470 // TouchMove's should be suppressed. |
| 1471 MoveTouchPoint(0, kSlopLengthDips, 0); |
| 1472 EXPECT_EQ(1U, queued_event_count()); |
| 1473 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1474 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1475 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1476 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1477 |
| 1478 MoveTouchPoint(0, kHalfSlopLengthDips, 0); |
| 1479 EXPECT_EQ(1U, queued_event_count()); |
| 1480 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1481 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
| 1482 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1483 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1484 } |
| 1485 |
1423 // Tests that TouchMove's are not dropped within the slop suppression region if | 1486 // Tests that TouchMove's are not dropped within the slop suppression region if |
1424 // the touchstart was consumed. | 1487 // the touchstart was consumed. |
1425 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) { | 1488 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) { |
1426 const double kSlopLengthDips = 10.; | 1489 const double kSlopLengthDips = 10.; |
1427 const double kHalfSlopLengthDips = kSlopLengthDips / 2; | 1490 const double kHalfSlopLengthDips = kSlopLengthDips / 2; |
1428 SetUpForTouchMoveSlopTesting(kSlopLengthDips); | 1491 const bool slop_includes_boundary = true; |
| 1492 SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary); |
1429 | 1493 |
1430 // Queue a TouchStart. | 1494 // Queue a TouchStart. |
1431 PressTouchPoint(0, 0); | 1495 PressTouchPoint(0, 0); |
1432 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 1496 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
1433 ASSERT_EQ(1U, GetAndResetSentEventCount()); | 1497 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
1434 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1498 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
1435 | 1499 |
1436 // TouchMove's within the region should not be suppressed, as a touch was | 1500 // TouchMove's within the region should not be suppressed, as a touch was |
1437 // consumed. | 1501 // consumed. |
1438 MoveTouchPoint(0, 0, kHalfSlopLengthDips); | 1502 MoveTouchPoint(0, 0, kHalfSlopLengthDips); |
1439 EXPECT_EQ(1U, queued_event_count()); | 1503 EXPECT_EQ(1U, queued_event_count()); |
1440 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1504 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1441 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1505 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
1442 } | 1506 } |
1443 | 1507 |
1444 // Tests that TouchMove's are not dropped due to incorrect handling of DPI | 1508 // Tests that TouchMove's are not dropped due to incorrect handling of DPI |
1445 // scaling. | 1509 // scaling. |
1446 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) { | 1510 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) { |
1447 const float kSlopLengthPixels = 7.f; | 1511 const float kSlopLengthPixels = 7.f; |
1448 const float kDPIScale = 3.f; | 1512 const float kDPIScale = 3.f; |
1449 SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale); | 1513 const bool slop_includes_boundary = true; |
| 1514 SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale, |
| 1515 slop_includes_boundary); |
1450 | 1516 |
1451 // Queue a TouchStart. | 1517 // Queue a TouchStart. |
1452 PressTouchPoint(0, 0); | 1518 PressTouchPoint(0, 0); |
1453 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1519 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1454 ASSERT_EQ(1U, GetAndResetSentEventCount()); | 1520 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
1455 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1521 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
1456 | 1522 |
1457 // TouchMove's along the slop boundary should be suppresed. | 1523 // TouchMove's along the slop boundary should be suppresed. |
1458 MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale); | 1524 MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale); |
1459 EXPECT_EQ(0U, queued_event_count()); | 1525 EXPECT_EQ(0U, queued_event_count()); |
(...skipping 19 matching lines...) Expand all Loading... |
1479 EXPECT_EQ(1U, queued_event_count()); | 1545 EXPECT_EQ(1U, queued_event_count()); |
1480 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1546 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1481 EXPECT_EQ(0U, GetAndResetAckedEventCount()); | 1547 EXPECT_EQ(0U, GetAndResetAckedEventCount()); |
1482 } | 1548 } |
1483 | 1549 |
1484 // Tests that TouchMove's are not dropped if a secondary pointer is present | 1550 // Tests that TouchMove's are not dropped if a secondary pointer is present |
1485 // during any movement. | 1551 // during any movement. |
1486 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { | 1552 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { |
1487 const double kSlopLengthDips = 10.; | 1553 const double kSlopLengthDips = 10.; |
1488 const double kHalfSlopLengthDips = kSlopLengthDips / 2; | 1554 const double kHalfSlopLengthDips = kSlopLengthDips / 2; |
1489 SetUpForTouchMoveSlopTesting(kSlopLengthDips); | 1555 const bool slop_includes_boundary = true; |
| 1556 SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary); |
1490 | 1557 |
1491 // Queue a TouchStart. | 1558 // Queue a TouchStart. |
1492 PressTouchPoint(0, 0); | 1559 PressTouchPoint(0, 0); |
1493 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1560 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1494 ASSERT_EQ(1U, GetAndResetSentEventCount()); | 1561 ASSERT_EQ(1U, GetAndResetSentEventCount()); |
1495 ASSERT_EQ(1U, GetAndResetAckedEventCount()); | 1562 ASSERT_EQ(1U, GetAndResetAckedEventCount()); |
1496 | 1563 |
1497 // TouchMove's within the region should be suppressed. | 1564 // TouchMove's within the region should be suppressed. |
1498 MoveTouchPoint(0, 0, kHalfSlopLengthDips); | 1565 MoveTouchPoint(0, 0, kHalfSlopLengthDips); |
1499 EXPECT_EQ(0U, queued_event_count()); | 1566 EXPECT_EQ(0U, queued_event_count()); |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1826 // Ensure that async touch dispatch and touch ack timeout interactions work | 1893 // Ensure that async touch dispatch and touch ack timeout interactions work |
1827 // appropriately. | 1894 // appropriately. |
1828 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { | 1895 TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) { |
1829 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | 1896 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); |
1830 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay()); | 1897 SetUpForTimeoutTesting(DefaultTouchTimeoutDelay()); |
1831 | 1898 |
1832 // The touchstart should start the timeout. | 1899 // The touchstart should start the timeout. |
1833 PressTouchPoint(0, 0); | 1900 PressTouchPoint(0, 0); |
1834 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1901 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1835 EXPECT_TRUE(IsTimeoutRunning()); | 1902 EXPECT_TRUE(IsTimeoutRunning()); |
| 1903 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1904 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 1905 EXPECT_FALSE(IsTimeoutRunning()); |
1836 | 1906 |
1837 // The start of a scroll gesture should trigger async touch event dispatch. | 1907 // The start of a scroll gesture should trigger async touch event dispatch. |
| 1908 MoveTouchPoint(0, 1, 1); |
| 1909 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1910 EXPECT_TRUE(IsTimeoutRunning()); |
1838 WebGestureEvent followup_scroll; | 1911 WebGestureEvent followup_scroll; |
1839 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1912 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
1840 SetFollowupEvent(followup_scroll); | 1913 SetFollowupEvent(followup_scroll); |
1841 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1914 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1842 EXPECT_FALSE(IsTimeoutRunning()); | 1915 EXPECT_FALSE(IsTimeoutRunning()); |
1843 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1916 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1844 | 1917 |
1845 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, | 1918 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, |
1846 INPUT_EVENT_ACK_STATE_CONSUMED); | 1919 INPUT_EVENT_ACK_STATE_CONSUMED); |
1847 | 1920 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1900 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 1973 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1901 } | 1974 } |
1902 | 1975 |
1903 // Ensure that if the touch ack for an async touchmove triggers a follow-up | 1976 // Ensure that if the touch ack for an async touchmove triggers a follow-up |
1904 // touch event, that follow-up touch will be forwarded appropriately. | 1977 // touch event, that follow-up touch will be forwarded appropriately. |
1905 TEST_F(TouchEventQueueTest, AsyncTouchWithTouchCancelAfterAck) { | 1978 TEST_F(TouchEventQueueTest, AsyncTouchWithTouchCancelAfterAck) { |
1906 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); | 1979 SetTouchScrollingMode(TouchEventQueue::TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE); |
1907 | 1980 |
1908 PressTouchPoint(0, 0); | 1981 PressTouchPoint(0, 0); |
1909 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 1982 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 1983 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 1984 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1910 | 1985 |
1911 // The start of a scroll gesture should trigger async touch event dispatch. | 1986 // The start of a scroll gesture should trigger async touch event dispatch. |
| 1987 MoveTouchPoint(0, 1, 1); |
| 1988 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1912 WebGestureEvent followup_scroll; | 1989 WebGestureEvent followup_scroll; |
1913 followup_scroll.type = WebInputEvent::GestureScrollBegin; | 1990 followup_scroll.type = WebInputEvent::GestureScrollBegin; |
1914 SetFollowupEvent(followup_scroll); | 1991 SetFollowupEvent(followup_scroll); |
1915 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 1992 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1916 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 1993 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1917 EXPECT_EQ(0U, queued_event_count()); | 1994 EXPECT_EQ(0U, queued_event_count()); |
1918 | 1995 |
1919 // The async touchmove should be ack'ed immediately, but not forwarded. | 1996 // The async touchmove should be ack'ed immediately, but not forwarded. |
1920 // However, because the ack triggers a touchcancel, both the pending touch and | 1997 // However, because the ack triggers a touchcancel, both the pending touch and |
1921 // the queued touchcancel should be flushed. | 1998 // the queued touchcancel should be flushed. |
(...skipping 21 matching lines...) Expand all Loading... |
1943 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 2020 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
1944 | 2021 |
1945 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2022 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
1946 EXPECT_EQ(0U, queued_event_count()); | 2023 EXPECT_EQ(0U, queued_event_count()); |
1947 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); | 2024 EXPECT_EQ(WebInputEvent::TouchCancel, acked_event().type); |
1948 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 2025 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
1949 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 2026 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
1950 } | 2027 } |
1951 | 2028 |
1952 } // namespace content | 2029 } // namespace content |
OLD | NEW |