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

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

Issue 2178153002: Prepare SyntheticPointerAction to handle mouse actions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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/synthetic_pointer_action_unittest.cc
diff --git a/content/browser/renderer_host/input/synthetic_pointer_action_unittest.cc b/content/browser/renderer_host/input/synthetic_pointer_action_unittest.cc
index 06701fdb80e33a9264ad42e6c99e1d753696d66a..b8c1eb736fd3859da709bbd6939e738986f8f66f 100644
--- a/content/browser/renderer_host/input/synthetic_pointer_action_unittest.cc
+++ b/content/browser/renderer_host/input/synthetic_pointer_action_unittest.cc
@@ -15,6 +15,7 @@
using blink::WebInputEvent;
using blink::WebTouchEvent;
+using blink::WebMouseEvent;
using blink::WebTouchPoint;
namespace content {
@@ -85,12 +86,39 @@ class MockSyntheticPointerTouchActionTarget
WebTouchPoint::State states_[WebTouchEvent::touchesLengthCap];
};
+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;
+ }
+
+ SyntheticGestureParams::GestureSourceType
+ GetDefaultSyntheticGestureSourceType() const override {
+ return SyntheticGestureParams::MOUSE_INPUT;
+ }
+
+ 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 SyntheticPointerActionTest : public testing::Test {
public:
SyntheticPointerActionTest() {
- target_.reset(new MockSyntheticPointerTouchActionTarget());
- synthetic_pointer_ =
- SyntheticPointer::Create(SyntheticGestureParams::TOUCH_INPUT);
action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
std::fill(index_map_.begin(), index_map_.end(), -1);
num_success_ = 0;
@@ -99,6 +127,13 @@ class SyntheticPointerActionTest : public testing::Test {
~SyntheticPointerActionTest() override {}
protected:
+ template <typename MockGestureTarget>
+ void CreateSyntheticPointerActionTarget() {
+ target_.reset(new MockGestureTarget());
+ synthetic_pointer_ = SyntheticPointer::Create(
+ target_->GetDefaultSyntheticGestureSourceType());
+ }
+
void ForwardSyntheticPointerAction() {
pointer_action_.reset(new SyntheticPointerAction(
std::move(action_param_list_), synthetic_pointer_.get(), &index_map_));
@@ -122,6 +157,8 @@ class SyntheticPointerActionTest : public testing::Test {
};
TEST_F(SyntheticPointerActionTest, PointerTouchAction) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
+
// Send a touch press for one finger.
SyntheticPointerActionParams params0 = SyntheticPointerActionParams(
SyntheticPointerActionParams::PointerActionType::PRESS);
@@ -157,8 +194,6 @@ TEST_F(SyntheticPointerActionTest, PointerTouchAction) {
action_param_list_->push_back(params1);
ForwardSyntheticPointerAction();
- pointer_touch_target =
- static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
EXPECT_EQ(2, num_success_);
EXPECT_EQ(0, num_failure_);
// The type of the SyntheticWebTouchEvent is the action of the last finger.
@@ -181,8 +216,6 @@ TEST_F(SyntheticPointerActionTest, PointerTouchAction) {
action_param_list_->push_back(params1);
ForwardSyntheticPointerAction();
- pointer_touch_target =
- static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
EXPECT_EQ(3, num_success_);
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove);
@@ -215,6 +248,8 @@ TEST_F(SyntheticPointerActionTest, PointerTouchAction) {
}
TEST_F(SyntheticPointerActionTest, PointerTouchActionIndexInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
+
// Users sent a wrong index for the touch action.
SyntheticPointerActionParams params0 = SyntheticPointerActionParams(
SyntheticPointerActionParams::PointerActionType::PRESS);
@@ -245,6 +280,8 @@ TEST_F(SyntheticPointerActionTest, PointerTouchActionIndexInvalid) {
}
TEST_F(SyntheticPointerActionTest, PointerTouchActionSourceTypeInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
+
// Users' gesture source type does not match with the touch action.
SyntheticPointerActionParams params0 = SyntheticPointerActionParams(
SyntheticPointerActionParams::PointerActionType::PRESS);
@@ -275,6 +312,8 @@ TEST_F(SyntheticPointerActionTest, PointerTouchActionSourceTypeInvalid) {
}
TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
+
// Cannot send a touch move or touch release without sending a touch press
// first.
SyntheticPointerActionParams params0 = SyntheticPointerActionParams(
@@ -328,6 +367,185 @@ TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) {
EXPECT_EQ(3, num_failure_);
}
+TEST_F(SyntheticPointerActionTest, PointerMouseAction) {
tdresser 2016/07/26 12:27:41 How different are the touch and mouse tests? Could
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
+
+ // Send a mouse move.
+ SyntheticPointerActionParams params = SyntheticPointerActionParams(
+ SyntheticPointerActionParams::PointerActionType::MOVE);
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.set_position(gfx::PointF(189, 62));
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
+ static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 0);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonNone);
+
+ // Send a mouse down.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_position(gfx::PointF(189, 62));
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::PRESS);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(2, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+
+ // Send a mouse drag.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_position(gfx::PointF(326, 298));
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::MOVE);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(3, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+
+ // Send a mouse up.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::RELEASE);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(4, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseUp);
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+}
+
+TEST_F(SyntheticPointerActionTest, PointerMouseActionIndexInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
+
+ // Users sent a wrong index for the mouse action.
+ SyntheticPointerActionParams params = SyntheticPointerActionParams(
+ SyntheticPointerActionParams::PointerActionType::PRESS);
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.set_index(-1);
+ params.set_position(gfx::PointF(54, 89));
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(0, num_success_);
+ EXPECT_EQ(1, num_failure_);
+
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_index(0);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
+ static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(1, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+}
+
+TEST_F(SyntheticPointerActionTest, PointerMouseActionSourceTypeInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
+
+ // Users' gesture source type does not match with the mouse action.
+ SyntheticPointerActionParams params = SyntheticPointerActionParams(
+ SyntheticPointerActionParams::PointerActionType::PRESS);
+ params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
+ params.set_index(0);
+ params.set_position(gfx::PointF(54, 89));
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(0, num_success_);
+ EXPECT_EQ(1, num_failure_);
+
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
+ static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(1, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+}
+
+TEST_F(SyntheticPointerActionTest, PointerMouseActionTypeInvalid) {
+ CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
+
+ // Send a mouse move.
+ SyntheticPointerActionParams params = SyntheticPointerActionParams(
+ SyntheticPointerActionParams::PointerActionType::MOVE);
+ params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT;
+ params.set_position(gfx::PointF(189, 62));
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
+ static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(0, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 0);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonNone);
+
+ // Cannot send a mouse up without sending a mouse down first.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::RELEASE);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(1, num_success_);
+ EXPECT_EQ(1, num_failure_);
+
+ // Send a mouse down for one finger.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::PRESS);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(2, num_success_);
+ EXPECT_EQ(1, num_failure_);
+ EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
+ EXPECT_EQ(pointer_mouse_target->position(), params.position());
+ EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
+ EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::ButtonLeft);
+
+ // Cannot send a mouse down again without releasing the mouse button.
+ action_param_list_.reset(new std::vector<SyntheticPointerActionParams>());
+ params.set_pointer_action_type(
+ SyntheticPointerActionParams::PointerActionType::PRESS);
+ action_param_list_->push_back(params);
+ ForwardSyntheticPointerAction();
+
+ EXPECT_EQ(2, num_success_);
+ EXPECT_EQ(2, num_failure_);
+}
+
} // namespace
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698