Index: content/browser/renderer_host/input/touch_action_filter_unittest.cc |
diff --git a/content/browser/renderer_host/input/touch_action_filter_unittest.cc b/content/browser/renderer_host/input/touch_action_filter_unittest.cc |
index f6863f6477538122f3537d991007c5c96c58b596..ac415619f82c16a9039d80f6d3a0e1303841feea 100644 |
--- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc |
+++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc |
@@ -434,4 +434,99 @@ TEST(TouchActionFilterTest, Pinch) { |
EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
} |
+TEST(TouchActionFilterTest, DoubleTapWithTouchActionAuto) { |
+ TouchActionFilter filter; |
+ |
+ WebGestureEvent tap_down = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapDown, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent tap_cancel = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapCancel, WebGestureEvent::Touchscreen); |
+ WebGestureEvent double_tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureDoubleTap, WebGestureEvent::Touchscreen); |
+ |
+ // Double tap is allowed with touch action auto. |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap)); |
+ EXPECT_EQ(unconfirmed_tap.type, WebInputEvent::GestureTapUnconfirmed); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_cancel)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&double_tap)); |
+} |
+ |
+TEST(TouchActionFilterTest, DoubleTap) { |
+ TouchActionFilter filter; |
+ |
+ WebGestureEvent tap_down = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapDown, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent tap_cancel = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapCancel, WebGestureEvent::Touchscreen); |
+ WebGestureEvent double_tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureDoubleTap, WebGestureEvent::Touchscreen); |
+ |
+ // Double tap is disabled with any touch action other than auto. |
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap)); |
+ EXPECT_EQ(unconfirmed_tap.type, WebInputEvent::GestureTap); |
+ EXPECT_TRUE(filter.FilterGestureEvent(&tap_cancel)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&double_tap)); |
+ EXPECT_EQ(double_tap.type, WebInputEvent::GestureTapCancel); |
+} |
+ |
+TEST(TouchActionFilterTest, SingleTapWithTouchActionAuto) { |
+ TouchActionFilter filter; |
+ |
+ WebGestureEvent tap_down = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapDown, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap1 = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap2 = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); |
+ |
+ // Single tap is allowed with touch action auto. |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap1)); |
+ EXPECT_EQ(unconfirmed_tap1.type, WebInputEvent::GestureTapUnconfirmed); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap)); |
+ |
+ // Repeat to ensure no state is accidentally preserved. |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap2)); |
+ EXPECT_EQ(unconfirmed_tap2.type, WebInputEvent::GestureTapUnconfirmed); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap)); |
+} |
+ |
+TEST(TouchActionFilterTest, SingleTap) { |
+ TouchActionFilter filter; |
+ |
+ WebGestureEvent tap_down = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapDown, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap1 = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent unconfirmed_tap2 = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTapUnconfirmed, WebGestureEvent::Touchscreen); |
+ WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build( |
+ WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); |
+ |
+ // With touch action other than auto, tap unconfirmed is turned into tap. |
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap1)); |
+ EXPECT_EQ(unconfirmed_tap1.type, WebInputEvent::GestureTap); |
+ EXPECT_TRUE(filter.FilterGestureEvent(&tap)); |
+ |
+ // Repeat to ensure no state is accidentally preserved. |
+ EXPECT_FALSE(filter.FilterGestureEvent(&tap_down)); |
+ EXPECT_FALSE(filter.FilterGestureEvent(&unconfirmed_tap2)); |
+ EXPECT_EQ(unconfirmed_tap2.type, WebInputEvent::GestureTap); |
+ EXPECT_TRUE(filter.FilterGestureEvent(&tap)); |
+} |
+ |
} // namespace content |