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

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

Issue 172263007: [Android] Ensure slop-exceeding TouchMove's are sent to the renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bug link fix Created 6 years, 10 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 1318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 1329
1330 // A new touch sequence should reset suppression. 1330 // A new touch sequence should reset suppression.
1331 ReleaseTouchPoint(0); 1331 ReleaseTouchPoint(0);
1332 PressTouchPoint(0, 0); 1332 PressTouchPoint(0, 0);
1333 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1333 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1334 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1334 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1335 ASSERT_EQ(2U, GetAndResetSentEventCount()); 1335 ASSERT_EQ(2U, GetAndResetSentEventCount());
1336 ASSERT_EQ(2U, GetAndResetAckedEventCount()); 1336 ASSERT_EQ(2U, GetAndResetAckedEventCount());
1337 ASSERT_EQ(0U, queued_event_count()); 1337 ASSERT_EQ(0U, queued_event_count());
1338 1338
1339 // The slop region is boundary-inclusive. 1339 // The slop region is boundary-exclusive.
1340 MoveTouchPoint(0, kSlopLengthDips, 0); 1340 // TODO(jdduke): Change to inclusive upon resolving crbug.com/336807.
1341 MoveTouchPoint(0, kSlopLengthDips - 1., 0);
1341 EXPECT_EQ(0U, queued_event_count()); 1342 EXPECT_EQ(0U, queued_event_count());
1342 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1343 EXPECT_EQ(0U, GetAndResetSentEventCount());
1343 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1344 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1344 1345
1345 MoveTouchPoint(0, kSlopLengthDips + 1., 0); 1346 MoveTouchPoint(0, kSlopLengthDips, 0);
1346 EXPECT_EQ(1U, queued_event_count()); 1347 EXPECT_EQ(1U, queued_event_count());
1347 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1348 EXPECT_EQ(1U, GetAndResetSentEventCount());
1348 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1349 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1349 } 1350 }
1350 1351
1351 // Tests that TouchMove's are not dropped within the slop suppression region if 1352 // Tests that TouchMove's are not dropped within the slop suppression region if
1352 // the touchstart was consumed. 1353 // the touchstart was consumed.
1353 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) { 1354 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
1354 const double kSlopLengthDips = 10.; 1355 const double kSlopLengthDips = 10.;
1355 const double kHalfSlopLengthDips = kSlopLengthDips / 2; 1356 const double kHalfSlopLengthDips = kSlopLengthDips / 2;
1356 SetUpForTouchMoveSlopTesting(kSlopLengthDips); 1357 SetUpForTouchMoveSlopTesting(kSlopLengthDips);
1357 1358
1358 // Queue a TouchStart. 1359 // Queue a TouchStart.
1359 PressTouchPoint(0, 1); 1360 PressTouchPoint(0, 0);
1360 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); 1361 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
1361 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1362 ASSERT_EQ(1U, GetAndResetSentEventCount());
1362 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1363 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1363 1364
1364 // TouchMove's within the region should not be suppressed, as a touch was 1365 // TouchMove's within the region should not be suppressed, as a touch was
1365 // consumed. 1366 // consumed.
1366 MoveTouchPoint(0, 0, kHalfSlopLengthDips); 1367 MoveTouchPoint(0, 0, kHalfSlopLengthDips);
1367 EXPECT_EQ(1U, queued_event_count()); 1368 EXPECT_EQ(1U, queued_event_count());
1368 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1369 EXPECT_EQ(1U, GetAndResetSentEventCount());
1369 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1370 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1370 } 1371 }
1371 1372
1373 // Tests that TouchMove's are not dropped due to integral truncation of
1374 // WebTouchPoint coordinates after DPI scaling.
1375 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) {
1376 const float kSlopLengthPixels = 7.f;
1377 const float kDPIScale = 3.f;
1378 SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale);
1379
1380 // Queue a TouchStart.
1381 PressTouchPoint(0, 0);
1382 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1383 ASSERT_EQ(1U, GetAndResetSentEventCount());
1384 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1385
1386 // TouchMove's along the slop boundary should not be suppresed.
1387 // TODO(jdduke): These should be suppressed, crbug.com/336807.
1388 MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale);
1389 EXPECT_EQ(1U, queued_event_count());
1390 EXPECT_EQ(1U, GetAndResetSentEventCount());
1391 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1392
1393 // Reset the touch sequence.
1394 ReleaseTouchPoint(0);
1395 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1396 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1397 GetAndResetSentEventCount();
1398 GetAndResetAckedEventCount();
1399
1400 // Queue a TouchStart.
1401 PressTouchPoint(0, 0);
1402 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1403 ASSERT_EQ(1U, GetAndResetSentEventCount());
1404 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1405
1406 // TouchMove's outside the region should not be suppressed.
1407 const float kPixelCoordOutsideSlopRegion = kSlopLengthPixels + 1.f;
1408 MoveTouchPoint(0, 0, kPixelCoordOutsideSlopRegion / kDPIScale);
1409 EXPECT_EQ(1U, queued_event_count());
1410 EXPECT_EQ(1U, GetAndResetSentEventCount());
1411 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1412 }
1413
1414
1372 // Tests that TouchMove's are not dropped if a secondary pointer is present 1415 // Tests that TouchMove's are not dropped if a secondary pointer is present
1373 // during any movement. 1416 // during any movement.
1374 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { 1417 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
1375 const double kSlopLengthDips = 10.; 1418 const double kSlopLengthDips = 10.;
1376 const double kHalfSlopLengthDips = kSlopLengthDips / 2; 1419 const double kHalfSlopLengthDips = kSlopLengthDips / 2;
1377 const double kDoubleSlopLengthDips = 10.; 1420 const double kDoubleSlopLengthDips = 10.;
1378 SetUpForTouchMoveSlopTesting(kSlopLengthDips); 1421 SetUpForTouchMoveSlopTesting(kSlopLengthDips);
1379 1422
1380 // Queue a TouchStart. 1423 // Queue a TouchStart.
1381 PressTouchPoint(0, 1); 1424 PressTouchPoint(0, 0);
1382 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1425 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1383 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1426 ASSERT_EQ(1U, GetAndResetSentEventCount());
1384 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1427 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1385 1428
1386 // TouchMove's within the region should be suppressed. 1429 // TouchMove's within the region should be suppressed.
1387 MoveTouchPoint(0, 0, kHalfSlopLengthDips); 1430 MoveTouchPoint(0, 0, kHalfSlopLengthDips);
1388 EXPECT_EQ(0U, queued_event_count()); 1431 EXPECT_EQ(0U, queued_event_count());
1389 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1432 EXPECT_EQ(0U, GetAndResetSentEventCount());
1390 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1433 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1391 1434
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 SendGestureEventAck(WebInputEvent::GestureScrollUpdate, 1504 SendGestureEventAck(WebInputEvent::GestureScrollUpdate,
1462 INPUT_EVENT_ACK_STATE_CONSUMED); 1505 INPUT_EVENT_ACK_STATE_CONSUMED);
1463 MoveTouchPoint(0, 20, 5); 1506 MoveTouchPoint(0, 20, 5);
1464 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1507 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1465 EXPECT_EQ(0U, queued_event_count()); 1508 EXPECT_EQ(0U, queued_event_count());
1466 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1509 EXPECT_EQ(0U, GetAndResetSentEventCount());
1467 } 1510 }
1468 } 1511 }
1469 1512
1470 } // namespace content 1513 } // 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