| Index: content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
|
| index 84f04f6ff6afd44adf657a3fed64043e785db857..5d84b4b48fcc63caeeaea3c883af0452f9dbfdad 100644
|
| --- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
|
| +++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
|
| @@ -9,10 +9,13 @@
|
| #include "content/browser/renderer_host/input/synthetic_gesture_controller.h"
|
| #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
|
| #include "content/browser/renderer_host/input/synthetic_pinch_gesture.h"
|
| +#include "content/browser/renderer_host/input/synthetic_smooth_drag_gesture.h"
|
| +#include "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h"
|
| #include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h"
|
| #include "content/browser/renderer_host/input/synthetic_tap_gesture.h"
|
| #include "content/browser/renderer_host/render_widget_host_delegate.h"
|
| #include "content/common/input/synthetic_pinch_gesture_params.h"
|
| +#include "content/common/input/synthetic_smooth_drag_gesture_params.h"
|
| #include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
|
| #include "content/common/input/synthetic_tap_gesture_params.h"
|
| #include "content/public/test/mock_render_process_host.h"
|
| @@ -39,6 +42,8 @@ const int kPointerAssumedStoppedTimeMs = 43;
|
| const float kTouchSlopInDips = 7.0f;
|
| const float kMinScalingSpanInDips = 27.5f;
|
|
|
| +enum TouchGestureType { TOUCH_SCROLL, TOUCH_DRAG };
|
| +
|
| class MockSyntheticGesture : public SyntheticGesture {
|
| public:
|
| MockSyntheticGesture(bool* finished, int num_steps)
|
| @@ -110,24 +115,24 @@ class MockSyntheticGestureTarget : public SyntheticGestureTarget {
|
| int pointer_assumed_stopped_time_ms_;
|
| };
|
|
|
| -class MockScrollGestureTarget : public MockSyntheticGestureTarget {
|
| +class MockMoveGestureTarget : public MockSyntheticGestureTarget {
|
| public:
|
| - MockScrollGestureTarget() : total_abs_scroll_distance_length_(0) {}
|
| - ~MockScrollGestureTarget() override {}
|
| + MockMoveGestureTarget() : total_abs_move_distance_length_(0) {}
|
| + ~MockMoveGestureTarget() override {}
|
|
|
| gfx::Vector2dF start_to_end_distance() const {
|
| return start_to_end_distance_;
|
| }
|
| - float total_abs_scroll_distance_length() const {
|
| - return total_abs_scroll_distance_length_;
|
| + float total_abs_move_distance_length() const {
|
| + return total_abs_move_distance_length_;
|
| }
|
|
|
| protected:
|
| gfx::Vector2dF start_to_end_distance_;
|
| - float total_abs_scroll_distance_length_;
|
| + float total_abs_move_distance_length_;
|
| };
|
|
|
| -class MockScrollMouseTarget : public MockScrollGestureTarget {
|
| +class MockScrollMouseTarget : public MockMoveGestureTarget {
|
| public:
|
| MockScrollMouseTarget() {}
|
| ~MockScrollMouseTarget() override {}
|
| @@ -138,14 +143,14 @@ class MockScrollMouseTarget : public MockScrollGestureTarget {
|
| static_cast<const WebMouseWheelEvent&>(event);
|
| gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY);
|
| start_to_end_distance_ += delta;
|
| - total_abs_scroll_distance_length_ += delta.Length();
|
| + total_abs_move_distance_length_ += delta.Length();
|
| }
|
| };
|
|
|
| -class MockScrollTouchTarget : public MockScrollGestureTarget {
|
| +class MockMoveTouchTarget : public MockMoveGestureTarget {
|
| public:
|
| - MockScrollTouchTarget() : started_(false) {}
|
| - ~MockScrollTouchTarget() override {}
|
| + MockMoveTouchTarget() : started_(false) {}
|
| + ~MockMoveTouchTarget() override {}
|
|
|
| void DispatchInputEventToPlatform(const WebInputEvent& event) override {
|
| ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type));
|
| @@ -165,7 +170,7 @@ class MockScrollTouchTarget : public MockScrollGestureTarget {
|
| gfx::PointF touch_point(touch_event.touches[0].position.x,
|
| touch_event.touches[0].position.y);
|
| gfx::Vector2dF delta = touch_point - last_touch_point_;
|
| - total_abs_scroll_distance_length_ += delta.Length();
|
| + total_abs_move_distance_length_ += delta.Length();
|
|
|
| if (touch_event.type == WebInputEvent::TouchEnd)
|
| start_to_end_distance_ = touch_point - start_;
|
| @@ -180,6 +185,39 @@ class MockScrollTouchTarget : public MockScrollGestureTarget {
|
| bool started_;
|
| };
|
|
|
| +class MockDragMouseTarget : public MockMoveGestureTarget {
|
| + public:
|
| + MockDragMouseTarget() : started_(false) {}
|
| + ~MockDragMouseTarget() override {}
|
| +
|
| + void DispatchInputEventToPlatform(const WebInputEvent& event) override {
|
| + ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type));
|
| + const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event);
|
| + if (!started_) {
|
| + EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft);
|
| + EXPECT_EQ(mouse_event.clickCount, 1);
|
| + EXPECT_EQ(mouse_event.type, WebInputEvent::MouseDown);
|
| + start_.SetPoint(mouse_event.x, mouse_event.y);
|
| + last_mouse_point_ = start_;
|
| + started_ = true;
|
| + } else {
|
| + EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft);
|
| + ASSERT_NE(mouse_event.type, WebInputEvent::MouseDown);
|
| +
|
| + gfx::PointF mouse_point(mouse_event.x, mouse_event.y);
|
| + gfx::Vector2dF delta = mouse_point - last_mouse_point_;
|
| + total_abs_move_distance_length_ += delta.Length();
|
| + if (mouse_event.type == WebInputEvent::MouseUp)
|
| + start_to_end_distance_ = mouse_point - start_;
|
| + last_mouse_point_ = mouse_point;
|
| + }
|
| + }
|
| +
|
| + private:
|
| + bool started_;
|
| + gfx::PointF start_, last_mouse_point_;
|
| +};
|
| +
|
| class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
|
| public:
|
| enum ZoomDirection {
|
| @@ -356,10 +394,10 @@ class MockSyntheticTapMouseTarget : public MockSyntheticTapGestureTarget {
|
| }
|
| };
|
|
|
| -class SyntheticGestureControllerTest : public testing::Test {
|
| +class SyntheticGestureControllerTestBase {
|
| public:
|
| - SyntheticGestureControllerTest() {}
|
| - ~SyntheticGestureControllerTest() override {}
|
| + SyntheticGestureControllerTestBase() {}
|
| + ~SyntheticGestureControllerTestBase() {}
|
|
|
| protected:
|
| template<typename MockGestureTarget>
|
| @@ -369,22 +407,11 @@ class SyntheticGestureControllerTest : public testing::Test {
|
| scoped_ptr<SyntheticGestureTarget>(target_)));
|
| }
|
|
|
| - void SetUp() override {
|
| - start_time_ = base::TimeTicks::Now();
|
| - time_ = start_time_;
|
| - num_success_ = 0;
|
| - num_failure_ = 0;
|
| - }
|
| -
|
| - void TearDown() override {
|
| - controller_.reset();
|
| - target_ = NULL;
|
| - time_ = base::TimeTicks();
|
| - }
|
| -
|
| void QueueSyntheticGesture(scoped_ptr<SyntheticGesture> gesture) {
|
| - controller_->QueueSyntheticGesture(gesture.Pass(),
|
| - base::Bind(&SyntheticGestureControllerTest::OnSyntheticGestureCompleted,
|
| + controller_->QueueSyntheticGesture(
|
| + gesture.Pass(),
|
| + base::Bind(
|
| + &SyntheticGestureControllerTestBase::OnSyntheticGestureCompleted,
|
| base::Unretained(this)));
|
| }
|
|
|
| @@ -417,6 +444,42 @@ class SyntheticGestureControllerTest : public testing::Test {
|
| int num_failure_;
|
| };
|
|
|
| +class SyntheticGestureControllerTest
|
| + : public SyntheticGestureControllerTestBase,
|
| + public testing::Test {
|
| + protected:
|
| + void SetUp() override {
|
| + start_time_ = base::TimeTicks::Now();
|
| + time_ = start_time_;
|
| + num_success_ = 0;
|
| + num_failure_ = 0;
|
| + }
|
| +
|
| + void TearDown() override {
|
| + controller_.reset();
|
| + target_ = nullptr;
|
| + time_ = base::TimeTicks();
|
| + }
|
| +};
|
| +
|
| +class SyntheticGestureControllerTestWithParam
|
| + : public SyntheticGestureControllerTestBase,
|
| + public testing::TestWithParam<bool> {
|
| + protected:
|
| + void SetUp() override {
|
| + start_time_ = base::TimeTicks::Now();
|
| + time_ = start_time_;
|
| + num_success_ = 0;
|
| + num_failure_ = 0;
|
| + }
|
| +
|
| + void TearDown() override {
|
| + controller_.reset();
|
| + target_ = nullptr;
|
| + time_ = base::TimeTicks();
|
| + }
|
| +};
|
| +
|
| TEST_F(SyntheticGestureControllerTest, SingleGesture) {
|
| CreateControllerAndTarget<MockSyntheticGestureTarget>();
|
|
|
| @@ -524,7 +587,7 @@ TEST_F(SyntheticGestureControllerTest, GestureCompletedOnDidFlushInput) {
|
| EXPECT_EQ(2, num_success_);
|
| }
|
|
|
| -gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2d& vector,
|
| +gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2dF& vector,
|
| SyntheticGestureTarget* target) {
|
| const int kTouchSlop = target->GetTouchSlopInDips();
|
|
|
| @@ -543,46 +606,62 @@ gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2d& vector,
|
| return gfx::Vector2d(x, y);
|
| }
|
|
|
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchVertical) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| +TEST_P(SyntheticGestureControllerTestWithParam,
|
| + SingleMoveGestureTouchVertical) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(89, 32);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + if (GetParam() == TOUCH_DRAG) {
|
| + params.add_slop = false;
|
| + }
|
| + params.start_point.SetPoint(89, 32);
|
| params.distances.push_back(gfx::Vector2d(0, 123));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| - EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_),
|
| - scroll_target->start_to_end_distance());
|
| + if (GetParam() == TOUCH_SCROLL) {
|
| + EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_),
|
| + scroll_target->start_to_end_distance());
|
| + } else {
|
| + EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance());
|
| + }
|
| }
|
|
|
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchHorizontal) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| +TEST_P(SyntheticGestureControllerTestWithParam,
|
| + SingleScrollGestureTouchHorizontal) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(12, -23);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + if (GetParam() == TOUCH_DRAG) {
|
| + params.add_slop = false;
|
| + }
|
| + params.start_point.SetPoint(12, -23);
|
| params.distances.push_back(gfx::Vector2d(-234, 0));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| - EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_),
|
| - scroll_target->start_to_end_distance());
|
| + if (GetParam() == TOUCH_SCROLL) {
|
| + EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_),
|
| + scroll_target->start_to_end_distance());
|
| + } else {
|
| + EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance());
|
| + }
|
| }
|
|
|
| void CheckIsWithinRangeSingle(float scroll_distance,
|
| @@ -599,27 +678,27 @@ void CheckIsWithinRangeSingle(float scroll_distance,
|
|
|
| void CheckSingleScrollDistanceIsWithinRange(
|
| const gfx::Vector2dF& scroll_distance,
|
| - const gfx::Vector2d& target_distance,
|
| + const gfx::Vector2dF& target_distance,
|
| SyntheticGestureTarget* target) {
|
| CheckIsWithinRangeSingle(scroll_distance.x(), target_distance.x(), target);
|
| CheckIsWithinRangeSingle(scroll_distance.y(), target_distance.y(), target);
|
| }
|
|
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(0, 7);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + params.start_point.SetPoint(0, 7);
|
| params.distances.push_back(gfx::Vector2d(413, -83));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| CheckSingleScrollDistanceIsWithinRange(
|
| @@ -627,26 +706,25 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) {
|
| }
|
|
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| // Create a smooth scroll with a short distance and set the pointer assumed
|
| // stopped time high, so that the stopping should dominate the time the
|
| // gesture is active.
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(-98, -23);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + params.start_point.SetPoint(-98, -23);
|
| params.distances.push_back(gfx::Vector2d(21, -12));
|
| params.prevent_fling = true;
|
| -
|
| target_->set_pointer_assumed_stopped_time_ms(543);
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| CheckSingleScrollDistanceIsWithinRange(
|
| @@ -655,26 +733,26 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) {
|
| }
|
|
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| // Create a smooth scroll with a short distance and set the pointer assumed
|
| // stopped time high. Disable 'prevent_fling' and check that the gesture
|
| // finishes without waiting before it stops.
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(-89, 78);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + params.start_point.SetPoint(-89, 78);
|
| params.distances.push_back(gfx::Vector2d(-43, 19));
|
| params.prevent_fling = false;
|
|
|
| target_->set_pointer_assumed_stopped_time_ms(543);
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| CheckSingleScrollDistanceIsWithinRange(
|
| @@ -682,21 +760,25 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) {
|
| EXPECT_LE(GetTotalTime(), target_->PointerAssumedStoppedTime());
|
| }
|
|
|
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchZeroDistance) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| +TEST_P(SyntheticGestureControllerTestWithParam,
|
| + SingleScrollGestureTouchZeroDistance) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(-32, 43);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + if (GetParam() == TOUCH_DRAG) {
|
| + params.add_slop = false;
|
| + }
|
| + params.start_point.SetPoint(-32, 43);
|
| params.distances.push_back(gfx::Vector2d(0, 0));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_target->start_to_end_distance());
|
| @@ -705,18 +787,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchZeroDistance) {
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) {
|
| CreateControllerAndTarget<MockScrollMouseTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| - params.anchor.SetPoint(432, 89);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT;
|
| + params.start_point.SetPoint(432, 89);
|
| params.distances.push_back(gfx::Vector2d(0, -234));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance());
|
| @@ -725,18 +807,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) {
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) {
|
| CreateControllerAndTarget<MockScrollMouseTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| - params.anchor.SetPoint(90, 12);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT;
|
| + params.start_point.SetPoint(90, 12);
|
| params.distances.push_back(gfx::Vector2d(345, 0));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance());
|
| @@ -745,18 +827,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) {
|
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) {
|
| CreateControllerAndTarget<MockScrollMouseTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| - params.anchor.SetPoint(90, 12);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT;
|
| + params.start_point.SetPoint(90, 12);
|
| params.distances.push_back(gfx::Vector2d(-194, 303));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance());
|
| @@ -765,19 +847,19 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) {
|
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) {
|
| CreateControllerAndTarget<MockScrollMouseTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| - params.anchor.SetPoint(90, 12);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT;
|
| + params.start_point.SetPoint(90, 12);
|
| params.distances.push_back(gfx::Vector2d(-129, 212));
|
| params.distances.push_back(gfx::Vector2d(8, -9));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| EXPECT_EQ(params.distances[0] + params.distances[1],
|
| @@ -787,25 +869,25 @@ TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) {
|
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouseHorizontal) {
|
| CreateControllerAndTarget<MockScrollMouseTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| - params.anchor.SetPoint(90, 12);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT;
|
| + params.start_point.SetPoint(90, 12);
|
| params.distances.push_back(gfx::Vector2d(-129, 0));
|
| params.distances.push_back(gfx::Vector2d(79, 0));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| // This check only works for horizontal or vertical scrolls because of
|
| // floating point precision issues with diagonal scrolls.
|
| EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(),
|
| - scroll_target->total_abs_scroll_distance_length());
|
| + scroll_target->total_abs_move_distance_length());
|
| EXPECT_EQ(params.distances[0] + params.distances[1],
|
| scroll_target->start_to_end_distance());
|
| }
|
| @@ -824,28 +906,28 @@ void CheckIsWithinRangeMulti(float scroll_distance,
|
|
|
| void CheckMultiScrollDistanceIsWithinRange(
|
| const gfx::Vector2dF& scroll_distance,
|
| - const gfx::Vector2d& target_distance,
|
| + const gfx::Vector2dF& target_distance,
|
| SyntheticGestureTarget* target) {
|
| CheckIsWithinRangeMulti(scroll_distance.x(), target_distance.x(), target);
|
| CheckIsWithinRangeMulti(scroll_distance.y(), target_distance.y(), target);
|
| }
|
|
|
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(8, -13);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + params.start_point.SetPoint(8, -13);
|
| params.distances.push_back(gfx::Vector2d(234, 133));
|
| params.distances.push_back(gfx::Vector2d(-9, 78));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| CheckMultiScrollDistanceIsWithinRange(
|
| @@ -854,31 +936,168 @@ TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) {
|
| target_);
|
| }
|
|
|
| -TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouchVertical) {
|
| - CreateControllerAndTarget<MockScrollTouchTarget>();
|
| +TEST_P(SyntheticGestureControllerTestWithParam,
|
| + MultiScrollGestureTouchVertical) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
|
|
| - SyntheticSmoothScrollGestureParams params;
|
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| - params.anchor.SetPoint(234, -13);
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT;
|
| + if (GetParam() == TOUCH_DRAG) {
|
| + params.add_slop = false;
|
| + }
|
| + params.start_point.SetPoint(234, -13);
|
| params.distances.push_back(gfx::Vector2d(0, 133));
|
| params.distances.push_back(gfx::Vector2d(0, 78));
|
|
|
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| - new SyntheticSmoothScrollGesture(params));
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| QueueSyntheticGesture(gesture.Pass());
|
| FlushInputUntilComplete();
|
|
|
| - MockScrollGestureTarget* scroll_target =
|
| - static_cast<MockScrollGestureTarget*>(target_);
|
| + MockMoveGestureTarget* scroll_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| EXPECT_EQ(1, num_success_);
|
| EXPECT_EQ(0, num_failure_);
|
| - EXPECT_FLOAT_EQ(
|
| - params.distances[0].Length() + params.distances[1].Length() +
|
| - target_->GetTouchSlopInDips(),
|
| - scroll_target->total_abs_scroll_distance_length());
|
| + if (GetParam() == TOUCH_SCROLL) {
|
| + EXPECT_FLOAT_EQ(params.distances[0].Length() +
|
| + params.distances[1].Length() +
|
| + target_->GetTouchSlopInDips(),
|
| + scroll_target->total_abs_move_distance_length());
|
| EXPECT_EQ(AddTouchSlopToVector(params.distances[0] + params.distances[1],
|
| target_),
|
| scroll_target->start_to_end_distance());
|
| + } else {
|
| + EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(),
|
| + scroll_target->total_abs_move_distance_length());
|
| + EXPECT_EQ(params.distances[0] + params.distances[1],
|
| + scroll_target->start_to_end_distance());
|
| + }
|
| +}
|
| +
|
| +INSTANTIATE_TEST_CASE_P(Single,
|
| + SyntheticGestureControllerTestWithParam,
|
| + testing::Values(TOUCH_SCROLL, TOUCH_DRAG));
|
| +
|
| +TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseDiagonal) {
|
| + CreateControllerAndTarget<MockDragMouseTarget>();
|
| +
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT;
|
| + params.start_point.SetPoint(0, 7);
|
| + params.distances.push_back(gfx::Vector2d(413, -83));
|
| +
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| + QueueSyntheticGesture(gesture.Pass());
|
| + FlushInputUntilComplete();
|
| +
|
| + MockMoveGestureTarget* drag_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| + EXPECT_EQ(1, num_success_);
|
| + EXPECT_EQ(0, num_failure_);
|
| + EXPECT_EQ(drag_target->start_to_end_distance(), params.distances[0]);
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseZeroDistance) {
|
| + CreateControllerAndTarget<MockDragMouseTarget>();
|
| +
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT;
|
| + params.start_point.SetPoint(-32, 43);
|
| + params.distances.push_back(gfx::Vector2d(0, 0));
|
| +
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| + QueueSyntheticGesture(gesture.Pass());
|
| + FlushInputUntilComplete();
|
| +
|
| + MockMoveGestureTarget* drag_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| + EXPECT_EQ(1, num_success_);
|
| + EXPECT_EQ(0, num_failure_);
|
| + EXPECT_EQ(gfx::Vector2dF(0, 0), drag_target->start_to_end_distance());
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest, MultiDragGestureMouse) {
|
| + CreateControllerAndTarget<MockDragMouseTarget>();
|
| +
|
| + SyntheticSmoothMoveGestureParams params;
|
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT;
|
| + params.start_point.SetPoint(8, -13);
|
| + params.distances.push_back(gfx::Vector2d(234, 133));
|
| + params.distances.push_back(gfx::Vector2d(-9, 78));
|
| +
|
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture(
|
| + new SyntheticSmoothMoveGesture(params));
|
| + QueueSyntheticGesture(gesture.Pass());
|
| + FlushInputUntilComplete();
|
| +
|
| + MockMoveGestureTarget* drag_target =
|
| + static_cast<MockMoveGestureTarget*>(target_);
|
| + EXPECT_EQ(1, num_success_);
|
| + EXPECT_EQ(0, num_failure_);
|
| + EXPECT_EQ(drag_target->start_to_end_distance(),
|
| + params.distances[0] + params.distances[1]);
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest,
|
| + SyntheticSmoothDragTestUsingSingleMouseDrag) {
|
| + CreateControllerAndTarget<MockDragMouseTarget>();
|
| +
|
| + SyntheticSmoothDragGestureParams params;
|
| + params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| + params.distances.push_back(gfx::Vector2d(234, 133));
|
| + params.speed_in_pixels_s = 800;
|
| +
|
| + scoped_ptr<SyntheticSmoothDragGesture> gesture(
|
| + new SyntheticSmoothDragGesture(params));
|
| + const base::TimeTicks timestamp;
|
| + gesture->ForwardInputEvents(timestamp, target_);
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest,
|
| + SyntheticSmoothDragTestUsingSingleTouchDrag) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
| +
|
| + SyntheticSmoothDragGestureParams params;
|
| + params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| + params.start_point.SetPoint(89, 32);
|
| + params.distances.push_back(gfx::Vector2d(0, 123));
|
| + params.speed_in_pixels_s = 800;
|
| +
|
| + scoped_ptr<SyntheticSmoothDragGesture> gesture(
|
| + new SyntheticSmoothDragGesture(params));
|
| + const base::TimeTicks timestamp;
|
| + gesture->ForwardInputEvents(timestamp, target_);
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest,
|
| + SyntheticSmoothScrollTestUsingSingleTouchScroll) {
|
| + CreateControllerAndTarget<MockMoveTouchTarget>();
|
| +
|
| + SyntheticSmoothScrollGestureParams params;
|
| + params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
|
| +
|
| + scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| + new SyntheticSmoothScrollGesture(params));
|
| + const base::TimeTicks timestamp;
|
| + gesture->ForwardInputEvents(timestamp, target_);
|
| +}
|
| +
|
| +TEST_F(SyntheticGestureControllerTest,
|
| + SyntheticSmoothScrollTestUsingSingleMouseScroll) {
|
| + CreateControllerAndTarget<MockScrollMouseTarget>();
|
| +
|
| + SyntheticSmoothScrollGestureParams params;
|
| + params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
|
| + params.anchor.SetPoint(432, 89);
|
| + params.distances.push_back(gfx::Vector2d(0, -234));
|
| + params.speed_in_pixels_s = 800;
|
| +
|
| + scoped_ptr<SyntheticSmoothScrollGesture> gesture(
|
| + new SyntheticSmoothScrollGesture(params));
|
| + const base::TimeTicks timestamp;
|
| + gesture->ForwardInputEvents(timestamp, target_);
|
| }
|
|
|
| TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) {
|
|
|