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 actions_dispatched_count_(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_GE(actions_dispatched_count_, 0U); |
samuong
2016/12/21 00:02:26
this is a size_t, which is unsigned, so this is un
lanwei
2016/12/21 20:01:14
Done.
| |
36 if (!synthetic_pointer_driver_->UserInputCheck(params)) | 55 DCHECK_LT(actions_dispatched_count_, params_.params.size()); |
37 return POINTER_ACTION_INPUT_INVALID; | 56 SyntheticPointerActionListParams::ParamList& param_list = |
57 params_.params[actions_dispatched_count_]; | |
58 for (SyntheticPointerActionParams& param : param_list) { | |
59 if (!synthetic_pointer_driver_->UserInputCheck(param)) | |
60 return INVALID; | |
38 | 61 |
39 switch (params.pointer_action_type()) { | 62 switch (param.pointer_action_type()) { |
40 case SyntheticPointerActionParams::PointerActionType::PRESS: { | 63 case SyntheticPointerActionParams::PointerActionType::PRESS: |
41 int index = synthetic_pointer_driver_->Press(params.position().x(), | 64 synthetic_pointer_driver_->Press(param.position().x(), |
42 params.position().y()); | 65 param.position().y(), param.index()); |
43 params.set_index(index); | |
44 break; | 66 break; |
45 } | |
46 case SyntheticPointerActionParams::PointerActionType::MOVE: | 67 case SyntheticPointerActionParams::PointerActionType::MOVE: |
47 synthetic_pointer_driver_->Move(params.position().x(), | 68 synthetic_pointer_driver_->Move(param.position().x(), |
48 params.position().y(), params.index()); | 69 param.position().y(), param.index()); |
49 break; | 70 break; |
50 case SyntheticPointerActionParams::PointerActionType::RELEASE: | 71 case SyntheticPointerActionParams::PointerActionType::RELEASE: |
51 synthetic_pointer_driver_->Release(params.index()); | 72 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; | 73 break; |
56 case SyntheticPointerActionParams::PointerActionType::IDLE: | 74 case SyntheticPointerActionParams::PointerActionType::IDLE: |
57 break; | 75 break; |
58 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: | 76 case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: |
59 return POINTER_ACTION_INPUT_INVALID; | 77 return INVALID; |
60 case SyntheticPointerActionParams::PointerActionType::FINISH: | |
61 return GESTURE_FINISHED; | |
62 } | 78 } |
63 } | 79 } |
64 synthetic_pointer_driver_->DispatchEvent(target, timestamp); | 80 synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
65 return GESTURE_FINISHED; | 81 actions_dispatched_count_++; |
82 if (actions_dispatched_count_ == params_.params.size()) | |
83 return DONE; | |
84 else | |
85 return RUNNING; | |
66 } | 86 } |
67 | 87 |
68 } // namespace content | 88 } // namespace content |
OLD | NEW |