OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/browser/renderer_host/input/synthetic_pointer_action.h" | 5 #include "content/browser/renderer_host/input/synthetic_pointer_action.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "third_party/WebKit/public/platform/WebInputEvent.h" | 8 #include "third_party/WebKit/public/platform/WebInputEvent.h" |
9 #include "ui/events/latency_info.h" | 9 #include "ui/events/latency_info.h" |
10 | 10 |
11 namespace content { | 11 namespace content { |
12 | 12 |
13 SyntheticPointerAction::SyntheticPointerAction( | 13 SyntheticPointerAction::SyntheticPointerAction( |
14 const SyntheticPointerActionParams& params) | 14 const SyntheticPointerActionListParams& params) |
15 : params_(params) {} | 15 : params_(params), |
16 | 16 gesture_source_type_(SyntheticGestureParams::DEFAULT_INPUT), |
17 SyntheticPointerAction::SyntheticPointerAction( | 17 state_(UNINITIALIZED), |
18 std::vector<SyntheticPointerActionParams>* param_list, | 18 num_actions_dispatched_(0U) {} |
19 SyntheticPointerDriver* synthetic_pointer_driver) | |
20 : param_list_(param_list), | |
21 synthetic_pointer_driver_(synthetic_pointer_driver) {} | |
22 | 19 |
23 SyntheticPointerAction::~SyntheticPointerAction() {} | 20 SyntheticPointerAction::~SyntheticPointerAction() {} |
24 | 21 |
25 SyntheticGesture::Result SyntheticPointerAction::ForwardInputEvents( | 22 SyntheticGesture::Result SyntheticPointerAction::ForwardInputEvents( |
26 const base::TimeTicks& timestamp, | 23 const base::TimeTicks& timestamp, |
27 SyntheticGestureTarget* target) { | 24 SyntheticGestureTarget* target) { |
28 DCHECK(synthetic_pointer_driver_); | 25 if (state_ == UNINITIALIZED) { |
29 return ForwardTouchOrMouseInputEvents(timestamp, target); | 26 gesture_source_type_ = params_.gesture_source_type; |
| 27 if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT) |
| 28 gesture_source_type_ = target->GetDefaultSyntheticGestureSourceType(); |
| 29 |
| 30 if (!synthetic_pointer_driver_) { |
| 31 synthetic_pointer_driver_ = |
| 32 SyntheticPointerDriver::Create(gesture_source_type_); |
| 33 } |
| 34 state_ = RUNNING; |
| 35 } |
| 36 |
| 37 DCHECK_NE(gesture_source_type_, SyntheticGestureParams::DEFAULT_INPUT); |
| 38 if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT) |
| 39 return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; |
| 40 |
| 41 state_ = ForwardTouchOrMouseInputEvents(timestamp, target); |
| 42 |
| 43 if (state_ == INVALID) |
| 44 return POINTER_ACTION_INPUT_INVALID; |
| 45 |
| 46 return (state_ == DONE) ? SyntheticGesture::GESTURE_FINISHED |
| 47 : SyntheticGesture::GESTURE_RUNNING; |
30 } | 48 } |
31 | 49 |
32 SyntheticGesture::Result SyntheticPointerAction::ForwardTouchOrMouseInputEvents( | 50 SyntheticPointerAction::GestureState |
| 51 SyntheticPointerAction::ForwardTouchOrMouseInputEvents( |
33 const base::TimeTicks& timestamp, | 52 const base::TimeTicks& timestamp, |
34 SyntheticGestureTarget* target) { | 53 SyntheticGestureTarget* target) { |
35 for (SyntheticPointerActionParams& params : *param_list_) { | 54 DCHECK_LT(num_actions_dispatched_, params_.params.size()); |
36 if (!synthetic_pointer_driver_->UserInputCheck(params)) | 55 SyntheticPointerActionListParams::ParamList& param_list = |
37 return POINTER_ACTION_INPUT_INVALID; | 56 params_.params[num_actions_dispatched_]; |
| 57 for (SyntheticPointerActionParams& param : param_list) { |
| 58 if (!synthetic_pointer_driver_->UserInputCheck(param)) |
| 59 return INVALID; |
38 | 60 |
39 switch (params.pointer_action_type()) { | 61 switch (param.pointer_action_type()) { |
40 case SyntheticPointerActionParams::PointerActionType::PRESS: { | 62 case SyntheticPointerActionParams::PointerActionType::PRESS: |
41 int index = synthetic_pointer_driver_->Press(params.position().x(), | 63 synthetic_pointer_driver_->Press(param.position().x(), |
42 params.position().y()); | 64 param.position().y(), param.index()); |
43 params.set_index(index); | |
44 break; | 65 break; |
45 } | |
46 case SyntheticPointerActionParams::PointerActionType::MOVE: | 66 case SyntheticPointerActionParams::PointerActionType::MOVE: |
47 synthetic_pointer_driver_->Move(params.position().x(), | 67 synthetic_pointer_driver_->Move(param.position().x(), |
48 params.position().y(), params.index()); | 68 param.position().y(), param.index()); |
49 break; | 69 break; |
50 case SyntheticPointerActionParams::PointerActionType::RELEASE: | 70 case SyntheticPointerActionParams::PointerActionType::RELEASE: |
51 synthetic_pointer_driver_->Release(params.index()); | 71 synthetic_pointer_driver_->Release(param.index()); |
52 // Only reset the index for touch pointers. | |
53 if (params.gesture_source_type != SyntheticGestureParams::MOUSE_INPUT) | |
54 params.set_index(-1); | |
55 break; | 72 break; |
56 case SyntheticPointerActionParams::PointerActionType::IDLE: | 73 case SyntheticPointerActionParams::PointerActionType::IDLE: |
57 break; | 74 break; |
58 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: | 75 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: |
59 return POINTER_ACTION_INPUT_INVALID; | 76 return INVALID; |
60 case SyntheticPointerActionParams::PointerActionType::FINISH: | |
61 return GESTURE_FINISHED; | |
62 } | 77 } |
63 } | 78 } |
64 synthetic_pointer_driver_->DispatchEvent(target, timestamp); | 79 synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
65 return GESTURE_FINISHED; | 80 num_actions_dispatched_++; |
| 81 if (num_actions_dispatched_ == params_.params.size()) |
| 82 return DONE; |
| 83 else |
| 84 return RUNNING; |
66 } | 85 } |
67 | 86 |
68 } // namespace content | 87 } // namespace content |
OLD | NEW |