Chromium Code Reviews| 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 7a538420fcd0e718a47d4b8f38526b02bb717b06..39739704c98c2231ff5ada2ea5719d50082b3bf3 100644 |
| --- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| +++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| @@ -474,21 +474,16 @@ class MockSyntheticTapMouseTarget : public MockSyntheticTapGestureTarget { |
| class MockSyntheticPointerActionTarget : public MockSyntheticGestureTarget { |
| public: |
| - MockSyntheticPointerActionTarget() {} |
| + MockSyntheticPointerActionTarget() : count_(0) {} |
| ~MockSyntheticPointerActionTarget() override {} |
| - gfx::PointF positions(int index) const { return positions_[index]; } |
| - int indexes(int index) const { return indexes_[index]; } |
| - WebTouchPoint::State states(int index) { return states_[index]; } |
| - unsigned touch_length() const { return touch_length_; } |
| WebInputEvent::Type type() const { return type_; } |
| + int count() const { return count_; } |
| + void reset_count() { count_ = 0; } |
| protected: |
| - gfx::PointF positions_[kTouchPointersLength]; |
| - unsigned touch_length_; |
| - int indexes_[kTouchPointersLength]; |
| - WebTouchPoint::State states_[kTouchPointersLength]; |
| WebInputEvent::Type type_; |
| + int count_; |
|
tdresser
2016/12/13 14:37:43
Be more specific in the variable name here.
|
| }; |
| class MockSyntheticPointerTouchActionTarget |
| @@ -507,7 +502,45 @@ class MockSyntheticPointerTouchActionTarget |
| states_[i] = touch_event.touches[i].state; |
| } |
| touch_length_ = touch_event.touchesLength; |
| + count_++; |
| } |
| + |
| + gfx::PointF positions(int index) const { return positions_[index]; } |
| + int indexes(int index) const { return indexes_[index]; } |
| + WebTouchPoint::State states(int index) { return states_[index]; } |
| + unsigned touch_length() const { return touch_length_; } |
| + |
| + private: |
| + gfx::PointF positions_[kTouchPointersLength]; |
| + unsigned touch_length_; |
| + int indexes_[kTouchPointersLength]; |
| + WebTouchPoint::State states_[kTouchPointersLength]; |
| +}; |
| + |
| +class MockSyntheticPointerMouseActionTarget |
| + : public MockSyntheticPointerActionTarget { |
| + public: |
| + MockSyntheticPointerMouseActionTarget() {} |
| + ~MockSyntheticPointerMouseActionTarget() override {} |
| + |
| + void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| + ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type)); |
| + const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); |
| + type_ = mouse_event.type; |
| + position_ = gfx::PointF(mouse_event.x, mouse_event.y); |
| + clickCount_ = mouse_event.clickCount; |
| + button_ = mouse_event.button; |
| + count_++; |
| + } |
| + |
| + gfx::PointF position() const { return position_; } |
| + int clickCount() const { return clickCount_; } |
| + WebMouseEvent::Button button() const { return button_; } |
| + |
| + private: |
| + gfx::PointF position_; |
| + int clickCount_; |
| + WebMouseEvent::Button button_; |
| }; |
| class SyntheticGestureControllerTestBase { |
| @@ -1471,6 +1504,170 @@ TEST_F(SyntheticGestureControllerTest, TapGestureMouse) { |
| base::TimeDelta::FromMilliseconds(params.duration_ms)); |
| } |
| +TEST_F(SyntheticGestureControllerTest, PointerTouchAction) { |
| + CreateControllerAndTarget<MockSyntheticPointerTouchActionTarget>(); |
| + |
| + // First, send two touch presses for finger 0 and finger 1. |
| + SyntheticPointerActionListParams::ParamList param_list; |
| + SyntheticPointerActionParams param0 = SyntheticPointerActionParams( |
| + SyntheticPointerActionParams::PointerActionType::PRESS, |
| + SyntheticGestureParams::TOUCH_INPUT); |
| + SyntheticPointerActionParams param1 = SyntheticPointerActionParams( |
| + SyntheticPointerActionParams::PointerActionType::PRESS, |
| + SyntheticGestureParams::TOUCH_INPUT); |
| + param0.set_position(gfx::PointF(54, 89)); |
| + param0.set_index(0); |
| + param1.set_position(gfx::PointF(79, 132)); |
| + param1.set_index(1); |
| + param_list.push_back(param0); |
| + param_list.push_back(param1); |
| + SyntheticPointerActionListParams params(param_list); |
| + params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| + std::unique_ptr<SyntheticPointerAction> gesture( |
| + new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + FlushInputUntilComplete(); |
| + |
| + MockSyntheticPointerTouchActionTarget* pointer_touch_target = |
| + static_cast<MockSyntheticPointerTouchActionTarget*>(target_); |
| + EXPECT_EQ(1, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_touch_target->count(), 1); |
| + EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
| + EXPECT_EQ(pointer_touch_target->touch_length(), 2u); |
| + EXPECT_EQ(pointer_touch_target->indexes(0), 0); |
| + EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89)); |
| + EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed); |
|
tdresser
2016/12/13 14:37:43
Can we add a helper to shorten this up?
Maybe som
|
| + EXPECT_EQ(pointer_touch_target->indexes(1), 1); |
| + EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(79, 132)); |
| + EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StatePressed); |
| + |
| + // Second, send a touch release for finger 0, a touch move for finger 1. |
| + param0.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::RELEASE); |
| + param1.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::MOVE); |
| + param1.set_position(gfx::PointF(183, 239)); |
| + param_list.clear(); |
| + param_list.push_back(param0); |
| + param_list.push_back(param1); |
| + params.PushPointerActionParamsList(param_list); |
| + gesture.reset(new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + pointer_touch_target->reset_count(); |
| + FlushInputUntilComplete(); |
| + |
| + EXPECT_EQ(2, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_touch_target->count(), 2); |
| + EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove); |
| + EXPECT_EQ(pointer_touch_target->touch_length(), 2u); |
| + EXPECT_EQ(pointer_touch_target->indexes(0), 0); |
| + EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StateReleased); |
| + EXPECT_EQ(pointer_touch_target->indexes(1), 1); |
| + EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(183, 239)); |
| + EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateMoved); |
| + |
| + // Third, send a touch release for finger 1. |
| + param1.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::RELEASE); |
| + params.PushPointerActionParams(param1); |
| + gesture.reset(new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + pointer_touch_target->reset_count(); |
| + FlushInputUntilComplete(); |
| + |
| + EXPECT_EQ(3, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_touch_target->count(), 3); |
| + EXPECT_EQ(pointer_touch_target->type(), |
| + WebInputEvent::WebInputEvent::TouchEnd); |
| + EXPECT_EQ(pointer_touch_target->touch_length(), 2u); |
| + EXPECT_EQ(pointer_touch_target->indexes(1), 1); |
| + EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateReleased); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, PointerMouseAction) { |
| + CreateControllerAndTarget<MockSyntheticPointerMouseActionTarget>(); |
| + |
| + // First, send a mouse move. |
| + SyntheticPointerActionListParams::ParamList param_list; |
| + SyntheticPointerActionParams param = SyntheticPointerActionParams( |
| + SyntheticPointerActionParams::PointerActionType::MOVE, |
| + SyntheticGestureParams::MOUSE_INPUT); |
| + |
| + param.set_position(gfx::PointF(54, 89)); |
| + SyntheticPointerActionListParams params; |
| + params.PushPointerActionParams(param); |
| + params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| + std::unique_ptr<SyntheticPointerAction> gesture( |
| + new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + FlushInputUntilComplete(); |
| + |
| + MockSyntheticPointerMouseActionTarget* pointer_mouse_target = |
| + static_cast<MockSyntheticPointerMouseActionTarget*>(target_); |
| + EXPECT_EQ(1, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_mouse_target->count(), 1); |
| + EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove); |
| + EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(54, 89)); |
| + EXPECT_EQ(pointer_mouse_target->clickCount(), 0); |
| + EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::NoButton); |
| + |
| + // Second, send a mouse press. |
| + param.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::PRESS); |
| + param.set_position(gfx::PointF(183, 239)); |
| + params.PushPointerActionParams(param); |
| + gesture.reset(new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + pointer_mouse_target->reset_count(); |
| + FlushInputUntilComplete(); |
| + |
| + EXPECT_EQ(2, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_mouse_target->count(), 2); |
| + EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown); |
| + EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(183, 239)); |
| + EXPECT_EQ(pointer_mouse_target->clickCount(), 1); |
| + EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); |
| + |
| + // Third, send a mouse move. |
| + param.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::MOVE); |
| + param.set_position(gfx::PointF(254, 279)); |
| + params.PushPointerActionParams(param); |
| + gesture.reset(new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + pointer_mouse_target->reset_count(); |
| + FlushInputUntilComplete(); |
| + |
| + EXPECT_EQ(3, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_mouse_target->count(), 3); |
| + EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove); |
| + EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(254, 279)); |
| + EXPECT_EQ(pointer_mouse_target->clickCount(), 1); |
| + EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); |
| + |
| + // Fourth, send a mouse release. |
| + param.set_pointer_action_type( |
| + SyntheticPointerActionParams::PointerActionType::RELEASE); |
| + params.PushPointerActionParams(param); |
| + gesture.reset(new SyntheticPointerAction(params)); |
| + QueueSyntheticGesture(std::move(gesture)); |
| + pointer_mouse_target->reset_count(); |
| + FlushInputUntilComplete(); |
| + |
| + EXPECT_EQ(4, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(pointer_mouse_target->count(), 4); |
| + EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseUp); |
| + EXPECT_EQ(pointer_mouse_target->clickCount(), 1); |
| + EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); |
| +} |
| + |
| } // namespace |
| -} // namespace content |
| +} // namespace content |