Chromium Code Reviews| 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 |