| 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) {
|
|
|