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

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

Issue 273933002: Allow exclusive touchmove slop regions in the TouchEventQueue (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/renderer_host/input/touch_event_queue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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" 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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/touch_event_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698