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 ce518c5c09eaba2a0c44bb486406bd40bdfae555..071bdc44cd47006145a8cc085c4329457d0295f7 100644 |
--- a/content/browser/renderer_host/render_widget_host_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "content/browser/renderer_host/backing_store.h" |
#include "content/browser/renderer_host/render_widget_host_delegate.h" |
#include "content/browser/renderer_host/gesture_event_filter.h" |
+#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
|
#include "content/browser/renderer_host/test_render_view_host.h" |
#include "content/browser/renderer_host/touch_event_queue.h" |
#include "content/common/view_messages.h" |
@@ -68,6 +69,14 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl { |
using RenderWidgetHostImpl::gesture_event_filter_; |
using RenderWidgetHostImpl::touch_event_queue_; |
+ enum TapSuppressionState { |
+ TSC_NOTHING = TapSuppressionController::NOTHING, |
+ TSC_GFC_IN_PROGRESS = TapSuppressionController::GFC_IN_PROGRESS, |
+ TSC_MD_STASHED = TapSuppressionController::MD_STASHED, |
+ TSC_LAST_CANCEL_STOPPED_FLING = |
+ TapSuppressionController::LAST_CANCEL_STOPPED_FLING, |
+ }; |
mohsen
2012/11/19 19:30:27
Since TapSuppressionController::State enum was not
rjkroege
2012/11/19 22:18:01
This is fine.
|
+ |
bool unresponsive_timer_fired() const { |
return unresponsive_timer_fired_; |
} |
@@ -100,6 +109,11 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl { |
return gesture_event_filter_->fling_in_progress_; |
} |
+ TapSuppressionState TapSuppressionControllerState() { |
+ return static_cast<TapSuppressionState>( |
+ gesture_event_filter_->tap_suppression_controller_->state_); |
+ } |
+ |
void set_maximum_tap_gap_time_ms(int delay_ms) { |
gesture_event_filter_->maximum_tap_gap_time_ms_ = delay_ms; |
} |
@@ -430,6 +444,12 @@ class RenderWidgetHostTest : public testing::Test { |
host_->ForwardKeyboardEvent(key_event); |
} |
+ void SimulateMouseEvent(WebInputEvent::Type type) { |
+ WebMouseWheelEvent mouse_event; |
+ mouse_event.type = type; |
+ host_->ForwardMouseEvent(mouse_event); |
+ } |
+ |
void SimulateWheelEvent(float dX, float dY, int modifiers) { |
WebMouseWheelEvent wheel_event; |
wheel_event.type = WebInputEvent::MouseWheel; |
@@ -1366,6 +1386,484 @@ TEST_F(RenderWidgetHostTest, DebounceDropsDeferredEvents) { |
} |
} |
+// 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.
|
+// MouseDown and everything happens without any delays |
+TEST_F(RenderWidgetHostTest, GFCAckBeforeMouseFast) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureFlingStartEvent(0, -10); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // 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
|
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should be suppressed |
rjkroege
2012/11/16 16:33:57
there are two cases: mouseup in the time interval
|
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// Test TapSuppressionController - GestureFlingCancel Ack comes before |
+// MouseDown, but there is a small delay between MouseDown and MouseUp |
+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
|
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Delay - Less than allowed delay between MouseDown and MouseUp to be |
+ // considered a tap |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ MessageLoop::QuitClosure(), |
+ TimeDelta::FromMilliseconds(100)); |
+ MessageLoop::current()->Run(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// Test TapSuppressionController - GestureFlingCancel Ack comes before |
+// MouseDown, but there is a long delay between MouseDown and MouseUp |
+TEST_F(RenderWidgetHostTest, GFCAckBeforeMouseSufficientlyLateMouseUp) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should be suppressed for now |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Delay - More than allowed delay between MosueDown and MouseUp to be |
+ // considered a tap. This should release the stashed MouseDown |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ MessageLoop::QuitClosure(), |
+ TimeDelta::FromMilliseconds(300)); |
+ MessageLoop::current()->Run(); |
+ EXPECT_EQ(3U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should not be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(4U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// Test TapSuppressionController - Processed GestureFlingCancel Ack comes |
+// before MouseDown, but there is a long delay between the Ack and MouseDown |
+TEST_F(RenderWidgetHostTest, GFCAckProcessedBeforeMouseLateMouseDown) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Processed GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Delay - More than allowed delay between GestureFlingCancel and MouseDown |
+ // to cosider MouseDown associated with GestureFlingCancel |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ MessageLoop::QuitClosure(), |
+ 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
|
+ MessageLoop::current()->Run(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_LAST_CANCEL_STOPPED_FLING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should not be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(3U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should not be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(4U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// Test TapSuppressionController - Unprocessed GestureFlingCancel Ack comes |
+// after MouseDown and everything happens without any delay |
+TEST_F(RenderWidgetHostTest, GFCAckUnprocessedAfterMouseFast) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Unprocessed GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, false); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(3U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(4U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// 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.
|
+// and everything happens without any delay |
+TEST_F(RenderWidgetHostTest, GFCAckAfterMouseFast) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
+// 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).
|
+// 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.
|
+TEST_F(RenderWidgetHostTest, GFCAckAfterMouseLateMouseUp) { |
+ process_->sink().ClearMessages(); |
+ |
+ // GestureFlingStart |
+ SimulateGestureEvent(WebInputEvent::GestureFlingStart); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingStart Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingStart, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(1U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_TRUE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel |
+ SimulateGestureEvent(WebInputEvent::GestureFlingCancel); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_GFC_IN_PROGRESS, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseDown - Should be suppressed for now |
+ SimulateMouseEvent(WebInputEvent::MouseDown); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel, |
+ host_->GestureEventLastQueueEvent().type); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // GestureFlingCancel Ack |
+ SendInputEventACK(WebInputEvent::GestureFlingCancel, true); |
+ MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_EQ(2U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_MD_STASHED, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // Delay - More than allowed delay between MouseDown and MouseUp to be |
+ // considered as a tap. This should release the stashed MouseDown |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ MessageLoop::QuitClosure(), |
+ TimeDelta::FromMilliseconds(300)); |
+ MessageLoop::current()->Run(); |
+ EXPECT_EQ(3U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+ |
+ // MouseUp - Should not be suppressed |
+ SimulateMouseEvent(WebInputEvent::MouseUp); |
+ EXPECT_EQ(4U, process_->sink().message_count()); |
+ EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); |
+ EXPECT_EQ(MockRenderWidgetHost::TSC_NOTHING, |
+ host_->TapSuppressionControllerState()); |
+ EXPECT_FALSE(host_->FlingInProgress()); |
+} |
+ |
// Tests that touch-events are queued properly. |
TEST_F(RenderWidgetHostTest, TouchEventQueue) { |
process_->sink().ClearMessages(); |