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

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

Issue 67383002: Initial browser-side implementation for touch-action (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update for new blink API - no touch ID for now Created 7 years, 1 month 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
new file mode 100644
index 0000000000000000000000000000000000000000..dd143b8e3c2e4edc2a2999e0105e375a9bbdb732
--- /dev/null
+++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
@@ -0,0 +1,100 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/renderer_host/input/touch_action_filter.h"
+#include "content/browser/renderer_host/input/synthetic_web_input_event_builders.h"
+#include "content/port/browser/event_with_latency_info.h"
+#include "content/port/common/input_event_ack_state.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/web/WebInputEvent.h"
+
+using blink::WebGestureEvent;
+using blink::WebInputEvent;
+
+namespace content {
+
+TEST(TouchActionFilterTest, SimpleFilter) {
+ TouchActionFilter filter;
+
+ const WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen);
+ const WebGestureEvent scroll_update =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0);
+ const WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
+ const WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureTap, WebGestureEvent::Touchscreen);
+
+ // No events filtered by default.
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_end));
+ EXPECT_FALSE(filter.FilterGestureEvent(tap));
+
+ // TOUCH_ACTION_AUTO doesn't cause any filtering.
+ filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_end));
+
+ // TOUCH_ACTION_NONE filters out all scroll events, but no other events.
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE);
+ EXPECT_FALSE(filter.FilterGestureEvent(tap));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_end));
+
+ // After the end of a gesture the state is reset.
+ 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.
+ 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.
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_FALSE(filter.FilterGestureEvent(scroll_end));
+
+ // Changing the touch action during a gesture has no effect.
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE);
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin));
+ filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_end));
+}
+
+TEST(TouchActionFilterTest, MultiTouch) {
+ TouchActionFilter filter;
+
+ const WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen);
+ const WebGestureEvent scroll_update =
+ SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0);
+ const WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
+
+ // For multiple points, the intersection is what matters.
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE);
+ filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
+
+ filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE);
+ filter.OnSetTouchAction(TOUCH_ACTION_AUTO);
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_begin));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scroll_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698