Index: content/browser/renderer_host/input/synthetic_pointer_action.cc |
diff --git a/content/browser/renderer_host/input/synthetic_pointer_action.cc b/content/browser/renderer_host/input/synthetic_pointer_action.cc |
index 59981ceeacdc90d3321f16c58e7ec91ae2b2faa7..c13744327601687839dea1a44cace76b64f23aa4 100644 |
--- a/content/browser/renderer_host/input/synthetic_pointer_action.cc |
+++ b/content/browser/renderer_host/input/synthetic_pointer_action.cc |
@@ -11,58 +11,78 @@ |
namespace content { |
SyntheticPointerAction::SyntheticPointerAction( |
- const SyntheticPointerActionParams& params) |
- : params_(params) {} |
- |
-SyntheticPointerAction::SyntheticPointerAction( |
- std::vector<SyntheticPointerActionParams>* param_list, |
- SyntheticPointerDriver* synthetic_pointer_driver) |
- : param_list_(param_list), |
- synthetic_pointer_driver_(synthetic_pointer_driver) {} |
+ const SyntheticPointerActionListParams& params) |
+ : params_(params), |
+ gesture_source_type_(SyntheticGestureParams::DEFAULT_INPUT), |
+ state_(UNINITIALIZED), |
+ actions_dispatched_count_(0U) {} |
SyntheticPointerAction::~SyntheticPointerAction() {} |
SyntheticGesture::Result SyntheticPointerAction::ForwardInputEvents( |
const base::TimeTicks& timestamp, |
SyntheticGestureTarget* target) { |
- DCHECK(synthetic_pointer_driver_); |
- return ForwardTouchOrMouseInputEvents(timestamp, target); |
+ if (state_ == UNINITIALIZED) { |
+ gesture_source_type_ = params_.gesture_source_type; |
+ if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT) |
+ gesture_source_type_ = target->GetDefaultSyntheticGestureSourceType(); |
+ |
+ if (!synthetic_pointer_driver_) { |
+ synthetic_pointer_driver_ = |
+ SyntheticPointerDriver::Create(gesture_source_type_); |
+ } |
+ state_ = RUNNING; |
+ } |
+ |
+ DCHECK_NE(gesture_source_type_, SyntheticGestureParams::DEFAULT_INPUT); |
+ if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT) |
+ return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; |
+ |
+ state_ = ForwardTouchOrMouseInputEvents(timestamp, target); |
+ |
+ if (state_ == INVALID) |
+ return POINTER_ACTION_INPUT_INVALID; |
+ |
+ return (state_ == DONE) ? SyntheticGesture::GESTURE_FINISHED |
+ : SyntheticGesture::GESTURE_RUNNING; |
} |
-SyntheticGesture::Result SyntheticPointerAction::ForwardTouchOrMouseInputEvents( |
+SyntheticPointerAction::GestureState |
+SyntheticPointerAction::ForwardTouchOrMouseInputEvents( |
const base::TimeTicks& timestamp, |
SyntheticGestureTarget* target) { |
- for (SyntheticPointerActionParams& params : *param_list_) { |
- if (!synthetic_pointer_driver_->UserInputCheck(params)) |
- return POINTER_ACTION_INPUT_INVALID; |
+ 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.
|
+ DCHECK_LT(actions_dispatched_count_, params_.params.size()); |
+ SyntheticPointerActionListParams::ParamList& param_list = |
+ params_.params[actions_dispatched_count_]; |
+ for (SyntheticPointerActionParams& param : param_list) { |
+ if (!synthetic_pointer_driver_->UserInputCheck(param)) |
+ return INVALID; |
- switch (params.pointer_action_type()) { |
- case SyntheticPointerActionParams::PointerActionType::PRESS: { |
- int index = synthetic_pointer_driver_->Press(params.position().x(), |
- params.position().y()); |
- params.set_index(index); |
+ switch (param.pointer_action_type()) { |
+ case SyntheticPointerActionParams::PointerActionType::PRESS: |
+ synthetic_pointer_driver_->Press(param.position().x(), |
+ param.position().y(), param.index()); |
break; |
- } |
case SyntheticPointerActionParams::PointerActionType::MOVE: |
- synthetic_pointer_driver_->Move(params.position().x(), |
- params.position().y(), params.index()); |
+ synthetic_pointer_driver_->Move(param.position().x(), |
+ param.position().y(), param.index()); |
break; |
case SyntheticPointerActionParams::PointerActionType::RELEASE: |
- synthetic_pointer_driver_->Release(params.index()); |
- // Only reset the index for touch pointers. |
- if (params.gesture_source_type != SyntheticGestureParams::MOUSE_INPUT) |
- params.set_index(-1); |
+ synthetic_pointer_driver_->Release(param.index()); |
break; |
case SyntheticPointerActionParams::PointerActionType::IDLE: |
break; |
case SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED: |
- return POINTER_ACTION_INPUT_INVALID; |
- case SyntheticPointerActionParams::PointerActionType::FINISH: |
- return GESTURE_FINISHED; |
+ return INVALID; |
} |
} |
synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
- return GESTURE_FINISHED; |
+ actions_dispatched_count_++; |
+ if (actions_dispatched_count_ == params_.params.size()) |
+ return DONE; |
+ else |
+ return RUNNING; |
} |
-} // namespace content |
+} // namespace content |