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

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

Issue 1131093002: Implement direction-specific touch-action values (chromium side). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clarify the axis clearing code Created 5 years, 7 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') | content/common/input/touch_action.h » ('j') | 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 524a09d3db845acaf86bf3124659f211a6bd19ab..c435d1e67e81fdbbd23ecdb97aea833b2e2d43ff 100644
--- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc
+++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
@@ -20,6 +20,93 @@ const blink::WebGestureDevice kSourceDevice =
} // namespace
+static void PanTest(TouchAction action,
+ float scroll_x,
+ float scroll_y,
+ float dx,
+ float dy,
+ float fling_x,
+ float fling_y,
+ float expected_dx,
+ float expected_dy,
+ float expected_fling_x,
+ float expected_fling_y) {
+ TouchActionFilter filter;
+ WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollEnd, kSourceDevice);
+
+ {
+ // Scrolls with no direction hint are permitted in the |action| direction.
+ filter.ResetTouchAction();
+ filter.OnSetTouchAction(action);
+
+ WebGestureEvent scroll_begin =
+ SyntheticWebGestureEventBuilder::BuildScrollBegin(0, 0);
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
+
+ WebGestureEvent scroll_update =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(dx, dy, 0,
+ kSourceDevice);
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
+ EXPECT_EQ(expected_dx, scroll_update.data.scrollUpdate.deltaX);
+ EXPECT_EQ(expected_dy, scroll_update.data.scrollUpdate.deltaY);
+
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
+ }
+
+ {
+ // Scrolls hinted mostly in the larger axis are permitted in that axis.
+ filter.ResetTouchAction();
+ filter.OnSetTouchAction(action);
+ WebGestureEvent scroll_begin =
+ SyntheticWebGestureEventBuilder::BuildScrollBegin(scroll_x, scroll_y);
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
+
+ WebGestureEvent scroll_update =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(dx, dy, 0,
+ kSourceDevice);
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
+ EXPECT_EQ(expected_dx, scroll_update.data.scrollUpdate.deltaX);
+ EXPECT_EQ(expected_dy, scroll_update.data.scrollUpdate.deltaY);
+
+ // Ensure that scrolls in the opposite direction are not filtered once
+ // scrolling has started. (Once scrolling is started, the direction may
+ // be reversed by the user even if scrolls that start in the reversed
+ // direction are disallowed.
+ WebGestureEvent scroll_update2 =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(-dx, -dy, 0,
+ kSourceDevice);
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update2));
+ EXPECT_EQ(-expected_dx, scroll_update2.data.scrollUpdate.deltaX);
+ EXPECT_EQ(-expected_dy, scroll_update2.data.scrollUpdate.deltaY);
+
+ WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
+ fling_x, fling_y, kSourceDevice);
+ EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
+ EXPECT_EQ(expected_fling_x, fling_start.data.flingStart.velocityX);
+ EXPECT_EQ(expected_fling_y, fling_start.data.flingStart.velocityY);
+ }
+
+ {
+ // Scrolls hinted mostly in the opposite direction are suppressed entirely.
+ filter.ResetTouchAction();
+ filter.OnSetTouchAction(action);
+ WebGestureEvent scroll_begin =
+ SyntheticWebGestureEventBuilder::BuildScrollBegin(scroll_y, scroll_x);
+ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
+
+ WebGestureEvent scroll_update =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(dx, dy, 0,
+ kSourceDevice);
+ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
+ EXPECT_EQ(dx, scroll_update.data.scrollUpdate.deltaX);
+ EXPECT_EQ(dy, scroll_update.data.scrollUpdate.deltaY);
+
+ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
+ }
+ filter.ResetTouchAction();
+}
+
TEST(TouchActionFilterTest, SimpleFilter) {
TouchActionFilter filter;
@@ -130,158 +217,76 @@ TEST(TouchActionFilterTest, Fling) {
filter.ResetTouchAction();
}
-TEST(TouchActionFilterTest, PanX) {
- TouchActionFilter filter;
+TEST(TouchActionFilterTest, PanLeft) {
const float kDX = 5;
const float kDY = 10;
+ const float kScrollX = 7;
+ const float kScrollY = 6;
const float kFlingX = 7;
const float kFlingY = -4;
- WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
- WebInputEvent::GestureScrollEnd, kSourceDevice);
-
- {
- // Scrolls with no direction hint are permitted in the X axis.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(0, 0);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
-
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaY);
+ PanTest(TOUCH_ACTION_PAN_LEFT, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY,
+ kDX, 0, kFlingX, 0);
+}
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
- }
+TEST(TouchActionFilterTest, PanRight) {
+ const float kDX = 5;
+ const float kDY = 10;
+ const float kScrollX = -7;
+ const float kScrollY = 6;
+ const float kFlingX = 7;
+ const float kFlingY = -4;
- {
- // Scrolls hinted mostly in the X axis are permitted in that axis.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 6);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
+ PanTest(TOUCH_ACTION_PAN_RIGHT, kScrollX, kScrollY, kDX, kDY, kFlingX,
+ kFlingY, kDX, 0, kFlingX, 0);
+}
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaY);
+TEST(TouchActionFilterTest, PanX) {
+ const float kDX = 5;
+ const float kDY = 10;
+ const float kScrollX = 7;
+ const float kScrollY = 6;
+ const float kFlingX = 7;
+ const float kFlingY = -4;
- WebGestureEvent scroll_update2 =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(-4, -2, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update2));
- EXPECT_EQ(-4, scroll_update2.data.scrollUpdate.deltaX);
- EXPECT_EQ(0, scroll_update2.data.scrollUpdate.deltaY);
+ PanTest(TOUCH_ACTION_PAN_X, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY,
+ kDX, 0, kFlingX, 0);
+}
- WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
- kFlingX, kFlingY, kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
- EXPECT_EQ(kFlingX, fling_start.data.flingStart.velocityX);
- EXPECT_EQ(0, fling_start.data.flingStart.velocityY);
- }
+TEST(TouchActionFilterTest, PanUp) {
+ const float kDX = 5;
+ const float kDY = 10;
+ const float kScrollX = 6;
+ const float kScrollY = 7;
+ const float kFlingX = 7;
+ const float kFlingY = -4;
- {
- // Scrolls hinted mostly in the Y direction are suppressed entirely.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_X);
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 8);
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
+ PanTest(TOUCH_ACTION_PAN_UP, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY,
+ 0, kDY, 0, kFlingY);
+}
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
+TEST(TouchActionFilterTest, PanDown) {
+ const float kDX = 5;
+ const float kDY = 10;
+ const float kScrollX = 6;
+ const float kScrollY = -7;
+ const float kFlingX = 7;
+ const float kFlingY = -4;
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
- }
- filter.ResetTouchAction();
+ PanTest(TOUCH_ACTION_PAN_DOWN, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY,
+ 0, kDY, 0, kFlingY);
}
TEST(TouchActionFilterTest, PanY) {
- TouchActionFilter filter;
const float kDX = 5;
const float kDY = 10;
+ const float kScrollX = 6;
+ const float kScrollY = 7;
const float kFlingX = 7;
const float kFlingY = -4;
- WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
- WebInputEvent::GestureScrollEnd, kSourceDevice);
-
- {
- // Scrolls with no direction hint are permitted in the Y axis.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
-
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(0, 0);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
-
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
-
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
- }
-
- {
- // Scrolls hinted mostly in the Y axis are permitted in that axis.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
-
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(0, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
-
- WebGestureEvent scroll_update2 =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(-4, -2, 0,
- kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update2));
- EXPECT_EQ(0, scroll_update2.data.scrollUpdate.deltaX);
- EXPECT_EQ(-2, scroll_update2.data.scrollUpdate.deltaY);
- WebGestureEvent fling_start = SyntheticWebGestureEventBuilder::BuildFling(
- kFlingX, kFlingY, kSourceDevice);
- EXPECT_FALSE(filter.FilterGestureEvent(&fling_start));
- EXPECT_EQ(0, fling_start.data.flingStart.velocityX);
- EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY);
- }
-
- {
- // Scrolls hinted mostly in the X direction are suppressed entirely.
- filter.ResetTouchAction();
- filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y);
- WebGestureEvent scroll_begin =
- SyntheticWebGestureEventBuilder::BuildScrollBegin(-8, 7);
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
-
- WebGestureEvent scroll_update =
- SyntheticWebGestureEventBuilder::BuildScrollUpdate(kDX, kDY, 0,
- kSourceDevice);
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update));
- EXPECT_EQ(kDX, scroll_update.data.scrollUpdate.deltaX);
- EXPECT_EQ(kDY, scroll_update.data.scrollUpdate.deltaY);
-
- EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
- }
- filter.ResetTouchAction();
+ PanTest(TOUCH_ACTION_PAN_Y, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY, 0,
+ kDY, 0, kFlingY);
}
TEST(TouchActionFilterTest, PanXY) {
« no previous file with comments | « content/browser/renderer_host/input/touch_action_filter.cc ('k') | content/common/input/touch_action.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698