| 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..28526ee0bdd37bd28bccb7ea1f7a38951ffaa93c
|
| --- /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 scrollBegin = SyntheticWebGestureEventBuilder::Build(
|
| + WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen);
|
| + const WebGestureEvent scrollUpdate =
|
| + SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0);
|
| + const WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
|
| + WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
|
| + const WebGestureEvent tap = SyntheticWebGestureEventBuilder::Build(
|
| + WebInputEvent::GestureTap, WebGestureEvent::Touchscreen);
|
| +
|
| + // No events filtered by default.
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollEnd));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(tap));
|
| +
|
| + // TOUCH_ACTION_AUTO doesn't cause any filtering.
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_AUTO);
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + // TOUCH_ACTION_NONE filters out all scroll events, but no other events.
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_NONE);
|
| + EXPECT_FALSE(filter.FilterGestureEvent(tap));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + // After the end of a gesture the state is reset.
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + // Setting touch action doesn't impact any in-progress gestures.
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollBegin));
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_NONE);
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + // And the state is still cleared for the next gesture.
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_FALSE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + // Changing the touch action during a gesture has no effect.
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_NONE);
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollBegin));
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_AUTO);
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
|
| +}
|
| +
|
| +TEST(TouchActionFilterTest, MultiTouch) {
|
| + TouchActionFilter filter;
|
| +
|
| + const WebGestureEvent scrollBegin = SyntheticWebGestureEventBuilder::Build(
|
| + WebInputEvent::GestureScrollBegin, WebGestureEvent::Touchscreen);
|
| + const WebGestureEvent scrollUpdate =
|
| + SyntheticWebGestureEventBuilder::BuildScrollUpdate(0, 10, 0);
|
| + const WebGestureEvent scrollEnd = SyntheticWebGestureEventBuilder::Build(
|
| + WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
|
| +
|
| + // For multiple points, the intersection is what matters.
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_NONE);
|
| + filter.OnSetTouchAction(1, TOUCH_ACTION_AUTO);
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
|
| +
|
| + filter.OnSetTouchAction(0, TOUCH_ACTION_AUTO);
|
| + filter.OnSetTouchAction(1, TOUCH_ACTION_NONE);
|
| + filter.OnSetTouchAction(2, TOUCH_ACTION_AUTO);
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollBegin));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollUpdate));
|
| + EXPECT_TRUE(filter.FilterGestureEvent(scrollEnd));
|
| +}
|
| +
|
| +} // namespace content
|
|
|