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

Unified Diff: content/browser/renderer_host/input/touch_action_filter_unittest.cc

Issue 170603002: Make touch-action apply to double-tap zoom (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Convert filtered double tap gesture into tap cancel. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/input/touch_action_filter.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/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
« no previous file with comments | « content/browser/renderer_host/input/touch_action_filter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698