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

Side by Side Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 11361150: Suppress sending mousedown / mouseup when in fling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added unit tests Created 8 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/shared_memory.h" 7 #include "base/shared_memory.h"
8 #include "base/timer.h" 8 #include "base/timer.h"
9 #include "content/browser/browser_thread_impl.h" 9 #include "content/browser/browser_thread_impl.h"
10 #include "content/browser/renderer_host/backing_store.h" 10 #include "content/browser/renderer_host/backing_store.h"
11 #include "content/browser/renderer_host/render_widget_host_delegate.h" 11 #include "content/browser/renderer_host/render_widget_host_delegate.h"
12 #include "content/browser/renderer_host/gesture_event_filter.h" 12 #include "content/browser/renderer_host/gesture_event_filter.h"
13 #include "content/browser/renderer_host/tap_suppression_controller.h"
rjkroege 2012/11/16 16:33:57 these need to be in alphabetical order.
mohsen 2012/11/19 19:30:27 I have put the header I included in the right plac
13 #include "content/browser/renderer_host/test_render_view_host.h" 14 #include "content/browser/renderer_host/test_render_view_host.h"
14 #include "content/browser/renderer_host/touch_event_queue.h" 15 #include "content/browser/renderer_host/touch_event_queue.h"
15 #include "content/common/view_messages.h" 16 #include "content/common/view_messages.h"
16 #include "content/port/browser/render_widget_host_view_port.h" 17 #include "content/port/browser/render_widget_host_view_port.h"
17 #include "content/public/browser/notification_details.h" 18 #include "content/public/browser/notification_details.h"
18 #include "content/public/browser/notification_observer.h" 19 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h" 20 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
21 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
22 #include "content/public/test/mock_render_process_host.h" 23 #include "content/public/test/mock_render_process_host.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 // Allow poking at a few private members. 62 // Allow poking at a few private members.
62 using RenderWidgetHostImpl::OnMsgPaintAtSizeAck; 63 using RenderWidgetHostImpl::OnMsgPaintAtSizeAck;
63 using RenderWidgetHostImpl::OnMsgUpdateRect; 64 using RenderWidgetHostImpl::OnMsgUpdateRect;
64 using RenderWidgetHostImpl::RendererExited; 65 using RenderWidgetHostImpl::RendererExited;
65 using RenderWidgetHostImpl::in_flight_size_; 66 using RenderWidgetHostImpl::in_flight_size_;
66 using RenderWidgetHostImpl::is_hidden_; 67 using RenderWidgetHostImpl::is_hidden_;
67 using RenderWidgetHostImpl::resize_ack_pending_; 68 using RenderWidgetHostImpl::resize_ack_pending_;
68 using RenderWidgetHostImpl::gesture_event_filter_; 69 using RenderWidgetHostImpl::gesture_event_filter_;
69 using RenderWidgetHostImpl::touch_event_queue_; 70 using RenderWidgetHostImpl::touch_event_queue_;
70 71
72 enum TapSuppressionState {
73 TSC_NOTHING = TapSuppressionController::NOTHING,
74 TSC_GFC_IN_PROGRESS = TapSuppressionController::GFC_IN_PROGRESS,
75 TSC_MD_STASHED = TapSuppressionController::MD_STASHED,
76 TSC_LAST_CANCEL_STOPPED_FLING =
77 TapSuppressionController::LAST_CANCEL_STOPPED_FLING,
78 };
mohsen 2012/11/19 19:30:27 Since TapSuppressionController::State enum was not
rjkroege 2012/11/19 22:18:01 This is fine.
79
71 bool unresponsive_timer_fired() const { 80 bool unresponsive_timer_fired() const {
72 return unresponsive_timer_fired_; 81 return unresponsive_timer_fired_;
73 } 82 }
74 83
75 void set_hung_renderer_delay_ms(int delay_ms) { 84 void set_hung_renderer_delay_ms(int delay_ms) {
76 hung_renderer_delay_ms_ = delay_ms; 85 hung_renderer_delay_ms_ = delay_ms;
77 } 86 }
78 87
79 WebGestureEvent GestureEventLastQueueEvent() { 88 WebGestureEvent GestureEventLastQueueEvent() {
80 return gesture_event_filter_->coalesced_gesture_events_.back(); 89 return gesture_event_filter_->coalesced_gesture_events_.back();
(...skipping 12 matching lines...) Expand all
93 } 102 }
94 103
95 bool ScrollingInProgress() { 104 bool ScrollingInProgress() {
96 return gesture_event_filter_->scrolling_in_progress_; 105 return gesture_event_filter_->scrolling_in_progress_;
97 } 106 }
98 107
99 bool FlingInProgress() { 108 bool FlingInProgress() {
100 return gesture_event_filter_->fling_in_progress_; 109 return gesture_event_filter_->fling_in_progress_;
101 } 110 }
102 111
112 TapSuppressionState TapSuppressionControllerState() {
113 return static_cast<TapSuppressionState>(
114 gesture_event_filter_->tap_suppression_controller_->state_);
115 }
116
103 void set_maximum_tap_gap_time_ms(int delay_ms) { 117 void set_maximum_tap_gap_time_ms(int delay_ms) {
104 gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms; 118 gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms;
105 } 119 }
106 120
107 void set_debounce_interval_time_ms(int delay_ms) { 121 void set_debounce_interval_time_ms(int delay_ms) {
108 gesture_event_filter_->debounce_interval_time_ms_ = delay_ms; 122 gesture_event_filter_->debounce_interval_time_ms_ = delay_ms;
109 } 123 }
110 124
111 size_t TouchEventQueueSize() { 125 size_t TouchEventQueueSize() {
112 return touch_event_queue_->GetQueueSize(); 126 return touch_event_queue_->GetQueueSize();
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 host_->OnMessageReceived(*response); 437 host_->OnMessageReceived(*response);
424 } 438 }
425 439
426 void SimulateKeyboardEvent(WebInputEvent::Type type) { 440 void SimulateKeyboardEvent(WebInputEvent::Type type) {
427 NativeWebKeyboardEvent key_event; 441 NativeWebKeyboardEvent key_event;
428 key_event.type = type; 442 key_event.type = type;
429 key_event.windowsKeyCode = ui::VKEY_L; // non-null made up value. 443 key_event.windowsKeyCode = ui::VKEY_L; // non-null made up value.
430 host_->ForwardKeyboardEvent(key_event); 444 host_->ForwardKeyboardEvent(key_event);
431 } 445 }
432 446
447 void SimulateMouseEvent(WebInputEvent::Type type) {
448 WebMouseWheelEvent mouse_event;
449 mouse_event.type = type;
450 host_->ForwardMouseEvent(mouse_event);
451 }
452
433 void SimulateWheelEvent(float dX, float dY, int modifiers) { 453 void SimulateWheelEvent(float dX, float dY, int modifiers) {
434 WebMouseWheelEvent wheel_event; 454 WebMouseWheelEvent wheel_event;
435 wheel_event.type = WebInputEvent::MouseWheel; 455 wheel_event.type = WebInputEvent::MouseWheel;
436 wheel_event.deltaX = dX; 456 wheel_event.deltaX = dX;
437 wheel_event.deltaY = dY; 457 wheel_event.deltaY = dY;
438 wheel_event.modifiers = modifiers; 458 wheel_event.modifiers = modifiers;
439 host_->ForwardWheelEvent(wheel_event); 459 host_->ForwardWheelEvent(wheel_event);
440 } 460 }
441 461
442 // Inject simple synthetic WebGestureEvent instances. 462 // Inject simple synthetic WebGestureEvent instances.
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 WebInputEvent::GestureScrollUpdate, 1379 WebInputEvent::GestureScrollUpdate,
1360 WebInputEvent::GestureScrollUpdate}; 1380 WebInputEvent::GestureScrollUpdate};
1361 1381
1362 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type); 1382 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type);
1363 i++) { 1383 i++) {
1364 WebGestureEvent merged_event = host_->GestureEventQueueEventAt(i); 1384 WebGestureEvent merged_event = host_->GestureEventQueueEventAt(i);
1365 EXPECT_EQ(expected[i], merged_event.type); 1385 EXPECT_EQ(expected[i], merged_event.type);
1366 } 1386 }
1367 } 1387 }
1368 1388
1389 // Test TapSuppressionController - GestureFlingCancel Ack comes before
rjkroege 2012/11/16 16:33:57 comments need to be complete sentences. with perio
mohsen 2012/11/19 19:30:27 Done.
1390 // MouseDown and everything happens without any delays
1391 TEST_F(RenderWidgetHostTest, GFCAckBeforeMouseFast) {
1392 process_->sink().ClearMessages();
1393
1394 // GestureFlingStart
1395 SimulateGestureFlingStartEvent(0, -10);
1396 EXPECT_EQ(1U, process_->sink().message_count());
1397 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1398 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1399 host_->GestureEventLastQueueEvent().type);
1400 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1401 host_->TapSuppressionControllerState());
1402 EXPECT_TRUE(host_->FlingInProgress());
1403
1404 // GestureFlingStart Ack
1405 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1406 MessageLoop::current()->RunUntilIdle();
1407 EXPECT_EQ(1U, process_->sink().message_count());
1408 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1409 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1410 host_->TapSuppressionControllerState());
1411 EXPECT_TRUE(host_->FlingInProgress());
1412
1413 // GestureFlingCancel
1414 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1415 EXPECT_EQ(2U, process_->sink().message_count());
1416 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1417 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1418 host_->GestureEventLastQueueEvent().type);
1419 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1420 host_->TapSuppressionControllerState());
1421 EXPECT_FALSE(host_->FlingInProgress());
1422
1423 // GestureFlingCancel Ack
1424 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1425 MessageLoop::current()->RunUntilIdle();
1426 EXPECT_EQ(2U, process_->sink().message_count());
1427 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1428 EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING,
1429 host_->TapSuppressionControllerState());
1430 EXPECT_FALSE(host_->FlingInProgress());
1431
1432 // MouseDown - Should be suppressed
rjkroege 2012/11/16 16:33:57 please check if the test sets the tap cancel windo
mohsen 2012/11/19 19:30:27 I don't get this part. Could you please explain mo
rjkroege 2012/11/19 22:18:01 someday, tsc times (kMaxiumTapGapTimeMs, kMaxiumCa
mohsen 2012/11/19 22:51:12 So, this is the same point you mentioned under lin
1433 SimulateMouseEvent(WebInputEvent::MouseDown);
1434 EXPECT_EQ(2U, process_->sink().message_count());
1435 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1436 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1437 host_->GestureEventLastQueueEvent().type);
1438 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1439 host_->TapSuppressionControllerState());
1440 EXPECT_FALSE(host_->FlingInProgress());
1441
1442 // MouseUp - Should be suppressed
rjkroege 2012/11/16 16:33:57 there are two cases: mouseup in the time interval
1443 SimulateMouseEvent(WebInputEvent::MouseUp);
1444 EXPECT_EQ(2U, process_->sink().message_count());
1445 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1446 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1447 host_->GestureEventLastQueueEvent().type);
1448 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1449 host_->TapSuppressionControllerState());
1450 EXPECT_FALSE(host_->FlingInProgress());
1451 }
1452
1453 // Test TapSuppressionController - GestureFlingCancel Ack comes before
1454 // MouseDown, but there is a small delay between MouseDown and MouseUp
1455 TEST_F(RenderWidgetHostTest, GFCAckBeforeMouseInsufficientlyLateMouseUp) {
mohsen 2012/11/19 19:30:27 Having a delay between MouseDown and MouseUp has a
rjkroege 2012/11/19 22:18:01 you need this test (but adjusted) for configurable
mohsen 2012/11/19 22:51:12 So, I need to add similar tests in other places we
1456 process_->sink().ClearMessages();
1457
1458 // GestureFlingStart
1459 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1460 EXPECT_EQ(1U, process_->sink().message_count());
1461 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1462 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1463 host_->GestureEventLastQueueEvent().type);
1464 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1465 host_->TapSuppressionControllerState());
1466 EXPECT_TRUE(host_->FlingInProgress());
1467
1468 // GestureFlingStart Ack
1469 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1470 MessageLoop::current()->RunUntilIdle();
1471 EXPECT_EQ(1U, process_->sink().message_count());
1472 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1473 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1474 host_->TapSuppressionControllerState());
1475 EXPECT_TRUE(host_->FlingInProgress());
1476
1477 // GestureFlingCancel
1478 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1479 EXPECT_EQ(2U, process_->sink().message_count());
1480 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1481 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1482 host_->GestureEventLastQueueEvent().type);
1483 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1484 host_->TapSuppressionControllerState());
1485 EXPECT_FALSE(host_->FlingInProgress());
1486
1487 // GestureFlingCancel Ack
1488 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1489 MessageLoop::current()->RunUntilIdle();
1490 EXPECT_EQ(2U, process_->sink().message_count());
1491 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1492 EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING,
1493 host_->TapSuppressionControllerState());
1494 EXPECT_FALSE(host_->FlingInProgress());
1495
1496 // MouseDown - Should be suppressed
1497 SimulateMouseEvent(WebInputEvent::MouseDown);
1498 EXPECT_EQ(2U, process_->sink().message_count());
1499 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1500 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1501 host_->TapSuppressionControllerState());
1502 EXPECT_FALSE(host_->FlingInProgress());
1503
1504 // Delay - Less than allowed delay between MouseDown and MouseUp to be
1505 // considered a tap
1506 MessageLoop::current()->PostDelayedTask(FROM_HERE,
1507 MessageLoop::QuitClosure(),
1508 TimeDelta::FromMilliseconds(100));
1509 MessageLoop::current()->Run();
1510 EXPECT_EQ(2U, process_->sink().message_count());
1511 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1512 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1513 host_->TapSuppressionControllerState());
1514 EXPECT_FALSE(host_->FlingInProgress());
1515
1516 // MouseUp - Should be suppressed
1517 SimulateMouseEvent(WebInputEvent::MouseUp);
1518 EXPECT_EQ(2U, process_->sink().message_count());
1519 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1520 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1521 host_->TapSuppressionControllerState());
1522 EXPECT_FALSE(host_->FlingInProgress());
1523 }
1524
1525 // Test TapSuppressionController - GestureFlingCancel Ack comes before
1526 // MouseDown, but there is a long delay between MouseDown and MouseUp
1527 TEST_F(RenderWidgetHostTest, GFCAckBeforeMouseSufficientlyLateMouseUp) {
1528 process_->sink().ClearMessages();
1529
1530 // GestureFlingStart
1531 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1532 EXPECT_EQ(1U, process_->sink().message_count());
1533 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1534 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1535 host_->GestureEventLastQueueEvent().type);
1536 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1537 host_->TapSuppressionControllerState());
1538 EXPECT_TRUE(host_->FlingInProgress());
1539
1540 // GestureFlingStart Ack
1541 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1542 MessageLoop::current()->RunUntilIdle();
1543 EXPECT_EQ(1U, process_->sink().message_count());
1544 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1545 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1546 host_->TapSuppressionControllerState());
1547 EXPECT_TRUE(host_->FlingInProgress());
1548
1549 // GestureFlingCancel
1550 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1551 EXPECT_EQ(2U, process_->sink().message_count());
1552 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1553 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1554 host_->GestureEventLastQueueEvent().type);
1555 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1556 host_->TapSuppressionControllerState());
1557 EXPECT_FALSE(host_->FlingInProgress());
1558
1559 // GestureFlingCancel Ack
1560 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1561 MessageLoop::current()->RunUntilIdle();
1562 EXPECT_EQ(2U, process_->sink().message_count());
1563 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1564 EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING,
1565 host_->TapSuppressionControllerState());
1566 EXPECT_FALSE(host_->FlingInProgress());
1567
1568 // MouseDown - Should be suppressed for now
1569 SimulateMouseEvent(WebInputEvent::MouseDown);
1570 EXPECT_EQ(2U, process_->sink().message_count());
1571 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1572 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1573 host_->TapSuppressionControllerState());
1574 EXPECT_FALSE(host_->FlingInProgress());
1575
1576 // Delay - More than allowed delay between MosueDown and MouseUp to be
1577 // considered a tap. This should release the stashed MouseDown
1578 MessageLoop::current()->PostDelayedTask(FROM_HERE,
1579 MessageLoop::QuitClosure(),
1580 TimeDelta::FromMilliseconds(300));
1581 MessageLoop::current()->Run();
1582 EXPECT_EQ(3U, process_->sink().message_count());
1583 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1584 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1585 host_->TapSuppressionControllerState());
1586 EXPECT_FALSE(host_->FlingInProgress());
1587
1588 // MouseUp - Should not be suppressed
1589 SimulateMouseEvent(WebInputEvent::MouseUp);
1590 EXPECT_EQ(4U, process_->sink().message_count());
1591 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1592 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1593 host_->TapSuppressionControllerState());
1594 EXPECT_FALSE(host_->FlingInProgress());
1595 }
1596
1597 // Test TapSuppressionController - Processed GestureFlingCancel Ack comes
1598 // before MouseDown, but there is a long delay between the Ack and MouseDown
1599 TEST_F(RenderWidgetHostTest, GFCAckProcessedBeforeMouseLateMouseDown) {
1600 process_->sink().ClearMessages();
1601
1602 // GestureFlingStart
1603 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1604 EXPECT_EQ(1U, process_->sink().message_count());
1605 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1606 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1607 host_->GestureEventLastQueueEvent().type);
1608 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1609 host_->TapSuppressionControllerState());
1610 EXPECT_TRUE(host_->FlingInProgress());
1611
1612 // GestureFlingStart Ack
1613 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1614 MessageLoop::current()->RunUntilIdle();
1615 EXPECT_EQ(1U, process_->sink().message_count());
1616 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1617 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1618 host_->TapSuppressionControllerState());
1619 EXPECT_TRUE(host_->FlingInProgress());
1620
1621 // GestureFlingCancel
1622 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1623 EXPECT_EQ(2U, process_->sink().message_count());
1624 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1625 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1626 host_->GestureEventLastQueueEvent().type);
1627 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1628 host_->TapSuppressionControllerState());
1629 EXPECT_FALSE(host_->FlingInProgress());
1630
1631 // Processed GestureFlingCancel Ack
1632 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1633 MessageLoop::current()->RunUntilIdle();
1634 EXPECT_EQ(2U, process_->sink().message_count());
1635 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1636 EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING,
1637 host_->TapSuppressionControllerState());
1638 EXPECT_FALSE(host_->FlingInProgress());
1639
1640 // Delay - More than allowed delay between GestureFlingCancel and MouseDown
1641 // to cosider MouseDown associated with GestureFlingCancel
1642 MessageLoop::current()->PostDelayedTask(FROM_HERE,
1643 MessageLoop::QuitClosure(),
1644 TimeDelta::FromMilliseconds(500));
rjkroege 2012/11/16 16:33:57 you need to set time window parameters and adjust
mohsen 2012/11/19 19:30:27 These parameters are not configurable by now. For
1645 MessageLoop::current()->Run();
1646 EXPECT_EQ(2U, process_->sink().message_count());
1647 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1648 EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING,
1649 host_->TapSuppressionControllerState());
1650 EXPECT_FALSE(host_->FlingInProgress());
1651
1652 // MouseDown - Should not be suppressed
1653 SimulateMouseEvent(WebInputEvent::MouseDown);
1654 EXPECT_EQ(3U, process_->sink().message_count());
1655 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1656 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1657 host_->TapSuppressionControllerState());
1658 EXPECT_FALSE(host_->FlingInProgress());
1659
1660 // MouseUp - Should not be suppressed
1661 SimulateMouseEvent(WebInputEvent::MouseUp);
1662 EXPECT_EQ(4U, process_->sink().message_count());
1663 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1664 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1665 host_->TapSuppressionControllerState());
1666 EXPECT_FALSE(host_->FlingInProgress());
1667 }
1668
1669 // Test TapSuppressionController - Unprocessed GestureFlingCancel Ack comes
1670 // after MouseDown and everything happens without any delay
1671 TEST_F(RenderWidgetHostTest, GFCAckUnprocessedAfterMouseFast) {
1672 process_->sink().ClearMessages();
1673
1674 // GestureFlingStart
1675 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1676 EXPECT_EQ(1U, process_->sink().message_count());
1677 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1678 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1679 host_->GestureEventLastQueueEvent().type);
1680 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1681 host_->TapSuppressionControllerState());
1682 EXPECT_TRUE(host_->FlingInProgress());
1683
1684 // GestureFlingStart Ack
1685 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1686 MessageLoop::current()->RunUntilIdle();
1687 EXPECT_EQ(1U, process_->sink().message_count());
1688 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1689 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1690 host_->TapSuppressionControllerState());
1691 EXPECT_TRUE(host_->FlingInProgress());
1692
1693 // GestureFlingCancel
1694 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1695 EXPECT_EQ(2U, process_->sink().message_count());
1696 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1697 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1698 host_->GestureEventLastQueueEvent().type);
1699 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1700 host_->TapSuppressionControllerState());
1701 EXPECT_FALSE(host_->FlingInProgress());
1702
1703 // MouseDown - Should be suppressed
1704 SimulateMouseEvent(WebInputEvent::MouseDown);
1705 EXPECT_EQ(2U, process_->sink().message_count());
1706 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1707 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1708 host_->GestureEventLastQueueEvent().type);
1709 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1710 host_->TapSuppressionControllerState());
1711 EXPECT_FALSE(host_->FlingInProgress());
1712
1713 // Unprocessed GestureFlingCancel Ack
1714 SendInputEventACK(WebInputEvent::GestureFlingCancel, false);
1715 MessageLoop::current()->RunUntilIdle();
1716 EXPECT_EQ(3U, process_->sink().message_count());
1717 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1718 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1719 host_->TapSuppressionControllerState());
1720 EXPECT_FALSE(host_->FlingInProgress());
1721
1722 // MouseUp - Should be suppressed
1723 SimulateMouseEvent(WebInputEvent::MouseUp);
1724 EXPECT_EQ(4U, process_->sink().message_count());
1725 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1726 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1727 host_->TapSuppressionControllerState());
1728 EXPECT_FALSE(host_->FlingInProgress());
1729 }
1730
1731 // Test TapSuppressionController - GestureFlingCancel Ack comes after MouseDown
rjkroege 2012/11/16 16:33:57 this comment is the same as the above. but the tes
mohsen 2012/11/19 19:30:27 Something was messed up in comments. Corrected.
1732 // and everything happens without any delay
1733 TEST_F(RenderWidgetHostTest, GFCAckAfterMouseFast) {
1734 process_->sink().ClearMessages();
1735
1736 // GestureFlingStart
1737 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1738 EXPECT_EQ(1U, process_->sink().message_count());
1739 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1740 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1741 host_->GestureEventLastQueueEvent().type);
1742 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1743 host_->TapSuppressionControllerState());
1744 EXPECT_TRUE(host_->FlingInProgress());
1745
1746 // GestureFlingStart Ack
1747 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1748 MessageLoop::current()->RunUntilIdle();
1749 EXPECT_EQ(1U, process_->sink().message_count());
1750 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1751 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1752 host_->TapSuppressionControllerState());
1753 EXPECT_TRUE(host_->FlingInProgress());
1754
1755 // GestureFlingCancel
1756 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1757 EXPECT_EQ(2U, process_->sink().message_count());
1758 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1759 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1760 host_->GestureEventLastQueueEvent().type);
1761 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1762 host_->TapSuppressionControllerState());
1763 EXPECT_FALSE(host_->FlingInProgress());
1764
1765 // MouseDown - Should be suppressed
1766 SimulateMouseEvent(WebInputEvent::MouseDown);
1767 EXPECT_EQ(2U, process_->sink().message_count());
1768 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1769 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1770 host_->GestureEventLastQueueEvent().type);
1771 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1772 host_->TapSuppressionControllerState());
1773 EXPECT_FALSE(host_->FlingInProgress());
1774
1775 // GestureFlingCancel Ack
1776 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1777 MessageLoop::current()->RunUntilIdle();
1778 EXPECT_EQ(2U, process_->sink().message_count());
1779 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1780 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1781 host_->TapSuppressionControllerState());
1782 EXPECT_FALSE(host_->FlingInProgress());
1783
1784 // MouseUp - Should be suppressed
1785 SimulateMouseEvent(WebInputEvent::MouseUp);
1786 EXPECT_EQ(2U, process_->sink().message_count());
1787 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1788 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1789 host_->TapSuppressionControllerState());
1790 EXPECT_FALSE(host_->FlingInProgress());
1791 }
1792
1793 // Test TapSuppressionController - GestureFlingCancel Ack comes after MouseDonw
rjkroege 2012/11/19 22:18:01 MouseDone
mohsen 2012/11/19 22:51:12 Corrected (MouseDown, in fact).
1794 // and there is a long delay between the Ack and MouseUp
rjkroege 2012/11/19 22:18:01 period at the end.
mohsen 2012/11/19 22:51:12 All comments rewritten in full sentence form.
1795 TEST_F(RenderWidgetHostTest, GFCAckAfterMouseLateMouseUp) {
1796 process_->sink().ClearMessages();
1797
1798 // GestureFlingStart
1799 SimulateGestureEvent(WebInputEvent::GestureFlingStart);
1800 EXPECT_EQ(1U, process_->sink().message_count());
1801 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1802 EXPECT_EQ(WebInputEvent::GestureFlingStart,
1803 host_->GestureEventLastQueueEvent().type);
1804 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1805 host_->TapSuppressionControllerState());
1806 EXPECT_TRUE(host_->FlingInProgress());
1807
1808 // GestureFlingStart Ack
1809 SendInputEventACK(WebInputEvent::GestureFlingStart, true);
1810 MessageLoop::current()->RunUntilIdle();
1811 EXPECT_EQ(1U, process_->sink().message_count());
1812 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1813 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1814 host_->TapSuppressionControllerState());
1815 EXPECT_TRUE(host_->FlingInProgress());
1816
1817 // GestureFlingCancel
1818 SimulateGestureEvent(WebInputEvent::GestureFlingCancel);
1819 EXPECT_EQ(2U, process_->sink().message_count());
1820 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1821 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1822 host_->GestureEventLastQueueEvent().type);
1823 EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS,
1824 host_->TapSuppressionControllerState());
1825 EXPECT_FALSE(host_->FlingInProgress());
1826
1827 // MouseDown - Should be suppressed for now
1828 SimulateMouseEvent(WebInputEvent::MouseDown);
1829 EXPECT_EQ(2U, process_->sink().message_count());
1830 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1831 EXPECT_EQ(WebInputEvent::GestureFlingCancel,
1832 host_->GestureEventLastQueueEvent().type);
1833 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1834 host_->TapSuppressionControllerState());
1835 EXPECT_FALSE(host_->FlingInProgress());
1836
1837 // GestureFlingCancel Ack
1838 SendInputEventACK(WebInputEvent::GestureFlingCancel, true);
1839 MessageLoop::current()->RunUntilIdle();
1840 EXPECT_EQ(2U, process_->sink().message_count());
1841 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1842 EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED,
1843 host_->TapSuppressionControllerState());
1844 EXPECT_FALSE(host_->FlingInProgress());
1845
1846 // Delay - More than allowed delay between MouseDown and MouseUp to be
1847 // considered as a tap. This should release the stashed MouseDown
1848 MessageLoop::current()->PostDelayedTask(FROM_HERE,
1849 MessageLoop::QuitClosure(),
1850 TimeDelta::FromMilliseconds(300));
1851 MessageLoop::current()->Run();
1852 EXPECT_EQ(3U, process_->sink().message_count());
1853 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1854 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1855 host_->TapSuppressionControllerState());
1856 EXPECT_FALSE(host_->FlingInProgress());
1857
1858 // MouseUp - Should not be suppressed
1859 SimulateMouseEvent(WebInputEvent::MouseUp);
1860 EXPECT_EQ(4U, process_->sink().message_count());
1861 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1862 EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING,
1863 host_->TapSuppressionControllerState());
1864 EXPECT_FALSE(host_->FlingInProgress());
1865 }
1866
1369 // Tests that touch-events are queued properly. 1867 // Tests that touch-events are queued properly.
1370 TEST_F(RenderWidgetHostTest, TouchEventQueue) { 1868 TEST_F(RenderWidgetHostTest, TouchEventQueue) {
1371 process_->sink().ClearMessages(); 1869 process_->sink().ClearMessages();
1372 1870
1373 PressTouchPoint(1, 1); 1871 PressTouchPoint(1, 1);
1374 SendTouchEvent(); 1872 SendTouchEvent();
1375 EXPECT_EQ(1U, process_->sink().message_count()); 1873 EXPECT_EQ(1U, process_->sink().message_count());
1376 process_->sink().ClearMessages(); 1874 process_->sink().ClearMessages();
1377 1875
1378 // The second touch should not be sent since one is already in queue. 1876 // The second touch should not be sent since one is already in queue.
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1793 process_->InitUpdateRectParams(&params); 2291 process_->InitUpdateRectParams(&params);
1794 params.scale_factor = params.scale_factor * 2; 2292 params.scale_factor = params.scale_factor * 2;
1795 2293
1796 EXPECT_EQ(0, process_->bad_msg_count()); 2294 EXPECT_EQ(0, process_->bad_msg_count());
1797 host_->OnMsgUpdateRect(params); 2295 host_->OnMsgUpdateRect(params);
1798 EXPECT_EQ(1, process_->bad_msg_count()); 2296 EXPECT_EQ(1, process_->bad_msg_count());
1799 } 2297 }
1800 #endif 2298 #endif
1801 2299
1802 } // namespace content 2300 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/gesture_event_filter.cc ('k') | content/browser/renderer_host/tap_suppression_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698