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

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

Issue 759433002: Reland: Move TouchSelectionController from content to ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Excluded ui/touch_selection from Windows GN build Created 6 years 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_handle_unittest.cc
diff --git a/content/browser/renderer_host/input/touch_handle_unittest.cc b/content/browser/renderer_host/input/touch_handle_unittest.cc
deleted file mode 100644
index b43aa1786158d164ec1810dd8d622e86dc3dbc75..0000000000000000000000000000000000000000
--- a/content/browser/renderer_host/input/touch_handle_unittest.cc
+++ /dev/null
@@ -1,492 +0,0 @@
-// Copyright 2014 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_handle.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/events/test/motion_event_test_utils.h"
-#include "ui/gfx/geometry/rect_f.h"
-
-using ui::test::MockMotionEvent;
-
-namespace content {
-namespace {
-
-const int kDefaultTapTimeoutMs = 200;
-const float kDefaultTapSlop = 10.f;
-const float kDefaultDrawableSize = 10.f;
-
-struct MockDrawableData {
- MockDrawableData()
- : orientation(TOUCH_HANDLE_ORIENTATION_UNDEFINED),
- alpha(0.f),
- enabled(false),
- visible(false),
- rect(0, 0, kDefaultDrawableSize, kDefaultDrawableSize) {}
- TouchHandleOrientation orientation;
- float alpha;
- bool enabled;
- bool visible;
- gfx::RectF rect;
-};
-
-class MockTouchHandleDrawable : public TouchHandleDrawable {
- public:
- explicit MockTouchHandleDrawable(MockDrawableData* data) : data_(data) {}
- ~MockTouchHandleDrawable() override {}
-
- void SetEnabled(bool enabled) override { data_->enabled = enabled; }
-
- void SetOrientation(TouchHandleOrientation orientation) override {
- data_->orientation = orientation;
- }
-
- void SetAlpha(float alpha) override {
- data_->alpha = alpha;
- data_->visible = alpha > 0;
- }
-
- void SetFocus(const gfx::PointF& position) override {
- // Anchor focus to the top left of the rect (regardless of orientation).
- data_->rect.set_origin(position);
- }
-
- bool IntersectsWith(const gfx::RectF& rect) const override {
- return data_->rect.Intersects(rect);
- }
-
- private:
- MockDrawableData* data_;
-};
-
-} // namespace
-
-class TouchHandleTest : public testing::Test, public TouchHandleClient {
- public:
- TouchHandleTest()
- : dragging_(false),
- dragged_(false),
- tapped_(false),
- needs_animate_(false) {}
-
- ~TouchHandleTest() override {}
-
- // TouchHandleClient implementation.
- void OnHandleDragBegin(const TouchHandle& handle) override {
- dragging_ = true;
- }
-
- void OnHandleDragUpdate(const TouchHandle& handle,
- const gfx::PointF& new_position) override {
- dragged_ = true;
- drag_position_ = new_position;
- }
-
- void OnHandleDragEnd(const TouchHandle& handle) override {
- dragging_ = false;
- }
-
- void OnHandleTapped(const TouchHandle& handle) override { tapped_ = true; }
-
- void SetNeedsAnimate() override { needs_animate_ = true; }
-
- scoped_ptr<TouchHandleDrawable> CreateDrawable() override {
- return scoped_ptr<TouchHandleDrawable>(
- new MockTouchHandleDrawable(&drawable_data_));
- }
-
- base::TimeDelta GetTapTimeout() const override {
- return base::TimeDelta::FromMilliseconds(kDefaultTapTimeoutMs);
- }
-
- float GetTapSlop() const override { return kDefaultTapSlop; }
-
- void Animate(TouchHandle& handle) {
- needs_animate_ = false;
- base::TimeTicks now = base::TimeTicks::Now();
- while (handle.Animate(now))
- now += base::TimeDelta::FromMilliseconds(16);
- }
-
- bool GetAndResetHandleDragged() {
- bool dragged = dragged_;
- dragged_ = false;
- return dragged;
- }
-
- bool GetAndResetHandleTapped() {
- bool tapped = tapped_;
- tapped_ = false;
- return tapped;
- }
-
- bool GetAndResetNeedsAnimate() {
- bool needs_animate = needs_animate_;
- needs_animate_ = false;
- return needs_animate;
- }
-
- bool IsDragging() const { return dragging_; }
- const gfx::PointF& DragPosition() const { return drag_position_; }
- bool NeedsAnimate() const { return needs_animate_; }
-
- const MockDrawableData& drawable() { return drawable_data_; }
-
- private:
- gfx::PointF drag_position_;
- bool dragging_;
- bool dragged_;
- bool tapped_;
- bool needs_animate_;
-
- MockDrawableData drawable_data_;
-};
-
-TEST_F(TouchHandleTest, Visibility) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- EXPECT_FALSE(drawable().visible);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
- EXPECT_TRUE(drawable().visible);
- EXPECT_EQ(1.f, drawable().alpha);
-
- handle.SetVisible(false, TouchHandle::ANIMATION_NONE);
- EXPECT_FALSE(drawable().visible);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
- EXPECT_TRUE(drawable().visible);
- EXPECT_EQ(1.f, drawable().alpha);
-}
-
-TEST_F(TouchHandleTest, VisibilityAnimation) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- ASSERT_FALSE(NeedsAnimate());
- ASSERT_FALSE(drawable().visible);
- ASSERT_EQ(0.f, drawable().alpha);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_TRUE(NeedsAnimate());
- EXPECT_FALSE(drawable().visible);
- EXPECT_EQ(0.f, drawable().alpha);
-
- Animate(handle);
- EXPECT_TRUE(drawable().visible);
- EXPECT_EQ(1.f, drawable().alpha);
-
- ASSERT_FALSE(NeedsAnimate());
- handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_TRUE(NeedsAnimate());
- EXPECT_TRUE(drawable().visible);
- EXPECT_EQ(1.f, drawable().alpha);
-
- Animate(handle);
- EXPECT_FALSE(drawable().visible);
- EXPECT_EQ(0.f, drawable().alpha);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
- EXPECT_EQ(1.f, drawable().alpha);
- EXPECT_FALSE(GetAndResetNeedsAnimate());
- handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_EQ(1.f, drawable().alpha);
- EXPECT_TRUE(GetAndResetNeedsAnimate());
- handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_EQ(1.f, drawable().alpha);
- EXPECT_FALSE(GetAndResetNeedsAnimate());
-}
-
-TEST_F(TouchHandleTest, Orientation) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- EXPECT_EQ(TOUCH_HANDLE_CENTER, drawable().orientation);
-
- handle.SetOrientation(TOUCH_HANDLE_LEFT);
- EXPECT_EQ(TOUCH_HANDLE_LEFT, drawable().orientation);
-
- handle.SetOrientation(TOUCH_HANDLE_RIGHT);
- EXPECT_EQ(TOUCH_HANDLE_RIGHT, drawable().orientation);
-
- handle.SetOrientation(TOUCH_HANDLE_CENTER);
- EXPECT_EQ(TOUCH_HANDLE_CENTER, drawable().orientation);
-}
-
-TEST_F(TouchHandleTest, Position) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- gfx::PointF position;
- EXPECT_EQ(gfx::PointF(), drawable().rect.origin());
-
- position = gfx::PointF(7.3f, -3.7f);
- handle.SetPosition(position);
- EXPECT_EQ(position, drawable().rect.origin());
-
- position = gfx::PointF(-7.3f, 3.7f);
- handle.SetPosition(position);
- EXPECT_EQ(position, drawable().rect.origin());
-}
-
-TEST_F(TouchHandleTest, PositionNotUpdatedWhileFadingOrInvisible) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
- ASSERT_TRUE(drawable().visible);
- ASSERT_FALSE(NeedsAnimate());
-
- gfx::PointF old_position(7.3f, -3.7f);
- handle.SetPosition(old_position);
- ASSERT_EQ(old_position, drawable().rect.origin());
-
- handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH);
- ASSERT_TRUE(NeedsAnimate());
-
- gfx::PointF new_position(3.7f, -3.7f);
- handle.SetPosition(new_position);
- EXPECT_EQ(old_position, drawable().rect.origin());
- EXPECT_TRUE(NeedsAnimate());
-
- // While the handle is fading, the new position should not take affect.
- base::TimeTicks now = base::TimeTicks::Now();
- while (handle.Animate(now)) {
- EXPECT_EQ(old_position, drawable().rect.origin());
- now += base::TimeDelta::FromMilliseconds(16);
- }
-
- // Even after the animation terminates, the new position will not be pushed.
- EXPECT_EQ(old_position, drawable().rect.origin());
-
- // As soon as the handle becomes visible, the new position will be pushed.
- handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_EQ(new_position, drawable().rect.origin());
-}
-
-TEST_F(TouchHandleTest, Enabled) {
- // A newly created handle defaults to enabled.
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- EXPECT_TRUE(drawable().enabled);
-
- handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_TRUE(GetAndResetNeedsAnimate());
- EXPECT_EQ(0.f, drawable().alpha);
- handle.SetEnabled(false);
- EXPECT_FALSE(drawable().enabled);
-
- // Dragging should not be allowed while the handle is disabled.
- base::TimeTicks event_time = base::TimeTicks::Now();
- const float kOffset = kDefaultDrawableSize / 2.f;
- MockMotionEvent event(
- MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
-
- // Disabling mid-animation should cancel the animation.
- handle.SetEnabled(true);
- handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_TRUE(drawable().visible);
- EXPECT_TRUE(GetAndResetNeedsAnimate());
- handle.SetEnabled(false);
- EXPECT_FALSE(drawable().enabled);
- EXPECT_FALSE(drawable().visible);
- EXPECT_FALSE(handle.Animate(base::TimeTicks::Now()));
-
- // Disabling mid-drag should cancel the drag.
- handle.SetEnabled(true);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
- handle.SetEnabled(false);
- EXPECT_FALSE(IsDragging());
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
-}
-
-TEST_F(TouchHandleTest, Drag) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
-
- base::TimeTicks event_time = base::TimeTicks::Now();
- const float kOffset = kDefaultDrawableSize / 2.f;
-
- // The handle must be visible to trigger drag.
- MockMotionEvent event(
- MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- // ACTION_DOWN must fall within the drawable region to trigger drag.
- event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 50, 50);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
-
- // Only ACTION_DOWN will trigger drag.
- event = MockMotionEvent(
- MockMotionEvent::ACTION_MOVE, event_time, kOffset, kOffset);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
-
- // Start the drag.
- event = MockMotionEvent(
- MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-
- event = MockMotionEvent(
- MockMotionEvent::ACTION_MOVE, event_time, kOffset + 10, kOffset + 15);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(GetAndResetHandleDragged());
- EXPECT_TRUE(IsDragging());
- EXPECT_EQ(gfx::PointF(10, 15), DragPosition());
-
- event = MockMotionEvent(
- MockMotionEvent::ACTION_MOVE, event_time, kOffset - 10, kOffset - 15);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(GetAndResetHandleDragged());
- EXPECT_TRUE(IsDragging());
- EXPECT_EQ(gfx::PointF(-10, -15), DragPosition());
-
- event = MockMotionEvent(MockMotionEvent::ACTION_UP);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(GetAndResetHandleDragged());
- EXPECT_FALSE(IsDragging());
-
- // Non-ACTION_DOWN events after the drag has terminated should not be handled.
- event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
-}
-
-TEST_F(TouchHandleTest, DragDefersOrientationChange) {
- TouchHandle handle(this, TOUCH_HANDLE_RIGHT);
- ASSERT_EQ(drawable().orientation, TOUCH_HANDLE_RIGHT);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- MockMotionEvent event(MockMotionEvent::ACTION_DOWN);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-
- // Orientation changes will be deferred until the drag ends.
- handle.SetOrientation(TOUCH_HANDLE_LEFT);
- EXPECT_EQ(TOUCH_HANDLE_RIGHT, drawable().orientation);
-
- event = MockMotionEvent(MockMotionEvent::ACTION_MOVE);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(GetAndResetHandleDragged());
- EXPECT_TRUE(IsDragging());
- EXPECT_EQ(TOUCH_HANDLE_RIGHT, drawable().orientation);
-
- event = MockMotionEvent(MockMotionEvent::ACTION_UP);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(GetAndResetHandleDragged());
- EXPECT_FALSE(IsDragging());
- EXPECT_EQ(TOUCH_HANDLE_LEFT, drawable().orientation);
-}
-
-TEST_F(TouchHandleTest, DragDefersFade) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- MockMotionEvent event(MockMotionEvent::ACTION_DOWN);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-
- // Fade will be deferred until the drag ends.
- handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH);
- EXPECT_FALSE(NeedsAnimate());
- EXPECT_TRUE(drawable().visible);
- EXPECT_EQ(1.f, drawable().alpha);
-
- event = MockMotionEvent(MockMotionEvent::ACTION_MOVE);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(NeedsAnimate());
- EXPECT_TRUE(drawable().visible);
-
- event = MockMotionEvent(MockMotionEvent::ACTION_UP);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
- EXPECT_TRUE(NeedsAnimate());
-
- Animate(handle);
- EXPECT_FALSE(drawable().visible);
- EXPECT_EQ(0.f, drawable().alpha);
-}
-
-TEST_F(TouchHandleTest, DragTargettingUsesTouchSize) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- base::TimeTicks event_time = base::TimeTicks::Now();
- const float kTouchSize = 24.f;
- const float kOffset = kDefaultDrawableSize + kTouchSize / 2.001f;
-
- MockMotionEvent event(
- MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset);
- event.SetTouchMajor(0.f);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
-
- event.SetTouchMajor(kTouchSize / 2.f);
- EXPECT_FALSE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(IsDragging());
-
- event.SetTouchMajor(kTouchSize);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-
- event.SetTouchMajor(kTouchSize * 2.f);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-
- // Ensure a touch size of 0 can still register a hit.
- event = MockMotionEvent(MockMotionEvent::ACTION_DOWN,
- event_time,
- kDefaultDrawableSize / 2.f,
- kDefaultDrawableSize / 2.f);
- event.SetTouchMajor(0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(IsDragging());
-}
-
-TEST_F(TouchHandleTest, Tap) {
- TouchHandle handle(this, TOUCH_HANDLE_CENTER);
- handle.SetVisible(true, TouchHandle::ANIMATION_NONE);
-
- base::TimeTicks event_time = base::TimeTicks::Now();
-
- // ACTION_CANCEL shouldn't trigger a tap.
- MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event_time += base::TimeDelta::FromMilliseconds(50);
- event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(GetAndResetHandleTapped());
-
- // Long press shouldn't trigger a tap.
- event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event_time += 2 * GetTapTimeout();
- event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(GetAndResetHandleTapped());
-
- // Only a brief tap within the slop region should trigger a tap.
- event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event_time += GetTapTimeout() / 2;
- event = MockMotionEvent(
- MockMotionEvent::ACTION_MOVE, event_time, kDefaultTapSlop / 2.f, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event = MockMotionEvent(
- MockMotionEvent::ACTION_UP, event_time, kDefaultTapSlop / 2.f, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_TRUE(GetAndResetHandleTapped());
-
- // Moving beyond the slop region shouldn't trigger a tap.
- event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event_time += GetTapTimeout() / 2;
- event = MockMotionEvent(
- MockMotionEvent::ACTION_MOVE, event_time, kDefaultTapSlop * 2.f, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- event = MockMotionEvent(
- MockMotionEvent::ACTION_UP, event_time, kDefaultTapSlop * 2.f, 0);
- EXPECT_TRUE(handle.WillHandleTouchEvent(event));
- EXPECT_FALSE(GetAndResetHandleTapped());
-}
-
-} // namespace content
« no previous file with comments | « content/browser/renderer_host/input/touch_handle.cc ('k') | content/browser/renderer_host/input/touch_selection_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698