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

Side by Side Diff: content/browser/renderer_host/input/synthetic_pointer_action_unittest.cc

Issue 2336803003: Make SyntheticPointerAction to flush the pointer action sequence (Closed)
Patch Set: controller Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/time/time.h" 6 #include "base/time/time.h"
7 #include "content/browser/renderer_host/input/synthetic_gesture.h" 7 #include "content/browser/renderer_host/input/synthetic_gesture.h"
8 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" 8 #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
9 #include "content/browser/renderer_host/input/synthetic_pointer_action.h" 9 #include "content/browser/renderer_host/input/synthetic_pointer_action.h"
10 #include "content/browser/renderer_host/input/synthetic_touch_driver.h" 10 #include "content/browser/renderer_host/input/synthetic_touch_driver.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 112
113 private: 113 private:
114 gfx::PointF position_; 114 gfx::PointF position_;
115 int clickCount_; 115 int clickCount_;
116 WebMouseEvent::Button button_; 116 WebMouseEvent::Button button_;
117 }; 117 };
118 118
119 class SyntheticPointerActionTest : public testing::Test { 119 class SyntheticPointerActionTest : public testing::Test {
120 public: 120 public:
121 SyntheticPointerActionTest() { 121 SyntheticPointerActionTest() {
122 action_param_list_.reset(new std::vector<SyntheticPointerActionParams>()); 122 params_ = SyntheticPointerActionListParams();
123 num_success_ = 0; 123 num_success_ = 0;
124 num_failure_ = 0; 124 num_failure_ = 0;
125 } 125 }
126 ~SyntheticPointerActionTest() override {} 126 ~SyntheticPointerActionTest() override {}
127 127
128 protected: 128 protected:
129 template <typename MockGestureTarget> 129 template <typename MockGestureTarget>
130 void CreateSyntheticPointerActionTarget() { 130 void CreateSyntheticPointerActionTarget() {
131 target_.reset(new MockGestureTarget()); 131 target_.reset(new MockGestureTarget());
132 synthetic_pointer_driver_ = SyntheticPointerDriver::Create( 132 synthetic_pointer_driver_ = SyntheticPointerDriver::Create(
133 target_->GetDefaultSyntheticGestureSourceType()); 133 target_->GetDefaultSyntheticGestureSourceType());
134 } 134 }
135 135
136 void ForwardSyntheticPointerAction() { 136 void ForwardSyntheticPointerAction() {
137 pointer_action_.reset(new SyntheticPointerAction(
138 action_param_list_.get(), synthetic_pointer_driver_.get()));
139
140 SyntheticGesture::Result result = pointer_action_->ForwardInputEvents( 137 SyntheticGesture::Result result = pointer_action_->ForwardInputEvents(
141 base::TimeTicks::Now(), target_.get()); 138 base::TimeTicks::Now(), target_.get());
142 139
143 if (result == SyntheticGesture::GESTURE_FINISHED) 140 if (result == SyntheticGesture::GESTURE_FINISHED ||
141 result == SyntheticGesture::GESTURE_RUNNING)
144 num_success_++; 142 num_success_++;
145 else 143 else
146 num_failure_++; 144 num_failure_++;
147 } 145 }
148 146
149 int num_success_; 147 int num_success_;
150 int num_failure_; 148 int num_failure_;
151 std::unique_ptr<MockSyntheticPointerActionTarget> target_; 149 std::unique_ptr<MockSyntheticPointerActionTarget> target_;
152 std::unique_ptr<SyntheticGesture> pointer_action_; 150 std::unique_ptr<SyntheticGesture> pointer_action_;
153 std::unique_ptr<SyntheticPointerDriver> synthetic_pointer_driver_; 151 std::unique_ptr<SyntheticPointerDriver> synthetic_pointer_driver_;
154 std::unique_ptr<std::vector<SyntheticPointerActionParams>> action_param_list_; 152 SyntheticPointerActionListParams params_;
155 }; 153 };
156 154
157 TEST_F(SyntheticPointerActionTest, PointerTouchAction) { 155 TEST_F(SyntheticPointerActionTest, PointerTouchAction) {
158 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); 156 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
159 157
160 // Send a touch press for one finger. 158 // Send a touch press for one finger.
161 SyntheticPointerActionParams params0 = SyntheticPointerActionParams( 159 SyntheticPointerActionParams param0 = SyntheticPointerActionParams(
162 SyntheticPointerActionParams::PointerActionType::PRESS, 160 SyntheticPointerActionParams::PointerActionType::PRESS,
163 SyntheticGestureParams::TOUCH_INPUT); 161 SyntheticGestureParams::TOUCH_INPUT);
164 params0.set_position(gfx::PointF(54, 89)); 162 param0.set_index(0);
165 action_param_list_->push_back(params0); 163 param0.set_position(gfx::PointF(54, 89));
164 params_.PushPointerActionParams(param0);
165
166 // Send a touch move for the first finger and a touch press for the second
167 // finger.
168 param0.set_pointer_action_type(
169 SyntheticPointerActionParams::PointerActionType::MOVE);
170 param0.set_position(gfx::PointF(133, 156));
171 SyntheticPointerActionParams param1 = SyntheticPointerActionParams(
172 SyntheticPointerActionParams::PointerActionType::PRESS,
173 SyntheticGestureParams::TOUCH_INPUT);
174 param1.set_index(1);
175 param1.set_position(gfx::PointF(79, 132));
176 params_.PushPointerActionParams(1, param0);
177 params_.PushPointerActionParams(1, param1);
178
179 // Send a touch move for the second finger.
180 param1.set_pointer_action_type(
181 SyntheticPointerActionParams::PointerActionType::MOVE);
182 param1.set_position(gfx::PointF(87, 253));
183 params_.PushPointerActionParams(2, param1);
184
185 // Send touch releases for both fingers.
186 param0.set_pointer_action_type(
187 SyntheticPointerActionParams::PointerActionType::RELEASE);
188 param1.set_pointer_action_type(
189 SyntheticPointerActionParams::PointerActionType::RELEASE);
190 params_.PushPointerActionParams(3, param0);
191 params_.PushPointerActionParams(3, param1);
192 pointer_action_.reset(new SyntheticPointerAction(params_));
193
166 ForwardSyntheticPointerAction(); 194 ForwardSyntheticPointerAction();
167
168 MockSyntheticPointerTouchActionTarget* pointer_touch_target = 195 MockSyntheticPointerTouchActionTarget* pointer_touch_target =
169 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); 196 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
170 EXPECT_EQ(1, num_success_); 197 EXPECT_EQ(1, num_success_);
171 EXPECT_EQ(0, num_failure_); 198 EXPECT_EQ(0, num_failure_);
172 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 199 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
173 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 200 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
174 EXPECT_EQ(action_param_list_->at(0).index(), 0);
175 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89)); 201 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89));
176 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed); 202 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed);
177 ASSERT_EQ(pointer_touch_target->touch_length(), 1U); 203 EXPECT_EQ(pointer_touch_target->touch_length(), 1U);
178 204
179 // Send a touch move for the first finger and a touch press for the second
180 // finger.
181 action_param_list_->at(0).set_pointer_action_type(
182 SyntheticPointerActionParams::PointerActionType::MOVE);
183 action_param_list_->at(0).set_position(gfx::PointF(133, 156));
184 SyntheticPointerActionParams params1 = SyntheticPointerActionParams(
185 SyntheticPointerActionParams::PointerActionType::PRESS,
186 SyntheticGestureParams::TOUCH_INPUT);
187 params1.set_position(gfx::PointF(79, 132));
188 action_param_list_->push_back(params1);
189 ForwardSyntheticPointerAction(); 205 ForwardSyntheticPointerAction();
190
191 EXPECT_EQ(2, num_success_); 206 EXPECT_EQ(2, num_success_);
192 EXPECT_EQ(0, num_failure_); 207 EXPECT_EQ(0, num_failure_);
193 // The type of the SyntheticWebTouchEvent is the action of the last finger. 208 // The type of the SyntheticWebTouchEvent is the action of the last finger.
194 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 209 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
195 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 210 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
196 EXPECT_EQ(action_param_list_->at(0).index(), 0);
197 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(133, 156)); 211 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(133, 156));
198 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StateMoved); 212 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StateMoved);
199 EXPECT_EQ(pointer_touch_target->indexes(1), 1); 213 EXPECT_EQ(pointer_touch_target->indexes(1), 1);
200 EXPECT_EQ(action_param_list_->at(1).index(), 1);
201 EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(79, 132)); 214 EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(79, 132));
202 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StatePressed); 215 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StatePressed);
203 ASSERT_EQ(pointer_touch_target->touch_length(), 2U); 216 EXPECT_EQ(pointer_touch_target->touch_length(), 2U);
204 217
205 // Send a touch move for the second finger.
206 action_param_list_->at(1).set_pointer_action_type(
207 SyntheticPointerActionParams::PointerActionType::MOVE);
208 action_param_list_->at(1).set_position(gfx::PointF(87, 253));
209 ForwardSyntheticPointerAction(); 218 ForwardSyntheticPointerAction();
210
211 EXPECT_EQ(3, num_success_); 219 EXPECT_EQ(3, num_success_);
212 EXPECT_EQ(0, num_failure_); 220 EXPECT_EQ(0, num_failure_);
213 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove); 221 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove);
214 EXPECT_EQ(pointer_touch_target->indexes(1), 1); 222 EXPECT_EQ(pointer_touch_target->indexes(1), 1);
215 EXPECT_EQ(action_param_list_->at(1).index(), 1);
216 EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(87, 253)); 223 EXPECT_EQ(pointer_touch_target->positions(1), gfx::PointF(87, 253));
217 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateMoved); 224 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateMoved);
218 ASSERT_EQ(pointer_touch_target->touch_length(), 2U); 225 EXPECT_EQ(pointer_touch_target->touch_length(), 2U);
219 226
220 // Send touch releases for both fingers.
221 action_param_list_->at(0).set_pointer_action_type(
222 SyntheticPointerActionParams::PointerActionType::RELEASE);
223 action_param_list_->at(1).set_pointer_action_type(
224 SyntheticPointerActionParams::PointerActionType::RELEASE);
225 ForwardSyntheticPointerAction(); 227 ForwardSyntheticPointerAction();
226
227 EXPECT_EQ(4, num_success_); 228 EXPECT_EQ(4, num_success_);
228 EXPECT_EQ(0, num_failure_); 229 EXPECT_EQ(0, num_failure_);
229 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); 230 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd);
230 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 231 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
231 EXPECT_EQ(action_param_list_->at(0).index(), -1);
232 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StateReleased); 232 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StateReleased);
233 EXPECT_EQ(pointer_touch_target->indexes(1), 1); 233 EXPECT_EQ(pointer_touch_target->indexes(1), 1);
234 EXPECT_EQ(action_param_list_->at(1).index(), -1);
235 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateReleased); 234 EXPECT_EQ(pointer_touch_target->states(1), WebTouchPoint::StateReleased);
236 ASSERT_EQ(pointer_touch_target->touch_length(), 2U); 235 EXPECT_EQ(pointer_touch_target->touch_length(), 2U);
237 } 236 }
238 237
239 TEST_F(SyntheticPointerActionTest, PointerTouchActionWithIdle) { 238 TEST_F(SyntheticPointerActionTest, PointerTouchActionsMultiRelease) {
240 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); 239 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
241 int count_success = 1; 240 int count_success = 1;
241 int count = 0;
242 // Send a touch press for one finger. 242 // Send a touch press for one finger.
243 SyntheticPointerActionParams params0 = SyntheticPointerActionParams( 243 SyntheticPointerActionParams param0 = SyntheticPointerActionParams(
244 SyntheticPointerActionParams::PointerActionType::PRESS, 244 SyntheticPointerActionParams::PointerActionType::PRESS,
245 SyntheticGestureParams::TOUCH_INPUT); 245 SyntheticGestureParams::TOUCH_INPUT);
246 params0.set_position(gfx::PointF(54, 89)); 246 param0.set_index(0);
247 action_param_list_->push_back(params0); 247 param0.set_position(gfx::PointF(54, 89));
248 params_.PushPointerActionParams(count++, param0);
249
250 SyntheticPointerActionParams param1;
251 param1.set_index(1);
252 param1.set_gesture_source_type(SyntheticGestureParams::TOUCH_INPUT);
253 for (int i = 0; i < 3; ++i) {
254 // Send a touch press for the second finger and not move the first finger.
255 param1.set_pointer_action_type(
256 SyntheticPointerActionParams::PointerActionType::PRESS);
257 param1.set_position(gfx::PointF(123, 69));
258 params_.PushPointerActionParams(count++, param1);
259
260 // Send a touch release for the second finger and not move the first finger.
261 param1.set_pointer_action_type(
262 SyntheticPointerActionParams::PointerActionType::RELEASE);
263 params_.PushPointerActionParams(count++, param1);
264 }
265 pointer_action_.reset(new SyntheticPointerAction(params_));
266
248 ForwardSyntheticPointerAction(); 267 ForwardSyntheticPointerAction();
249
250 MockSyntheticPointerTouchActionTarget* pointer_touch_target = 268 MockSyntheticPointerTouchActionTarget* pointer_touch_target =
251 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); 269 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
252 EXPECT_EQ(count_success++, num_success_); 270 EXPECT_EQ(count_success++, num_success_);
253 EXPECT_EQ(0, num_failure_); 271 EXPECT_EQ(0, num_failure_);
254 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 272 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
255 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 273 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
256 EXPECT_EQ(action_param_list_->at(0).index(), 0);
257 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89)); 274 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89));
258 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed); 275 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed);
259 ASSERT_EQ(pointer_touch_target->touch_length(), 1U); 276 EXPECT_EQ(pointer_touch_target->touch_length(), 1U);
260 277
261 SyntheticPointerActionParams params1; 278 for (int index = 1; index < 4; ++index) {
262 params1.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
263 action_param_list_->push_back(params1);
264 for (int i = 0; i < 3; ++i) {
265 // Send a touch press for the second finger and not move the first finger.
266 action_param_list_->at(0).set_pointer_action_type(
267 SyntheticPointerActionParams::PointerActionType::IDLE);
268 action_param_list_->at(1).set_pointer_action_type(
269 SyntheticPointerActionParams::PointerActionType::PRESS);
270 action_param_list_->at(1).set_position(gfx::PointF(123, 69));
271 int index = 1 + i;
272 ForwardSyntheticPointerAction(); 279 ForwardSyntheticPointerAction();
273
274 EXPECT_EQ(count_success++, num_success_); 280 EXPECT_EQ(count_success++, num_success_);
275 EXPECT_EQ(0, num_failure_); 281 EXPECT_EQ(0, num_failure_);
276 // The type of the SyntheticWebTouchEvent is the action of the last finger. 282 // The type of the SyntheticWebTouchEvent is the action of the last finger.
277 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 283 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
278 EXPECT_EQ(pointer_touch_target->indexes(index), index); 284 EXPECT_EQ(pointer_touch_target->indexes(index), index);
279 EXPECT_EQ(action_param_list_->at(1).index(), index);
280 EXPECT_EQ(pointer_touch_target->positions(index), gfx::PointF(123, 69)); 285 EXPECT_EQ(pointer_touch_target->positions(index), gfx::PointF(123, 69));
281 EXPECT_EQ(pointer_touch_target->states(index), WebTouchPoint::StatePressed); 286 EXPECT_EQ(pointer_touch_target->states(index), WebTouchPoint::StatePressed);
282 ASSERT_EQ(pointer_touch_target->touch_length(), index + 1U); 287 EXPECT_EQ(pointer_touch_target->touch_length(), index + 1U);
283
284 // Send a touch release for the second finger and not move the first finger.
285 action_param_list_->at(0).set_pointer_action_type(
286 SyntheticPointerActionParams::PointerActionType::IDLE);
287 action_param_list_->at(1).set_pointer_action_type(
288 SyntheticPointerActionParams::PointerActionType::RELEASE);
289 288
290 ForwardSyntheticPointerAction(); 289 ForwardSyntheticPointerAction();
291
292 EXPECT_EQ(count_success++, num_success_); 290 EXPECT_EQ(count_success++, num_success_);
293 EXPECT_EQ(0, num_failure_); 291 EXPECT_EQ(0, num_failure_);
294 // The type of the SyntheticWebTouchEvent is the action of the last finger. 292 // The type of the SyntheticWebTouchEvent is the action of the last finger.
295 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); 293 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd);
296 EXPECT_EQ(pointer_touch_target->indexes(index), index); 294 EXPECT_EQ(pointer_touch_target->indexes(index), index);
297 EXPECT_EQ(action_param_list_->at(1).index(), -1);
298 EXPECT_EQ(pointer_touch_target->states(index), 295 EXPECT_EQ(pointer_touch_target->states(index),
299 WebTouchPoint::StateReleased); 296 WebTouchPoint::StateReleased);
300 ASSERT_EQ(pointer_touch_target->touch_length(), index + 1U); 297 EXPECT_EQ(pointer_touch_target->touch_length(), index + 1U);
301 } 298 }
302 } 299 }
303 300
304 TEST_F(SyntheticPointerActionTest, PointerTouchActionSourceTypeInvalid) { 301 TEST_F(SyntheticPointerActionTest, PointerTouchActionSourceTypeInvalid) {
305 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); 302 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
306 303
307 // Users' gesture source type does not match with the touch action. 304 // Users' gesture source type does not match with the touch action.
308 SyntheticPointerActionParams params = SyntheticPointerActionParams( 305 SyntheticPointerActionParams param = SyntheticPointerActionParams(
309 SyntheticPointerActionParams::PointerActionType::PRESS, 306 SyntheticPointerActionParams::PointerActionType::PRESS,
310 SyntheticGestureParams::MOUSE_INPUT); 307 SyntheticGestureParams::MOUSE_INPUT);
311 params.set_position(gfx::PointF(54, 89)); 308 param.set_index(0);
312 action_param_list_->push_back(params); 309 param.set_position(gfx::PointF(54, 89));
310 params_.PushPointerActionParams(param);
311 pointer_action_.reset(new SyntheticPointerAction(params_));
312
313 ForwardSyntheticPointerAction(); 313 ForwardSyntheticPointerAction();
314
315 EXPECT_EQ(0, num_success_); 314 EXPECT_EQ(0, num_success_);
316 EXPECT_EQ(1, num_failure_); 315 EXPECT_EQ(1, num_failure_);
317 316
318 params = SyntheticPointerActionParams( 317 param.set_gesture_source_type(SyntheticGestureParams::TOUCH_INPUT);
319 SyntheticPointerActionParams::PointerActionType::PRESS, 318 param.set_index(0);
320 SyntheticGestureParams::TOUCH_INPUT); 319 param.set_position(gfx::PointF(54, 89));
321 params.set_position(gfx::PointF(54, 89)); 320 params_ = SyntheticPointerActionListParams();
322 action_param_list_->at(0) = params; 321 params_.PushPointerActionParams(param);
322 pointer_action_.reset(new SyntheticPointerAction(params_));
323
323 ForwardSyntheticPointerAction(); 324 ForwardSyntheticPointerAction();
324
325 MockSyntheticPointerTouchActionTarget* pointer_touch_target = 325 MockSyntheticPointerTouchActionTarget* pointer_touch_target =
326 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); 326 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
327 EXPECT_EQ(1, num_success_); 327 EXPECT_EQ(1, num_success_);
328 EXPECT_EQ(1, num_failure_); 328 EXPECT_EQ(1, num_failure_);
329 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 329 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
330 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 330 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
331 EXPECT_EQ(action_param_list_->at(0).index(), 0);
332 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89)); 331 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89));
333 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed); 332 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed);
334 ASSERT_EQ(pointer_touch_target->touch_length(), 1U); 333 EXPECT_EQ(pointer_touch_target->touch_length(), 1U);
335 } 334 }
336 335
337 TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) { 336 TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) {
338 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); 337 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>();
339 338
340 // Cannot send a touch move or touch release without sending a touch press 339 // Cannot send a touch move or touch release without sending a touch press
341 // first. 340 // first.
342 SyntheticPointerActionParams params = SyntheticPointerActionParams( 341 SyntheticPointerActionParams param = SyntheticPointerActionParams(
343 SyntheticPointerActionParams::PointerActionType::MOVE, 342 SyntheticPointerActionParams::PointerActionType::MOVE,
344 SyntheticGestureParams::TOUCH_INPUT); 343 SyntheticGestureParams::TOUCH_INPUT);
345 params.set_position(gfx::PointF(54, 89)); 344 param.set_index(0);
346 action_param_list_->push_back(params); 345 param.set_position(gfx::PointF(54, 89));
346 params_.PushPointerActionParams(param);
347 pointer_action_.reset(new SyntheticPointerAction(params_));
348
347 ForwardSyntheticPointerAction(); 349 ForwardSyntheticPointerAction();
348
349 EXPECT_EQ(0, num_success_); 350 EXPECT_EQ(0, num_success_);
350 EXPECT_EQ(1, num_failure_); 351 EXPECT_EQ(1, num_failure_);
351 352
352 action_param_list_->at(0).set_pointer_action_type( 353 param.set_pointer_action_type(
353 SyntheticPointerActionParams::PointerActionType::RELEASE); 354 SyntheticPointerActionParams::PointerActionType::RELEASE);
355 params_ = SyntheticPointerActionListParams();
356 params_.PushPointerActionParams(param);
357 pointer_action_.reset(new SyntheticPointerAction(params_));
358
354 ForwardSyntheticPointerAction(); 359 ForwardSyntheticPointerAction();
355
356 EXPECT_EQ(0, num_success_); 360 EXPECT_EQ(0, num_success_);
357 EXPECT_EQ(2, num_failure_); 361 EXPECT_EQ(2, num_failure_);
358 362
359 // Send a touch press for one finger. 363 // Send a touch press for one finger.
360 action_param_list_->at(0).set_pointer_action_type( 364 param.set_pointer_action_type(
361 SyntheticPointerActionParams::PointerActionType::PRESS); 365 SyntheticPointerActionParams::PointerActionType::PRESS);
366 params_ = SyntheticPointerActionListParams();
367 params_.PushPointerActionParams(param);
368 params_.PushPointerActionParams(param);
369 pointer_action_.reset(new SyntheticPointerAction(params_));
370
362 ForwardSyntheticPointerAction(); 371 ForwardSyntheticPointerAction();
363
364 MockSyntheticPointerTouchActionTarget* pointer_touch_target = 372 MockSyntheticPointerTouchActionTarget* pointer_touch_target =
365 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); 373 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get());
366 EXPECT_EQ(1, num_success_); 374 EXPECT_EQ(1, num_success_);
367 EXPECT_EQ(2, num_failure_); 375 EXPECT_EQ(2, num_failure_);
368 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); 376 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart);
369 EXPECT_EQ(pointer_touch_target->indexes(0), 0); 377 EXPECT_EQ(pointer_touch_target->indexes(0), 0);
370 EXPECT_EQ(action_param_list_->at(0).index(), 0);
371 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89)); 378 EXPECT_EQ(pointer_touch_target->positions(0), gfx::PointF(54, 89));
372 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed); 379 EXPECT_EQ(pointer_touch_target->states(0), WebTouchPoint::StatePressed);
373 ASSERT_EQ(pointer_touch_target->touch_length(), 1U); 380 EXPECT_EQ(pointer_touch_target->touch_length(), 1U);
374 381
375 // Cannot send a touch press again without releasing the finger. 382 // Cannot send a touch press again without releasing the finger.
376 action_param_list_->at(0).gesture_source_type =
377 SyntheticGestureParams::TOUCH_INPUT;
378 action_param_list_->at(0).set_pointer_action_type(
379 SyntheticPointerActionParams::PointerActionType::PRESS);
380 ForwardSyntheticPointerAction(); 383 ForwardSyntheticPointerAction();
381
382 EXPECT_EQ(1, num_success_); 384 EXPECT_EQ(1, num_success_);
383 EXPECT_EQ(3, num_failure_); 385 EXPECT_EQ(3, num_failure_);
384 } 386 }
385 387
386 TEST_F(SyntheticPointerActionTest, PointerMouseAction) { 388 TEST_F(SyntheticPointerActionTest, PointerMouseAction) {
387 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); 389 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
388 390
389 // Send a mouse move. 391 // Send a mouse move.
390 SyntheticPointerActionParams params = SyntheticPointerActionParams( 392 SyntheticPointerActionParams param = SyntheticPointerActionParams(
391 SyntheticPointerActionParams::PointerActionType::MOVE, 393 SyntheticPointerActionParams::PointerActionType::MOVE,
392 SyntheticGestureParams::MOUSE_INPUT); 394 SyntheticGestureParams::MOUSE_INPUT);
393 params.set_position(gfx::PointF(189, 62)); 395 param.set_position(gfx::PointF(189, 62));
394 action_param_list_->push_back(params); 396 params_.PushPointerActionParams(param);
397
398 // Send a mouse down.
399 param.set_pointer_action_type(
400 SyntheticPointerActionParams::PointerActionType::PRESS);
401 params_.PushPointerActionParams(param);
402
403 // Send a mouse drag.
404 param.set_position(gfx::PointF(326, 298));
405 param.set_pointer_action_type(
406 SyntheticPointerActionParams::PointerActionType::MOVE);
407 params_.PushPointerActionParams(param);
408
409 // Send a mouse up.
410 param.set_pointer_action_type(
411 SyntheticPointerActionParams::PointerActionType::RELEASE);
412 params_.PushPointerActionParams(param);
413 pointer_action_.reset(new SyntheticPointerAction(params_));
414
395 ForwardSyntheticPointerAction(); 415 ForwardSyntheticPointerAction();
396
397 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = 416 MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
398 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); 417 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
399 EXPECT_EQ(1, num_success_); 418 EXPECT_EQ(1, num_success_);
400 EXPECT_EQ(0, num_failure_); 419 EXPECT_EQ(0, num_failure_);
401 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove); 420 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
402 EXPECT_EQ(pointer_mouse_target->position(), params.position()); 421 EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(189, 62));
403 EXPECT_EQ(pointer_mouse_target->clickCount(), 0); 422 EXPECT_EQ(pointer_mouse_target->clickCount(), 0);
404 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::NoButton); 423 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::NoButton);
405 424
406 // Send a mouse down.
407 action_param_list_->at(0).set_position(gfx::PointF(189, 62));
408 action_param_list_->at(0).set_pointer_action_type(
409 SyntheticPointerActionParams::PointerActionType::PRESS);
410 ForwardSyntheticPointerAction(); 425 ForwardSyntheticPointerAction();
411
412 EXPECT_EQ(2, num_success_); 426 EXPECT_EQ(2, num_success_);
413 EXPECT_EQ(0, num_failure_); 427 EXPECT_EQ(0, num_failure_);
414 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown); 428 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
415 EXPECT_EQ(pointer_mouse_target->position(), params.position()); 429 EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(189, 62));
416 EXPECT_EQ(pointer_mouse_target->clickCount(), 1); 430 EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
417 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); 431 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left);
418 432
419 // Send a mouse drag.
420 action_param_list_->at(0).set_position(gfx::PointF(326, 298));
421 action_param_list_->at(0).set_pointer_action_type(
422 SyntheticPointerActionParams::PointerActionType::MOVE);
423 ForwardSyntheticPointerAction(); 433 ForwardSyntheticPointerAction();
424
425 EXPECT_EQ(3, num_success_); 434 EXPECT_EQ(3, num_success_);
426 EXPECT_EQ(0, num_failure_); 435 EXPECT_EQ(0, num_failure_);
427 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove); 436 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
428 EXPECT_EQ(pointer_mouse_target->position(), 437 EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(326, 298));
429 action_param_list_->at(0).position());
430 EXPECT_EQ(pointer_mouse_target->clickCount(), 1); 438 EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
431 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); 439 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left);
432 440
433 // Send a mouse up.
434 action_param_list_->at(0).set_pointer_action_type(
435 SyntheticPointerActionParams::PointerActionType::RELEASE);
436 ForwardSyntheticPointerAction(); 441 ForwardSyntheticPointerAction();
437
438 EXPECT_EQ(4, num_success_); 442 EXPECT_EQ(4, num_success_);
439 EXPECT_EQ(0, num_failure_); 443 EXPECT_EQ(0, num_failure_);
440 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseUp); 444 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseUp);
441 EXPECT_EQ(pointer_mouse_target->clickCount(), 1); 445 EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
442 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); 446 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left);
443 } 447 }
444 448
445 TEST_F(SyntheticPointerActionTest, PointerMouseActionSourceTypeInvalid) { 449 TEST_F(SyntheticPointerActionTest, PointerMouseActionSourceTypeInvalid) {
446 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); 450 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
447 451
448 // Users' gesture source type does not match with the mouse action. 452 // Users' gesture source type does not match with the mouse action.
449 SyntheticPointerActionParams params = SyntheticPointerActionParams( 453 SyntheticPointerActionParams param = SyntheticPointerActionParams(
450 SyntheticPointerActionParams::PointerActionType::PRESS, 454 SyntheticPointerActionParams::PointerActionType::PRESS,
451 SyntheticGestureParams::TOUCH_INPUT); 455 SyntheticGestureParams::TOUCH_INPUT);
452 params.set_position(gfx::PointF(54, 89)); 456 param.set_position(gfx::PointF(54, 89));
453 action_param_list_->push_back(params); 457 params_.PushPointerActionParams(param);
458 pointer_action_.reset(new SyntheticPointerAction(params_));
459
454 ForwardSyntheticPointerAction(); 460 ForwardSyntheticPointerAction();
455
456 EXPECT_EQ(0, num_success_); 461 EXPECT_EQ(0, num_success_);
457 EXPECT_EQ(1, num_failure_); 462 EXPECT_EQ(1, num_failure_);
458 463
459 params = SyntheticPointerActionParams( 464 param.set_gesture_source_type(SyntheticGestureParams::MOUSE_INPUT);
460 SyntheticPointerActionParams::PointerActionType::PRESS, 465 param.set_position(gfx::PointF(54, 89));
461 SyntheticGestureParams::MOUSE_INPUT); 466 params_ = SyntheticPointerActionListParams();
462 params.set_position(gfx::PointF(54, 89)); 467 params_.PushPointerActionParams(param);
463 action_param_list_->at(0) = params; 468 pointer_action_.reset(new SyntheticPointerAction(params_));
469
464 ForwardSyntheticPointerAction(); 470 ForwardSyntheticPointerAction();
465
466 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = 471 MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
467 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); 472 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
468 EXPECT_EQ(1, num_success_); 473 EXPECT_EQ(1, num_success_);
469 EXPECT_EQ(1, num_failure_); 474 EXPECT_EQ(1, num_failure_);
470 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown); 475 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
471 EXPECT_EQ(pointer_mouse_target->position(), params.position()); 476 EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(54, 89));
472 EXPECT_EQ(pointer_mouse_target->clickCount(), 1); 477 EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
473 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); 478 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left);
474 } 479 }
475 480
476 TEST_F(SyntheticPointerActionTest, PointerMouseActionTypeInvalid) { 481 TEST_F(SyntheticPointerActionTest, PointerMouseActionTypeInvalid) {
477 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); 482 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>();
478 483
479 // Send a mouse move. 484 // Cannot send a mouse up without sending a mouse down first.
480 SyntheticPointerActionParams params = SyntheticPointerActionParams( 485 SyntheticPointerActionParams param = SyntheticPointerActionParams(
481 SyntheticPointerActionParams::PointerActionType::MOVE, 486 SyntheticPointerActionParams::PointerActionType::RELEASE,
482 SyntheticGestureParams::MOUSE_INPUT); 487 SyntheticGestureParams::MOUSE_INPUT);
483 params.set_position(gfx::PointF(189, 62)); 488 params_.PushPointerActionParams(param);
484 action_param_list_->push_back(params); 489 pointer_action_.reset(new SyntheticPointerAction(params_));
490
485 ForwardSyntheticPointerAction(); 491 ForwardSyntheticPointerAction();
492 EXPECT_EQ(0, num_success_);
493 EXPECT_EQ(1, num_failure_);
486 494
495 // Send a mouse down for one finger.
496 param.set_pointer_action_type(
497 SyntheticPointerActionParams::PointerActionType::PRESS);
498 param.set_position(gfx::PointF(54, 89));
499 params_ = SyntheticPointerActionListParams();
500 params_.PushPointerActionParams(param);
501
502 // Cannot send a mouse down again without releasing the mouse button.
503 params_.PushPointerActionParams(param);
504 pointer_action_.reset(new SyntheticPointerAction(params_));
505
506 ForwardSyntheticPointerAction();
487 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = 507 MockSyntheticPointerMouseActionTarget* pointer_mouse_target =
488 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); 508 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get());
489 EXPECT_EQ(1, num_success_); 509 EXPECT_EQ(1, num_success_);
490 EXPECT_EQ(0, num_failure_);
491 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseMove);
492 EXPECT_EQ(pointer_mouse_target->position(), params.position());
493 EXPECT_EQ(pointer_mouse_target->clickCount(), 0);
494 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::NoButton);
495
496 // Cannot send a mouse up without sending a mouse down first.
497 action_param_list_->at(0).set_pointer_action_type(
498 SyntheticPointerActionParams::PointerActionType::RELEASE);
499 ForwardSyntheticPointerAction();
500
501 EXPECT_EQ(1, num_success_);
502 EXPECT_EQ(1, num_failure_);
503
504 // Send a mouse down for one finger.
505 action_param_list_->at(0).set_pointer_action_type(
506 SyntheticPointerActionParams::PointerActionType::PRESS);
507 ForwardSyntheticPointerAction();
508
509 EXPECT_EQ(2, num_success_);
510 EXPECT_EQ(1, num_failure_); 510 EXPECT_EQ(1, num_failure_);
511 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown); 511 EXPECT_EQ(pointer_mouse_target->type(), WebInputEvent::MouseDown);
512 EXPECT_EQ(pointer_mouse_target->position(), params.position()); 512 EXPECT_EQ(pointer_mouse_target->position(), gfx::PointF(54, 89));
513 EXPECT_EQ(pointer_mouse_target->clickCount(), 1); 513 EXPECT_EQ(pointer_mouse_target->clickCount(), 1);
514 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left); 514 EXPECT_EQ(pointer_mouse_target->button(), WebMouseEvent::Button::Left);
515 515
516 // Cannot send a mouse down again without releasing the mouse button.
517 action_param_list_->at(0).set_pointer_action_type(
518 SyntheticPointerActionParams::PointerActionType::PRESS);
519 ForwardSyntheticPointerAction(); 516 ForwardSyntheticPointerAction();
520 517 EXPECT_EQ(1, num_success_);
521 EXPECT_EQ(2, num_success_);
522 EXPECT_EQ(2, num_failure_); 518 EXPECT_EQ(2, num_failure_);
523 } 519 }
524 520
525 } // namespace 521 } // namespace
526 522
527 } // namespace content 523 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698