OLD | NEW |
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 15 matching lines...) Expand all Loading... |
26 SyntheticPointerActionParams::PointerActionType action_type) { | 26 SyntheticPointerActionParams::PointerActionType action_type) { |
27 switch (action_type) { | 27 switch (action_type) { |
28 case SyntheticPointerActionParams::PointerActionType::PRESS: | 28 case SyntheticPointerActionParams::PointerActionType::PRESS: |
29 return WebTouchPoint::StatePressed; | 29 return WebTouchPoint::StatePressed; |
30 case SyntheticPointerActionParams::PointerActionType::MOVE: | 30 case SyntheticPointerActionParams::PointerActionType::MOVE: |
31 return WebTouchPoint::StateMoved; | 31 return WebTouchPoint::StateMoved; |
32 case SyntheticPointerActionParams::PointerActionType::RELEASE: | 32 case SyntheticPointerActionParams::PointerActionType::RELEASE: |
33 return WebTouchPoint::StateReleased; | 33 return WebTouchPoint::StateReleased; |
34 case SyntheticPointerActionParams::PointerActionType::IDLE: | 34 case SyntheticPointerActionParams::PointerActionType::IDLE: |
35 return WebTouchPoint::StateStationary; | 35 return WebTouchPoint::StateStationary; |
36 case SyntheticPointerActionParams::PointerActionType::FINISH: | |
37 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: | 36 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: |
38 NOTREACHED() | 37 NOTREACHED() |
39 << "Invalid SyntheticPointerActionParams::PointerActionType."; | 38 << "Invalid SyntheticPointerActionParams::PointerActionType."; |
40 return WebTouchPoint::StateUndefined; | 39 return WebTouchPoint::StateUndefined; |
41 } | 40 } |
42 NOTREACHED() << "Invalid SyntheticPointerActionParams::PointerActionType."; | 41 NOTREACHED() << "Invalid SyntheticPointerActionParams::PointerActionType."; |
43 return WebTouchPoint::StateUndefined; | 42 return WebTouchPoint::StateUndefined; |
44 } | 43 } |
45 | 44 |
46 WebInputEvent::Type ToWebMouseEventType( | 45 WebInputEvent::Type ToWebMouseEventType( |
47 SyntheticPointerActionParams::PointerActionType action_type) { | 46 SyntheticPointerActionParams::PointerActionType action_type) { |
48 switch (action_type) { | 47 switch (action_type) { |
49 case SyntheticPointerActionParams::PointerActionType::PRESS: | 48 case SyntheticPointerActionParams::PointerActionType::PRESS: |
50 return WebInputEvent::MouseDown; | 49 return WebInputEvent::MouseDown; |
51 case SyntheticPointerActionParams::PointerActionType::MOVE: | 50 case SyntheticPointerActionParams::PointerActionType::MOVE: |
52 return WebInputEvent::MouseMove; | 51 return WebInputEvent::MouseMove; |
53 case SyntheticPointerActionParams::PointerActionType::RELEASE: | 52 case SyntheticPointerActionParams::PointerActionType::RELEASE: |
54 return WebInputEvent::MouseUp; | 53 return WebInputEvent::MouseUp; |
55 case SyntheticPointerActionParams::PointerActionType::IDLE: | 54 case SyntheticPointerActionParams::PointerActionType::IDLE: |
56 case SyntheticPointerActionParams::PointerActionType::FINISH: | |
57 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: | 55 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: |
58 NOTREACHED() | 56 NOTREACHED() |
59 << "Invalid SyntheticPointerActionParams::PointerActionType."; | 57 << "Invalid SyntheticPointerActionParams::PointerActionType."; |
60 return WebInputEvent::Undefined; | 58 return WebInputEvent::Undefined; |
61 } | 59 } |
62 NOTREACHED() << "Invalid SyntheticPointerActionParams::PointerActionType."; | 60 NOTREACHED() << "Invalid SyntheticPointerActionParams::PointerActionType."; |
63 return WebInputEvent::Undefined; | 61 return WebInputEvent::Undefined; |
64 } | 62 } |
65 | 63 |
66 class MockSyntheticPointerActionTarget : public SyntheticGestureTarget { | 64 class MockSyntheticPointerActionTarget : public SyntheticGestureTarget { |
(...skipping 28 matching lines...) Expand all Loading... |
95 class MockSyntheticPointerTouchActionTarget | 93 class MockSyntheticPointerTouchActionTarget |
96 : public MockSyntheticPointerActionTarget { | 94 : public MockSyntheticPointerActionTarget { |
97 public: | 95 public: |
98 MockSyntheticPointerTouchActionTarget() {} | 96 MockSyntheticPointerTouchActionTarget() {} |
99 ~MockSyntheticPointerTouchActionTarget() override {} | 97 ~MockSyntheticPointerTouchActionTarget() override {} |
100 | 98 |
101 void DispatchInputEventToPlatform(const WebInputEvent& event) override { | 99 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
102 DCHECK(WebInputEvent::isTouchEventType(event.type)); | 100 DCHECK(WebInputEvent::isTouchEventType(event.type)); |
103 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); | 101 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); |
104 type_ = touch_event.type; | 102 type_ = touch_event.type; |
105 for (size_t i = 0; i < touch_event.touchesLength; ++i) { | 103 for (size_t i = 0; i < WebTouchEvent::kTouchesLengthCap; ++i) { |
106 indexes_[i] = touch_event.touches[i].id; | 104 indexes_[i] = touch_event.touches[i].id; |
107 positions_[i] = gfx::PointF(touch_event.touches[i].position); | 105 positions_[i] = gfx::PointF(touch_event.touches[i].position); |
108 states_[i] = touch_event.touches[i].state; | 106 states_[i] = touch_event.touches[i].state; |
109 } | 107 } |
110 touch_length_ = touch_event.touchesLength; | 108 touch_length_ = touch_event.touchesLength; |
111 } | 109 } |
112 | 110 |
113 testing::AssertionResult SyntheticTouchActionDispatchedCorrectly( | 111 testing::AssertionResult SyntheticTouchActionDispatchedCorrectly( |
114 const SyntheticPointerActionParams& param, | 112 const SyntheticPointerActionParams& param, |
115 int index) { | 113 int index) { |
(...skipping 27 matching lines...) Expand all Loading... |
143 testing::AssertionResult SyntheticTouchActionListDispatchedCorrectly( | 141 testing::AssertionResult SyntheticTouchActionListDispatchedCorrectly( |
144 const std::vector<SyntheticPointerActionParams>& params_list) { | 142 const std::vector<SyntheticPointerActionParams>& params_list) { |
145 if (touch_length_ != params_list.size()) { | 143 if (touch_length_ != params_list.size()) { |
146 return testing::AssertionFailure() << "Touch point length was " | 144 return testing::AssertionFailure() << "Touch point length was " |
147 << touch_length_ << ", expected " | 145 << touch_length_ << ", expected " |
148 << params_list.size() << "."; | 146 << params_list.size() << "."; |
149 } | 147 } |
150 | 148 |
151 testing::AssertionResult result = testing::AssertionSuccess(); | 149 testing::AssertionResult result = testing::AssertionSuccess(); |
152 for (size_t i = 0; i < params_list.size(); ++i) { | 150 for (size_t i = 0; i < params_list.size(); ++i) { |
153 result = SyntheticTouchActionDispatchedCorrectly(params_list[i], i); | 151 result = SyntheticTouchActionDispatchedCorrectly(params_list[i], |
| 152 params_list[i].index()); |
154 if (result == testing::AssertionFailure()) | 153 if (result == testing::AssertionFailure()) |
155 return result; | 154 return result; |
156 } | 155 } |
157 return testing::AssertionSuccess(); | 156 return testing::AssertionSuccess(); |
158 } | 157 } |
159 | 158 |
160 SyntheticGestureParams::GestureSourceType | 159 SyntheticGestureParams::GestureSourceType |
161 GetDefaultSyntheticGestureSourceType() const override { | 160 GetDefaultSyntheticGestureSourceType() const override { |
162 return SyntheticGestureParams::TOUCH_INPUT; | 161 return SyntheticGestureParams::TOUCH_INPUT; |
163 } | 162 } |
(...skipping 16 matching lines...) Expand all Loading... |
180 const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); | 179 const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); |
181 type_ = mouse_event.type; | 180 type_ = mouse_event.type; |
182 position_ = gfx::PointF(mouse_event.x, mouse_event.y); | 181 position_ = gfx::PointF(mouse_event.x, mouse_event.y); |
183 clickCount_ = mouse_event.clickCount; | 182 clickCount_ = mouse_event.clickCount; |
184 button_ = mouse_event.button; | 183 button_ = mouse_event.button; |
185 } | 184 } |
186 | 185 |
187 testing::AssertionResult SyntheticMouseActionDispatchedCorrectly( | 186 testing::AssertionResult SyntheticMouseActionDispatchedCorrectly( |
188 const SyntheticPointerActionParams& param, | 187 const SyntheticPointerActionParams& param, |
189 int click_count) { | 188 int click_count) { |
190 if (type() != ToWebMouseEventType(param.pointer_action_type())) { | 189 if (type_ != ToWebMouseEventType(param.pointer_action_type())) { |
191 return testing::AssertionFailure() | 190 return testing::AssertionFailure() |
192 << "Pointer type was " << WebInputEvent::GetName(type()) | 191 << "Pointer type was " << WebInputEvent::GetName(type_) |
193 << ", expected " << WebInputEvent::GetName(ToWebMouseEventType( | 192 << ", expected " << WebInputEvent::GetName(ToWebMouseEventType( |
194 param.pointer_action_type())) | 193 param.pointer_action_type())) << "."; |
195 << "."; | |
196 } | 194 } |
197 | 195 |
198 if (clickCount() != click_count) { | 196 if (clickCount_ != click_count) { |
199 return testing::AssertionFailure() << "Pointer click count was " | 197 return testing::AssertionFailure() << "Pointer click count was " |
200 << clickCount() << ", expected " | 198 << clickCount_ << ", expected " |
201 << click_count << "."; | 199 << click_count << "."; |
202 } | 200 } |
203 | 201 |
204 if (clickCount() == 1 && button() != WebMouseEvent::Button::Left) { | 202 if (clickCount_ == 1 && button_ != WebMouseEvent::Button::Left) { |
205 return testing::AssertionFailure() | 203 return testing::AssertionFailure() |
206 << "Pointer button was " << (int)button() << ", expected " | 204 << "Pointer button was " << (int)button_ << ", expected " |
207 << (int)WebMouseEvent::Button::Left << "."; | 205 << (int)WebMouseEvent::Button::Left << "."; |
208 } | 206 } |
209 | 207 |
210 if (clickCount() == 0 && button() != WebMouseEvent::Button::NoButton) { | 208 if (clickCount_ == 0 && button_ != WebMouseEvent::Button::NoButton) { |
211 return testing::AssertionFailure() | 209 return testing::AssertionFailure() |
212 << "Pointer button was " << (int)button() << ", expected " | 210 << "Pointer button was " << (int)button_ << ", expected " |
213 << (int)WebMouseEvent::Button::NoButton << "."; | 211 << (int)WebMouseEvent::Button::NoButton << "."; |
214 } | 212 } |
215 | 213 |
216 if ((param.pointer_action_type() == | 214 if ((param.pointer_action_type() == |
217 SyntheticPointerActionParams::PointerActionType::PRESS || | 215 SyntheticPointerActionParams::PointerActionType::PRESS || |
218 param.pointer_action_type() == | 216 param.pointer_action_type() == |
219 SyntheticPointerActionParams::PointerActionType::MOVE) && | 217 SyntheticPointerActionParams::PointerActionType::MOVE) && |
220 position() != param.position()) { | 218 position_ != param.position()) { |
221 return testing::AssertionFailure() | 219 return testing::AssertionFailure() |
222 << "Pointer position was " << position().ToString() | 220 << "Pointer position was " << position_.ToString() |
223 << ", expected " << param.position().ToString() << "."; | 221 << ", expected " << param.position().ToString() << "."; |
224 } | 222 } |
225 return testing::AssertionSuccess(); | 223 return testing::AssertionSuccess(); |
226 } | 224 } |
227 | 225 |
228 SyntheticGestureParams::GestureSourceType | 226 SyntheticGestureParams::GestureSourceType |
229 GetDefaultSyntheticGestureSourceType() const override { | 227 GetDefaultSyntheticGestureSourceType() const override { |
230 return SyntheticGestureParams::MOUSE_INPUT; | 228 return SyntheticGestureParams::MOUSE_INPUT; |
231 } | 229 } |
232 | 230 |
233 gfx::PointF position() const { return position_; } | |
234 int clickCount() const { return clickCount_; } | |
235 WebMouseEvent::Button button() const { return button_; } | |
236 | |
237 private: | 231 private: |
238 gfx::PointF position_; | 232 gfx::PointF position_; |
239 int clickCount_; | 233 int clickCount_; |
240 WebMouseEvent::Button button_; | 234 WebMouseEvent::Button button_; |
241 }; | 235 }; |
242 | 236 |
243 class SyntheticPointerActionTest : public testing::Test { | 237 class SyntheticPointerActionTest : public testing::Test { |
244 public: | 238 public: |
245 SyntheticPointerActionTest() { | 239 SyntheticPointerActionTest() { |
246 action_param_list_.reset(new std::vector<SyntheticPointerActionParams>()); | 240 params_ = SyntheticPointerActionListParams(); |
247 num_success_ = 0; | 241 num_success_ = 0; |
248 num_failure_ = 0; | 242 num_failure_ = 0; |
249 } | 243 } |
250 ~SyntheticPointerActionTest() override {} | 244 ~SyntheticPointerActionTest() override {} |
251 | 245 |
252 protected: | 246 protected: |
253 template <typename MockGestureTarget> | 247 template <typename MockGestureTarget> |
254 void CreateSyntheticPointerActionTarget() { | 248 void CreateSyntheticPointerActionTarget() { |
255 target_.reset(new MockGestureTarget()); | 249 target_.reset(new MockGestureTarget()); |
256 synthetic_pointer_driver_ = SyntheticPointerDriver::Create( | 250 synthetic_pointer_driver_ = SyntheticPointerDriver::Create( |
257 target_->GetDefaultSyntheticGestureSourceType()); | 251 target_->GetDefaultSyntheticGestureSourceType()); |
258 } | 252 } |
259 | 253 |
260 void ForwardSyntheticPointerAction() { | 254 void ForwardSyntheticPointerAction() { |
261 pointer_action_.reset(new SyntheticPointerAction( | |
262 action_param_list_.get(), synthetic_pointer_driver_.get())); | |
263 | |
264 SyntheticGesture::Result result = pointer_action_->ForwardInputEvents( | 255 SyntheticGesture::Result result = pointer_action_->ForwardInputEvents( |
265 base::TimeTicks::Now(), target_.get()); | 256 base::TimeTicks::Now(), target_.get()); |
266 | 257 |
267 if (result == SyntheticGesture::GESTURE_FINISHED) | 258 if (result == SyntheticGesture::GESTURE_FINISHED || |
| 259 result == SyntheticGesture::GESTURE_RUNNING) |
268 num_success_++; | 260 num_success_++; |
269 else | 261 else |
270 num_failure_++; | 262 num_failure_++; |
271 } | 263 } |
272 | 264 |
273 int num_success_; | 265 int num_success_; |
274 int num_failure_; | 266 int num_failure_; |
275 std::unique_ptr<MockSyntheticPointerActionTarget> target_; | 267 std::unique_ptr<MockSyntheticPointerActionTarget> target_; |
276 std::unique_ptr<SyntheticGesture> pointer_action_; | 268 std::unique_ptr<SyntheticGesture> pointer_action_; |
277 std::unique_ptr<SyntheticPointerDriver> synthetic_pointer_driver_; | 269 std::unique_ptr<SyntheticPointerDriver> synthetic_pointer_driver_; |
278 std::unique_ptr<std::vector<SyntheticPointerActionParams>> action_param_list_; | 270 SyntheticPointerActionListParams params_; |
279 }; | 271 }; |
280 | 272 |
281 TEST_F(SyntheticPointerActionTest, PointerTouchAction) { | 273 TEST_F(SyntheticPointerActionTest, PointerTouchAction) { |
282 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); | 274 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); |
283 | 275 |
284 // Send a touch press for one finger. | 276 // Send a touch press for one finger. |
285 SyntheticPointerActionParams params0 = SyntheticPointerActionParams( | 277 SyntheticPointerActionParams param1 = SyntheticPointerActionParams( |
286 SyntheticPointerActionParams::PointerActionType::PRESS, | 278 SyntheticPointerActionParams::PointerActionType::PRESS); |
287 SyntheticGestureParams::TOUCH_INPUT); | 279 param1.set_index(0); |
288 params0.set_position(gfx::PointF(54, 89)); | 280 param1.set_position(gfx::PointF(54, 89)); |
289 action_param_list_->push_back(params0); | 281 SyntheticPointerActionListParams::ParamList param_list1; |
290 ForwardSyntheticPointerAction(); | 282 param_list1.push_back(param1); |
291 | 283 params_.PushPointerActionParamsList(param_list1); |
| 284 |
| 285 // Send a touch move for the first finger and a touch press for the second |
| 286 // finger. |
| 287 param1.set_pointer_action_type( |
| 288 SyntheticPointerActionParams::PointerActionType::MOVE); |
| 289 param1.set_position(gfx::PointF(133, 156)); |
| 290 SyntheticPointerActionParams param2 = SyntheticPointerActionParams( |
| 291 SyntheticPointerActionParams::PointerActionType::PRESS); |
| 292 param2.set_index(1); |
| 293 param2.set_position(gfx::PointF(79, 132)); |
| 294 SyntheticPointerActionListParams::ParamList param_list2; |
| 295 param_list2.push_back(param1); |
| 296 param_list2.push_back(param2); |
| 297 params_.PushPointerActionParamsList(param_list2); |
| 298 |
| 299 // Send a touch move for the second finger. |
| 300 param1.set_pointer_action_type( |
| 301 SyntheticPointerActionParams::PointerActionType::IDLE); |
| 302 param2.set_pointer_action_type( |
| 303 SyntheticPointerActionParams::PointerActionType::MOVE); |
| 304 param2.set_position(gfx::PointF(87, 253)); |
| 305 SyntheticPointerActionListParams::ParamList param_list3; |
| 306 param_list3.push_back(param1); |
| 307 param_list3.push_back(param2); |
| 308 params_.PushPointerActionParamsList(param_list3); |
| 309 |
| 310 // Send touch releases for both fingers. |
| 311 SyntheticPointerActionListParams::ParamList param_list4; |
| 312 param1.set_pointer_action_type( |
| 313 SyntheticPointerActionParams::PointerActionType::RELEASE); |
| 314 param2.set_pointer_action_type( |
| 315 SyntheticPointerActionParams::PointerActionType::RELEASE); |
| 316 param_list4.push_back(param1); |
| 317 param_list4.push_back(param2); |
| 318 params_.PushPointerActionParamsList(param_list4); |
| 319 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 320 |
| 321 ForwardSyntheticPointerAction(); |
292 MockSyntheticPointerTouchActionTarget* pointer_touch_target = | 322 MockSyntheticPointerTouchActionTarget* pointer_touch_target = |
293 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); | 323 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); |
294 EXPECT_EQ(1, num_success_); | 324 EXPECT_EQ(1, num_success_); |
295 EXPECT_EQ(0, num_failure_); | 325 EXPECT_EQ(0, num_failure_); |
296 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | 326 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
297 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 327 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
298 *action_param_list_.get())); | 328 param_list1)); |
299 | 329 |
300 // Send a touch move for the first finger and a touch press for the second | 330 ForwardSyntheticPointerAction(); |
301 // finger. | |
302 action_param_list_->at(0).set_pointer_action_type( | |
303 SyntheticPointerActionParams::PointerActionType::MOVE); | |
304 action_param_list_->at(0).set_position(gfx::PointF(133, 156)); | |
305 SyntheticPointerActionParams params1 = SyntheticPointerActionParams( | |
306 SyntheticPointerActionParams::PointerActionType::PRESS, | |
307 SyntheticGestureParams::TOUCH_INPUT); | |
308 params1.set_position(gfx::PointF(79, 132)); | |
309 action_param_list_->push_back(params1); | |
310 ForwardSyntheticPointerAction(); | |
311 | |
312 EXPECT_EQ(2, num_success_); | 331 EXPECT_EQ(2, num_success_); |
313 EXPECT_EQ(0, num_failure_); | 332 EXPECT_EQ(0, num_failure_); |
314 // The type of the SyntheticWebTouchEvent is the action of the last finger. | 333 // The type of the SyntheticWebTouchEvent is the action of the last finger. |
315 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | 334 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
316 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 335 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
317 *action_param_list_.get())); | 336 param_list2)); |
318 | 337 |
319 // Send a touch move for the second finger. | 338 ForwardSyntheticPointerAction(); |
320 action_param_list_->at(1).set_pointer_action_type( | |
321 SyntheticPointerActionParams::PointerActionType::MOVE); | |
322 action_param_list_->at(1).set_position(gfx::PointF(87, 253)); | |
323 ForwardSyntheticPointerAction(); | |
324 | |
325 EXPECT_EQ(3, num_success_); | 339 EXPECT_EQ(3, num_success_); |
326 EXPECT_EQ(0, num_failure_); | 340 EXPECT_EQ(0, num_failure_); |
327 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove); | 341 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchMove); |
328 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 342 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
329 *action_param_list_.get())); | 343 param_list3)); |
330 | 344 |
331 // Send touch releases for both fingers. | 345 ForwardSyntheticPointerAction(); |
332 action_param_list_->at(0).set_pointer_action_type( | |
333 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
334 action_param_list_->at(1).set_pointer_action_type( | |
335 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
336 ForwardSyntheticPointerAction(); | |
337 | |
338 EXPECT_EQ(4, num_success_); | 346 EXPECT_EQ(4, num_success_); |
339 EXPECT_EQ(0, num_failure_); | 347 EXPECT_EQ(0, num_failure_); |
340 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); | 348 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); |
341 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 349 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
342 *action_param_list_.get())); | 350 param_list4)); |
343 } | 351 } |
344 | 352 |
345 TEST_F(SyntheticPointerActionTest, PointerTouchActionWithIdle) { | 353 TEST_F(SyntheticPointerActionTest, PointerTouchActionsMultiPressRelease) { |
346 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); | 354 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); |
347 int count_success = 1; | 355 int count_success = 1; |
| 356 |
348 // Send a touch press for one finger. | 357 // Send a touch press for one finger. |
349 SyntheticPointerActionParams params0 = SyntheticPointerActionParams( | 358 SyntheticPointerActionParams param1 = SyntheticPointerActionParams( |
350 SyntheticPointerActionParams::PointerActionType::PRESS, | 359 SyntheticPointerActionParams::PointerActionType::PRESS); |
351 SyntheticGestureParams::TOUCH_INPUT); | 360 param1.set_index(0); |
352 params0.set_position(gfx::PointF(54, 89)); | 361 param1.set_position(gfx::PointF(54, 89)); |
353 action_param_list_->push_back(params0); | 362 SyntheticPointerActionListParams::ParamList param_list1; |
354 ForwardSyntheticPointerAction(); | 363 param_list1.push_back(param1); |
355 | 364 params_.PushPointerActionParamsList(param_list1); |
| 365 |
| 366 SyntheticPointerActionParams param2 = SyntheticPointerActionParams( |
| 367 SyntheticPointerActionParams::PointerActionType::PRESS); |
| 368 param2.set_index(1); |
| 369 param2.set_position(gfx::PointF(123, 69)); |
| 370 param1.set_pointer_action_type( |
| 371 SyntheticPointerActionParams::PointerActionType::IDLE); |
| 372 SyntheticPointerActionListParams::ParamList param_list2; |
| 373 param_list2.push_back(param1); |
| 374 param_list2.push_back(param2); |
| 375 |
| 376 param2.set_pointer_action_type( |
| 377 SyntheticPointerActionParams::PointerActionType::RELEASE); |
| 378 SyntheticPointerActionListParams::ParamList param_list3; |
| 379 param_list3.push_back(param1); |
| 380 param_list3.push_back(param2); |
| 381 for (int i = 0; i < 3; ++i) { |
| 382 // Send a touch press for the second finger and not move the first finger. |
| 383 params_.PushPointerActionParamsList(param_list2); |
| 384 |
| 385 // Send a touch release for the second finger and not move the first finger. |
| 386 params_.PushPointerActionParamsList(param_list3); |
| 387 } |
| 388 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 389 |
| 390 ForwardSyntheticPointerAction(); |
356 MockSyntheticPointerTouchActionTarget* pointer_touch_target = | 391 MockSyntheticPointerTouchActionTarget* pointer_touch_target = |
357 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); | 392 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); |
358 EXPECT_EQ(count_success++, num_success_); | 393 EXPECT_EQ(count_success++, num_success_); |
359 EXPECT_EQ(0, num_failure_); | 394 EXPECT_EQ(0, num_failure_); |
360 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | 395 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
361 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 396 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
362 *action_param_list_.get())); | 397 param_list1)); |
363 | 398 |
364 SyntheticPointerActionParams params1; | 399 for (int index = 1; index < 4; ++index) { |
365 params1.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | |
366 action_param_list_->push_back(params1); | |
367 for (int i = 0; i < 3; ++i) { | |
368 // Send a touch press for the second finger and not move the first finger. | |
369 action_param_list_->at(0).set_pointer_action_type( | |
370 SyntheticPointerActionParams::PointerActionType::IDLE); | |
371 action_param_list_->at(1).set_pointer_action_type( | |
372 SyntheticPointerActionParams::PointerActionType::PRESS); | |
373 action_param_list_->at(1).set_position(gfx::PointF(123, 69)); | |
374 ForwardSyntheticPointerAction(); | 400 ForwardSyntheticPointerAction(); |
375 | |
376 EXPECT_EQ(count_success++, num_success_); | 401 EXPECT_EQ(count_success++, num_success_); |
377 EXPECT_EQ(0, num_failure_); | 402 EXPECT_EQ(0, num_failure_); |
378 // The type of the SyntheticWebTouchEvent is the action of the last finger. | 403 // The type of the SyntheticWebTouchEvent is the action of the last finger. |
379 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | 404 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
380 EXPECT_TRUE( | 405 EXPECT_TRUE( |
381 pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 406 pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
382 *action_param_list_.get())); | 407 param_list2)); |
383 | |
384 // Send a touch release for the second finger and not move the first finger. | |
385 action_param_list_->at(0).set_pointer_action_type( | |
386 SyntheticPointerActionParams::PointerActionType::IDLE); | |
387 action_param_list_->at(1).set_pointer_action_type( | |
388 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
389 | 408 |
390 ForwardSyntheticPointerAction(); | 409 ForwardSyntheticPointerAction(); |
391 | |
392 EXPECT_EQ(count_success++, num_success_); | 410 EXPECT_EQ(count_success++, num_success_); |
393 EXPECT_EQ(0, num_failure_); | 411 EXPECT_EQ(0, num_failure_); |
394 // The type of the SyntheticWebTouchEvent is the action of the last finger. | 412 // The type of the SyntheticWebTouchEvent is the action of the last finger. |
395 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); | 413 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchEnd); |
396 EXPECT_TRUE( | 414 EXPECT_TRUE( |
397 pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 415 pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( |
398 *action_param_list_.get())); | 416 param_list3)); |
399 } | 417 } |
400 } | 418 } |
401 | 419 |
402 TEST_F(SyntheticPointerActionTest, PointerTouchActionSourceTypeInvalid) { | 420 TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) { |
403 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); | 421 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); |
404 | 422 |
405 // Users' gesture source type does not match with the touch action. | 423 // Cannot send a touch move or touch release without sending a touch press |
406 SyntheticPointerActionParams params = SyntheticPointerActionParams( | 424 // first. |
407 SyntheticPointerActionParams::PointerActionType::PRESS, | 425 SyntheticPointerActionParams param = SyntheticPointerActionParams( |
408 SyntheticGestureParams::MOUSE_INPUT); | 426 SyntheticPointerActionParams::PointerActionType::MOVE); |
409 params.set_position(gfx::PointF(54, 89)); | 427 param.set_index(0); |
410 action_param_list_->push_back(params); | 428 param.set_position(gfx::PointF(54, 89)); |
411 ForwardSyntheticPointerAction(); | 429 params_.PushPointerActionParams(param); |
412 | 430 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 431 |
| 432 ForwardSyntheticPointerAction(); |
413 EXPECT_EQ(0, num_success_); | 433 EXPECT_EQ(0, num_success_); |
414 EXPECT_EQ(1, num_failure_); | 434 EXPECT_EQ(1, num_failure_); |
415 | 435 |
416 params = SyntheticPointerActionParams( | 436 param.set_pointer_action_type( |
417 SyntheticPointerActionParams::PointerActionType::PRESS, | 437 SyntheticPointerActionParams::PointerActionType::RELEASE); |
418 SyntheticGestureParams::TOUCH_INPUT); | 438 params_ = SyntheticPointerActionListParams(); |
419 params.set_position(gfx::PointF(54, 89)); | 439 params_.PushPointerActionParams(param); |
420 action_param_list_->at(0) = params; | 440 pointer_action_.reset(new SyntheticPointerAction(params_)); |
421 ForwardSyntheticPointerAction(); | 441 |
422 | 442 ForwardSyntheticPointerAction(); |
423 MockSyntheticPointerTouchActionTarget* pointer_touch_target = | |
424 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); | |
425 EXPECT_EQ(1, num_success_); | |
426 EXPECT_EQ(1, num_failure_); | |
427 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | |
428 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | |
429 *action_param_list_.get())); | |
430 } | |
431 | |
432 TEST_F(SyntheticPointerActionTest, PointerTouchActionTypeInvalid) { | |
433 CreateSyntheticPointerActionTarget<MockSyntheticPointerTouchActionTarget>(); | |
434 | |
435 // Cannot send a touch move or touch release without sending a touch press | |
436 // first. | |
437 SyntheticPointerActionParams params = SyntheticPointerActionParams( | |
438 SyntheticPointerActionParams::PointerActionType::MOVE, | |
439 SyntheticGestureParams::TOUCH_INPUT); | |
440 params.set_position(gfx::PointF(54, 89)); | |
441 action_param_list_->push_back(params); | |
442 ForwardSyntheticPointerAction(); | |
443 | |
444 EXPECT_EQ(0, num_success_); | |
445 EXPECT_EQ(1, num_failure_); | |
446 | |
447 action_param_list_->at(0).set_pointer_action_type( | |
448 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
449 ForwardSyntheticPointerAction(); | |
450 | |
451 EXPECT_EQ(0, num_success_); | 443 EXPECT_EQ(0, num_success_); |
452 EXPECT_EQ(2, num_failure_); | 444 EXPECT_EQ(2, num_failure_); |
453 | 445 |
454 // Send a touch press for one finger. | 446 // Send a touch press for one finger. |
455 action_param_list_->at(0).set_pointer_action_type( | 447 param.set_pointer_action_type( |
456 SyntheticPointerActionParams::PointerActionType::PRESS); | 448 SyntheticPointerActionParams::PointerActionType::PRESS); |
457 ForwardSyntheticPointerAction(); | 449 params_ = SyntheticPointerActionListParams(); |
458 | 450 params_.PushPointerActionParams(param); |
| 451 params_.PushPointerActionParams(param); |
| 452 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 453 |
| 454 ForwardSyntheticPointerAction(); |
459 MockSyntheticPointerTouchActionTarget* pointer_touch_target = | 455 MockSyntheticPointerTouchActionTarget* pointer_touch_target = |
460 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); | 456 static_cast<MockSyntheticPointerTouchActionTarget*>(target_.get()); |
461 EXPECT_EQ(1, num_success_); | 457 EXPECT_EQ(1, num_success_); |
462 EXPECT_EQ(2, num_failure_); | 458 EXPECT_EQ(2, num_failure_); |
463 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); | 459 EXPECT_EQ(pointer_touch_target->type(), WebInputEvent::TouchStart); |
464 EXPECT_TRUE(pointer_touch_target->SyntheticTouchActionListDispatchedCorrectly( | 460 EXPECT_TRUE( |
465 *action_param_list_.get())); | 461 pointer_touch_target->SyntheticTouchActionDispatchedCorrectly(param, 0)); |
466 | 462 |
467 // Cannot send a touch press again without releasing the finger. | 463 // Cannot send a touch press again without releasing the finger. |
468 action_param_list_->at(0).gesture_source_type = | 464 ForwardSyntheticPointerAction(); |
469 SyntheticGestureParams::TOUCH_INPUT; | |
470 action_param_list_->at(0).set_pointer_action_type( | |
471 SyntheticPointerActionParams::PointerActionType::PRESS); | |
472 ForwardSyntheticPointerAction(); | |
473 | |
474 EXPECT_EQ(1, num_success_); | 465 EXPECT_EQ(1, num_success_); |
475 EXPECT_EQ(3, num_failure_); | 466 EXPECT_EQ(3, num_failure_); |
476 } | 467 } |
477 | 468 |
478 TEST_F(SyntheticPointerActionTest, PointerMouseAction) { | 469 TEST_F(SyntheticPointerActionTest, PointerMouseAction) { |
479 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); | 470 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); |
480 | 471 |
481 // Send a mouse move. | 472 // Send a mouse move. |
482 SyntheticPointerActionParams params = SyntheticPointerActionParams( | 473 SyntheticPointerActionParams param1 = SyntheticPointerActionParams( |
483 SyntheticPointerActionParams::PointerActionType::MOVE, | 474 SyntheticPointerActionParams::PointerActionType::MOVE); |
484 SyntheticGestureParams::MOUSE_INPUT); | 475 param1.set_position(gfx::PointF(189, 62)); |
485 params.set_position(gfx::PointF(189, 62)); | 476 params_.PushPointerActionParams(param1); |
486 action_param_list_->push_back(params); | 477 |
| 478 // Send a mouse down. |
| 479 SyntheticPointerActionParams param2 = SyntheticPointerActionParams( |
| 480 SyntheticPointerActionParams::PointerActionType::PRESS); |
| 481 param2.set_position(gfx::PointF(189, 62)); |
| 482 params_.PushPointerActionParams(param2); |
| 483 |
| 484 // Send a mouse drag. |
| 485 SyntheticPointerActionParams param3 = SyntheticPointerActionParams( |
| 486 SyntheticPointerActionParams::PointerActionType::MOVE); |
| 487 param3.set_position(gfx::PointF(326, 298)); |
| 488 params_.PushPointerActionParams(param3); |
| 489 |
| 490 // Send a mouse up. |
| 491 SyntheticPointerActionParams param4 = SyntheticPointerActionParams( |
| 492 SyntheticPointerActionParams::PointerActionType::RELEASE); |
| 493 params_.PushPointerActionParams(param4); |
| 494 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 495 |
487 ForwardSyntheticPointerAction(); | 496 ForwardSyntheticPointerAction(); |
488 | |
489 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = | 497 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = |
490 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); | 498 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); |
491 EXPECT_EQ(1, num_success_); | 499 EXPECT_EQ(1, num_success_); |
492 EXPECT_EQ(0, num_failure_); | 500 EXPECT_EQ(0, num_failure_); |
493 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | 501 EXPECT_TRUE( |
494 action_param_list_->at(0), 0)); | 502 pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly(param1, 0)); |
495 | 503 |
496 // Send a mouse down. | |
497 action_param_list_->at(0).set_position(gfx::PointF(189, 62)); | |
498 action_param_list_->at(0).set_pointer_action_type( | |
499 SyntheticPointerActionParams::PointerActionType::PRESS); | |
500 ForwardSyntheticPointerAction(); | 504 ForwardSyntheticPointerAction(); |
501 | |
502 EXPECT_EQ(2, num_success_); | 505 EXPECT_EQ(2, num_success_); |
503 EXPECT_EQ(0, num_failure_); | 506 EXPECT_EQ(0, num_failure_); |
504 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | 507 EXPECT_TRUE( |
505 action_param_list_->at(0), 1)); | 508 pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly(param2, 1)); |
506 | 509 |
507 // Send a mouse drag. | |
508 action_param_list_->at(0).set_position(gfx::PointF(326, 298)); | |
509 action_param_list_->at(0).set_pointer_action_type( | |
510 SyntheticPointerActionParams::PointerActionType::MOVE); | |
511 ForwardSyntheticPointerAction(); | 510 ForwardSyntheticPointerAction(); |
512 | |
513 EXPECT_EQ(3, num_success_); | 511 EXPECT_EQ(3, num_success_); |
514 EXPECT_EQ(0, num_failure_); | 512 EXPECT_EQ(0, num_failure_); |
515 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | 513 EXPECT_TRUE( |
516 action_param_list_->at(0), 1)); | 514 pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly(param3, 1)); |
517 | 515 |
518 // Send a mouse up. | |
519 action_param_list_->at(0).set_pointer_action_type( | |
520 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
521 ForwardSyntheticPointerAction(); | 516 ForwardSyntheticPointerAction(); |
522 | |
523 EXPECT_EQ(4, num_success_); | 517 EXPECT_EQ(4, num_success_); |
524 EXPECT_EQ(0, num_failure_); | 518 EXPECT_EQ(0, num_failure_); |
525 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | 519 EXPECT_TRUE( |
526 action_param_list_->at(0), 1)); | 520 pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly(param4, 1)); |
527 } | |
528 | |
529 TEST_F(SyntheticPointerActionTest, PointerMouseActionSourceTypeInvalid) { | |
530 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); | |
531 | |
532 // Users' gesture source type does not match with the mouse action. | |
533 SyntheticPointerActionParams params = SyntheticPointerActionParams( | |
534 SyntheticPointerActionParams::PointerActionType::PRESS, | |
535 SyntheticGestureParams::TOUCH_INPUT); | |
536 params.set_position(gfx::PointF(54, 89)); | |
537 action_param_list_->push_back(params); | |
538 ForwardSyntheticPointerAction(); | |
539 | |
540 EXPECT_EQ(0, num_success_); | |
541 EXPECT_EQ(1, num_failure_); | |
542 | |
543 params = SyntheticPointerActionParams( | |
544 SyntheticPointerActionParams::PointerActionType::PRESS, | |
545 SyntheticGestureParams::MOUSE_INPUT); | |
546 params.set_position(gfx::PointF(54, 89)); | |
547 action_param_list_->at(0) = params; | |
548 ForwardSyntheticPointerAction(); | |
549 | |
550 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = | |
551 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); | |
552 EXPECT_EQ(1, num_success_); | |
553 EXPECT_EQ(1, num_failure_); | |
554 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | |
555 action_param_list_->at(0), 1)); | |
556 } | 521 } |
557 | 522 |
558 TEST_F(SyntheticPointerActionTest, PointerMouseActionTypeInvalid) { | 523 TEST_F(SyntheticPointerActionTest, PointerMouseActionTypeInvalid) { |
559 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); | 524 CreateSyntheticPointerActionTarget<MockSyntheticPointerMouseActionTarget>(); |
560 | 525 |
561 // Send a mouse move. | 526 // Cannot send a mouse up without sending a mouse down first. |
562 SyntheticPointerActionParams params = SyntheticPointerActionParams( | 527 SyntheticPointerActionParams param = SyntheticPointerActionParams( |
563 SyntheticPointerActionParams::PointerActionType::MOVE, | 528 SyntheticPointerActionParams::PointerActionType::RELEASE); |
564 SyntheticGestureParams::MOUSE_INPUT); | 529 params_.PushPointerActionParams(param); |
565 params.set_position(gfx::PointF(189, 62)); | 530 pointer_action_.reset(new SyntheticPointerAction(params_)); |
566 action_param_list_->push_back(params); | 531 |
567 ForwardSyntheticPointerAction(); | 532 ForwardSyntheticPointerAction(); |
| 533 EXPECT_EQ(0, num_success_); |
| 534 EXPECT_EQ(1, num_failure_); |
568 | 535 |
| 536 // Send a mouse down for one finger. |
| 537 param.set_pointer_action_type( |
| 538 SyntheticPointerActionParams::PointerActionType::PRESS); |
| 539 param.set_position(gfx::PointF(54, 89)); |
| 540 params_ = SyntheticPointerActionListParams(); |
| 541 params_.PushPointerActionParams(param); |
| 542 |
| 543 // Cannot send a mouse down again without releasing the mouse button. |
| 544 params_.PushPointerActionParams(param); |
| 545 pointer_action_.reset(new SyntheticPointerAction(params_)); |
| 546 |
| 547 ForwardSyntheticPointerAction(); |
569 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = | 548 MockSyntheticPointerMouseActionTarget* pointer_mouse_target = |
570 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); | 549 static_cast<MockSyntheticPointerMouseActionTarget*>(target_.get()); |
571 EXPECT_EQ(1, num_success_); | 550 EXPECT_EQ(1, num_success_); |
572 EXPECT_EQ(0, num_failure_); | 551 EXPECT_EQ(1, num_failure_); |
573 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | 552 EXPECT_TRUE( |
574 action_param_list_->at(0), 0)); | 553 pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly(param, 1)); |
575 | 554 |
576 // Cannot send a mouse up without sending a mouse down first. | |
577 action_param_list_->at(0).set_pointer_action_type( | |
578 SyntheticPointerActionParams::PointerActionType::RELEASE); | |
579 ForwardSyntheticPointerAction(); | 555 ForwardSyntheticPointerAction(); |
580 | |
581 EXPECT_EQ(1, num_success_); | 556 EXPECT_EQ(1, num_success_); |
582 EXPECT_EQ(1, num_failure_); | |
583 | |
584 // Send a mouse down for one finger. | |
585 action_param_list_->at(0).set_pointer_action_type( | |
586 SyntheticPointerActionParams::PointerActionType::PRESS); | |
587 ForwardSyntheticPointerAction(); | |
588 | |
589 EXPECT_EQ(2, num_success_); | |
590 EXPECT_EQ(1, num_failure_); | |
591 EXPECT_TRUE(pointer_mouse_target->SyntheticMouseActionDispatchedCorrectly( | |
592 action_param_list_->at(0), 1)); | |
593 | |
594 // Cannot send a mouse down again without releasing the mouse button. | |
595 action_param_list_->at(0).set_pointer_action_type( | |
596 SyntheticPointerActionParams::PointerActionType::PRESS); | |
597 ForwardSyntheticPointerAction(); | |
598 | |
599 EXPECT_EQ(2, num_success_); | |
600 EXPECT_EQ(2, num_failure_); | 557 EXPECT_EQ(2, num_failure_); |
601 } | 558 } |
602 | 559 |
603 } // namespace | 560 } // namespace |
604 | 561 |
605 } // namespace content | 562 } // namespace content |
OLD | NEW |