Chromium Code Reviews| 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..d493eb14a0df8cc9aaebdf213d73a030efdade18 100644 |
| --- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc |
| +++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc |
| @@ -29,14 +29,17 @@ TEST(TouchActionFilterTest, SimpleFilter) { |
| WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); |
| // No events filtered by default. |
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); |
| EXPECT_EQ(kDeltaX, scroll_update.data.scrollUpdate.deltaX); |
| EXPECT_EQ(kDeltaY, scroll_update.data.scrollUpdate.deltaY); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&tap)); |
| // TOUCH_ACTION_AUTO doesn't cause any filtering. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); |
| @@ -45,6 +48,7 @@ TEST(TouchActionFilterTest, SimpleFilter) { |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // TOUCH_ACTION_NONE filters out all scroll events, but no other events. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_FALSE(filter.FilterGestureEvent(&tap)); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| @@ -55,21 +59,25 @@ TEST(TouchActionFilterTest, SimpleFilter) { |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); |
| // After the end of a gesture the state is reset. |
|
Rick Byers
2014/02/18 22:01:15
update comment
tdresser
2014/02/20 18:37:56
Done.
|
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // Setting touch action doesn't impact any in-progress gestures. |
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // And the state is still cleared for the next gesture. |
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // Changing the touch action during a gesture has no effect. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| @@ -95,6 +103,7 @@ TEST(TouchActionFilterTest, Fling) { |
| kFlingX, kFlingY, WebGestureEvent::Touchpad); |
| // TOUCH_ACTION_NONE filters out fling events. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); |
| @@ -103,11 +112,13 @@ TEST(TouchActionFilterTest, Fling) { |
| EXPECT_EQ(kFlingY, fling_start.data.flingStart.velocityY); |
| // After a fling the state is reset. |
|
Rick Byers
2014/02/18 22:01:15
update comment (maybe even remove the test since i
tdresser
2014/02/20 18:37:56
I think the test still provides some value - I've
|
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&fling_start)); |
| // touchpad flings aren't filtered and don't reset state. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); |
| @@ -126,6 +137,7 @@ TEST(TouchActionFilterTest, PanX) { |
| { |
| // Scrolls with no direction hint are permitted in the X axis. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X); |
| WebGestureEvent scroll_begin = |
| @@ -143,6 +155,7 @@ TEST(TouchActionFilterTest, PanX) { |
| { |
| // Scrolls hinted mostly in the X axis are permitted in that axis. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 6); |
| @@ -169,6 +182,7 @@ TEST(TouchActionFilterTest, PanX) { |
| { |
| // Scrolls hinted mostly in the Y direction are suppressed entirely. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 8); |
| @@ -195,6 +209,7 @@ TEST(TouchActionFilterTest, PanY) { |
| { |
| // Scrolls with no direction hint are permitted in the Y axis. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y); |
| WebGestureEvent scroll_begin = |
| @@ -212,6 +227,7 @@ TEST(TouchActionFilterTest, PanY) { |
| { |
| // Scrolls hinted mostly in the Y axis are permitted in that axis. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7); |
| @@ -238,6 +254,7 @@ TEST(TouchActionFilterTest, PanY) { |
| { |
| // Scrolls hinted mostly in the X direction are suppressed entirely. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-8, 7); |
| @@ -262,6 +279,7 @@ TEST(TouchActionFilterTest, PanXY) { |
| { |
| // Scrolls hinted in the X axis are permitted and unmodified. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-7, 6); |
| @@ -282,6 +300,7 @@ TEST(TouchActionFilterTest, PanXY) { |
| { |
| // Scrolls hinted in the Y axis are permitted and unmodified. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y); |
| WebGestureEvent scroll_begin = |
| SyntheticWebGestureEventBuilder::BuildScrollBegin(-6, 7); |
| @@ -335,6 +354,7 @@ TEST(TouchActionFilterTest, MultiTouch) { |
| WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen); |
| // For multiple points, the intersection is what matters. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| @@ -345,6 +365,7 @@ TEST(TouchActionFilterTest, MultiTouch) { |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); |
| // Intersection of PAN_X and PAN_Y is NONE. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_Y); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y); |
| @@ -368,6 +389,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen); |
| // Pinch is allowed with touch-action: auto. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin)); |
| @@ -376,6 +398,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // Pinch is not allowed with touch-action: none. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_TRUE(filter.FilterGestureEvent(&pinch_begin)); |
| @@ -384,6 +407,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); |
| // Pinch is not allowed with touch-action: pan-x pan-y. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_PAN_X_Y); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_TRUE(filter.FilterGestureEvent(&pinch_begin)); |
| @@ -392,6 +416,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| // Pinch state is automatically reset at the end of a scroll. |
| + filter.StartNewTouchActionSequence(); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update)); |
| @@ -405,6 +430,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| // while scrolling) and so no SetTouchAction can occur. But this |
| // could change in the future, so it's still worth verifying in this |
| // unit test. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin)); |
| @@ -422,6 +448,7 @@ TEST(TouchActionFilterTest, Pinch) { |
| // Once a pinch has started, any change in state won't affect the current |
| // pinch gesture, but can affect a future one within the same scroll. |
| + filter.StartNewTouchActionSequence(); |
| filter.OnSetTouchAction(TOUCH_ACTION_AUTO); |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin)); |
| @@ -434,4 +461,27 @@ TEST(TouchActionFilterTest, Pinch) { |
| EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); |
| } |
| +TEST(TouchActionFilterTest, TouchActionResetsOnNewTouchActionSequence) { |
| + TouchActionFilter filter; |
| + |
| + WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build( |
| + WebInputEvent::GestureTap, WebGestureEvent::Touchscreen); |
| + WebGestureEvent scroll_begin = |
| + SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3); |
| + WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build( |
| + WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen); |
| + |
| + filter.StartNewTouchActionSequence(); |
| + filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); |
| + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); |
| + |
| + filter.StartNewTouchActionSequence(); |
| + filter.OnSetTouchAction(TOUCH_ACTION_NONE); |
| + EXPECT_FALSE(filter.FilterGestureEvent(&tap)); |
| + |
| + filter.StartNewTouchActionSequence(); |
| + EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); |
| +} |
| + |
| } // namespace content |