Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: content/browser/renderer_host/input/synthetic_pointer_action.cc

Issue 2336803003: Make SyntheticPointerAction to flush the pointer action sequence (Closed)
Patch Set: controller Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698