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

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

Issue 171283002: Always reset touch action at the beginning of a new gesture sequence (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
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

Powered by Google App Engine
This is Rietveld 408576698