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

Unified Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 10855200: Defer GestureTapDown events briefly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: proof-reading corrections Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_unittest.cc
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 76133f490d5cc26cd62e1f193cb64b74b8fd7e82..f6bb1084ff210c440c59a5a89af27a3a772275c5 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -247,6 +247,10 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl {
return gesture_event_filter_->fling_in_progress_;
}
+ void set_maximum_tap_gap_time_ms(int delay_ms) {
+ gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms;
+ }
+
protected:
virtual void NotifyRendererUnresponsive() OVERRIDE {
unresponsive_timer_fired_ = true;
@@ -809,6 +813,7 @@ TEST_F(RenderWidgetHostTest, CoalescesGesturesEvents) {
// Make sure that the queue contains what we think it should.
WebGestureEvent merged_event = host_->GestureEventLastQueueEvent();
+ EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
EXPECT_EQ(WebInputEvent::GestureScrollUpdate, merged_event.type);
// Coalesced.
@@ -895,7 +900,7 @@ TEST_F(RenderWidgetHostTest, GestureFlingCancelsFiltered) {
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
EXPECT_FALSE(host_->FlingInProgress());
EXPECT_EQ(1U, process_->sink().message_count());
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
+ EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
// Advance state realistically.
SendInputEventACK(WebInputEvent::GestureFlingStart, true);
@@ -908,45 +913,111 @@ TEST_F(RenderWidgetHostTest, GestureFlingCancelsFiltered) {
process_->sink().ClearMessages();
SimulateGestureEvent(8, -7, 0, WebInputEvent::GestureScrollUpdate);
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart);
+ EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
EXPECT_EQ(1U, process_->sink().message_count());
WebGestureEvent merged_event = host_->GestureEventLastQueueEvent();
EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
- EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
+ EXPECT_TRUE(host_->FlingInProgress());
+ EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
// GFS in queue means that a GFC is added to the queue
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
merged_event =host_->GestureEventLastQueueEvent();
EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
-
+ EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize());
// Adding a second GFC is dropped.
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
+ EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize());
// Adding another GFS will add it to the queue.
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingStart);
merged_event = host_->GestureEventLastQueueEvent();
EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
- EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(3U, host_->GestureEventLastQueueEventSize());
+ EXPECT_TRUE(host_->FlingInProgress());
+ EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize());
// GFS in queue means that a GFC is added to the queue
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
merged_event = host_->GestureEventLastQueueEvent();
EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize());
+ EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize());
// Adding another GFC with a GFC already there is dropped.
SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureFlingCancel);
merged_event = host_->GestureEventLastQueueEvent();
EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
EXPECT_FALSE(host_->FlingInProgress());
- EXPECT_EQ(4U, host_->GestureEventLastQueueEventSize());
+ EXPECT_EQ(5U, host_->GestureEventLastQueueEventSize());
+}
+
+// Test that GestureTapDown events are deferred.
+TEST_F(RenderWidgetHostTest, DeferredGestureTapDown) {
+ process_->sink().ClearMessages();
+
+ // Set some sort of short deferral timeout
+ host_->set_maximum_tap_gap_time_ms(5);
+
+ SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
+ EXPECT_EQ(0U, process_->sink().message_count());
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
+
+ // Wait long enough for first timeout and see if it fired.
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
+ MessageLoop::current()->Run();
+
+ EXPECT_EQ(1U, process_->sink().message_count());
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
+}
+
+// Test that GestureTapDown events are sent immediately on GestureTap.
+TEST_F(RenderWidgetHostTest, DeferredGestureTapDownSentOnTap) {
+ process_->sink().ClearMessages();
+
+ // Set some sort of short deferral timeout
+ host_->set_maximum_tap_gap_time_ms(5);
+
+ SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
+ EXPECT_EQ(0U, process_->sink().message_count());
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
+
+ SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTap);
+ EXPECT_EQ(1U, process_->sink().message_count());
+ EXPECT_EQ(2U, host_->GestureEventLastQueueEventSize());
+
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
+ MessageLoop::current()->Run();
+
+ // If the deferral timer incorrectly fired, it sent an extra message.
+ EXPECT_EQ(1U, process_->sink().message_count());
+}
+
+// Test that scroll events during the deferral internal drop the GestureTapDown.
+TEST_F(RenderWidgetHostTest, DeferredGestureTapDownAnulledOnScroll) {
+ process_->sink().ClearMessages();
+
+ // Set some sort of short deferral timeout
+ host_->set_maximum_tap_gap_time_ms(5);
+
+ SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureTapDown);
+ EXPECT_EQ(0U, process_->sink().message_count());
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
+
+ SimulateGestureEvent(0, -10, 0, WebInputEvent::GestureScrollBegin);
+ EXPECT_EQ(1U, process_->sink().message_count());
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
+
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, MessageLoop::QuitClosure(), TimeDelta::FromMilliseconds(10));
+ MessageLoop::current()->Run();
+
+ // If the deferral timer incorrectly fired, it will send an extra message.
+ EXPECT_EQ(1U, process_->sink().message_count());
}
// Test that the hang monitor timer expires properly if a new timer is started
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698