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

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

Issue 156783006: Consuming a touch move prevents only the next scroll update. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up error handling and tests. Created 6 years, 10 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/input_router_impl.h" 5 #include "content/browser/renderer_host/input/input_router_impl.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 case INPUT_EVENT_ACK_STATE_UNKNOWN: return "UNKNOWN"; 102 case INPUT_EVENT_ACK_STATE_UNKNOWN: return "UNKNOWN";
103 case INPUT_EVENT_ACK_STATE_CONSUMED: return "CONSUMED"; 103 case INPUT_EVENT_ACK_STATE_CONSUMED: return "CONSUMED";
104 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED: return "NOT_CONSUMED"; 104 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED: return "NOT_CONSUMED";
105 case INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS: return "NO_CONSUMER_EXISTS"; 105 case INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS: return "NO_CONSUMER_EXISTS";
106 case INPUT_EVENT_ACK_STATE_IGNORED: return "IGNORED"; 106 case INPUT_EVENT_ACK_STATE_IGNORED: return "IGNORED";
107 } 107 }
108 DLOG(WARNING) << "Unhandled InputEventAckState in GetEventAckName."; 108 DLOG(WARNING) << "Unhandled InputEventAckState in GetEventAckName.";
109 return ""; 109 return "";
110 } 110 }
111 111
112 TouchEventQueue::TouchScrollingMode GetTouchScrollingMode()
113 {
114 std::string modeString = CommandLine::ForCurrentProcess()->
115 GetSwitchValueASCII(switches::kTouchScrollingMode);
116 if (modeString == switches::kTouchScrollingModeSyncTouchmove)
117 return TouchEventQueue::TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE;
118 if (modeString == switches::kTouchScrollingModeAbsorbTouchmove)
119 return TouchEventQueue::TOUCH_SCROLLING_MODE_ABSORB_TOUCHMOVE;
120 if (modeString != "" &&
121 modeString != switches::kTouchScrollingModeTouchcancel)
122 LOG(ERROR) << "Invalid --touch-scrolling-mode option: " << modeString;
123 return TouchEventQueue::TOUCH_SCROLLING_MODE_TOUCHCANCEL;
124 }
125
112 } // namespace 126 } // namespace
113 127
114 InputRouterImpl::InputRouterImpl(IPC::Sender* sender, 128 InputRouterImpl::InputRouterImpl(IPC::Sender* sender,
115 InputRouterClient* client, 129 InputRouterClient* client,
116 InputAckHandler* ack_handler, 130 InputAckHandler* ack_handler,
117 int routing_id) 131 int routing_id)
118 : sender_(sender), 132 : sender_(sender),
119 client_(client), 133 client_(client),
120 ack_handler_(ack_handler), 134 ack_handler_(ack_handler),
121 routing_id_(routing_id), 135 routing_id_(routing_id),
122 select_range_pending_(false), 136 select_range_pending_(false),
123 move_caret_pending_(false), 137 move_caret_pending_(false),
124 mouse_move_pending_(false), 138 mouse_move_pending_(false),
125 mouse_wheel_pending_(false), 139 mouse_wheel_pending_(false),
126 touch_ack_timeout_enabled_(false), 140 touch_ack_timeout_enabled_(false),
127 touch_ack_timeout_delay_ms_(std::numeric_limits<size_t>::max()), 141 touch_ack_timeout_delay_ms_(std::numeric_limits<size_t>::max()),
128 current_ack_source_(ACK_SOURCE_NONE), 142 current_ack_source_(ACK_SOURCE_NONE),
129 gesture_event_queue_(new GestureEventQueue(this, this)) { 143 gesture_event_queue_(new GestureEventQueue(this, this)) {
130 DCHECK(sender); 144 DCHECK(sender);
131 DCHECK(client); 145 DCHECK(client);
132 DCHECK(ack_handler); 146 DCHECK(ack_handler);
133 touch_event_queue_.reset(new TouchEventQueue(this)); 147 touch_event_queue_.reset(new TouchEventQueue(this, GetTouchScrollingMode()));
134 touch_ack_timeout_enabled_ = 148 touch_ack_timeout_enabled_ =
135 GetTouchAckTimeoutDelayMs(&touch_ack_timeout_delay_ms_); 149 GetTouchAckTimeoutDelayMs(&touch_ack_timeout_delay_ms_);
136 touch_event_queue_->SetAckTimeoutEnabled(touch_ack_timeout_enabled_, 150 touch_event_queue_->SetAckTimeoutEnabled(touch_ack_timeout_enabled_,
137 touch_ack_timeout_delay_ms_); 151 touch_ack_timeout_delay_ms_);
138 152
139 double touch_move_slop_suppression_length_dips = 0; 153 double touch_move_slop_suppression_length_dips = 0;
140 if (GetTouchMoveSlopSuppressionLengthDips( 154 if (GetTouchMoveSlopSuppressionLengthDips(
141 &touch_move_slop_suppression_length_dips)) { 155 &touch_move_slop_suppression_length_dips)) {
142 touch_event_queue_->SetTouchMoveSlopSuppressionEnabled( 156 touch_event_queue_->SetTouchMoveSlopSuppressionEnabled(
143 true, touch_move_slop_suppression_length_dips); 157 true, touch_move_slop_suppression_length_dips);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 335 }
322 336
323 void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event, 337 void InputRouterImpl::OnTouchEventAck(const TouchEventWithLatencyInfo& event,
324 InputEventAckState ack_result) { 338 InputEventAckState ack_result) {
325 ack_handler_->OnTouchEventAck(event, ack_result); 339 ack_handler_->OnTouchEventAck(event, ack_result);
326 } 340 }
327 341
328 void InputRouterImpl::OnGestureEventAck( 342 void InputRouterImpl::OnGestureEventAck(
329 const GestureEventWithLatencyInfo& event, 343 const GestureEventWithLatencyInfo& event,
330 InputEventAckState ack_result) { 344 InputEventAckState ack_result) {
345 touch_event_queue_->OnGestureEventAck(event, ack_result);
331 ProcessAckForOverscroll(event.event, ack_result); 346 ProcessAckForOverscroll(event.event, ack_result);
332 ack_handler_->OnGestureEventAck(event, ack_result); 347 ack_handler_->OnGestureEventAck(event, ack_result);
333 } 348 }
334 349
335 bool InputRouterImpl::SendSelectRange(scoped_ptr<IPC::Message> message) { 350 bool InputRouterImpl::SendSelectRange(scoped_ptr<IPC::Message> message) {
336 DCHECK(message->type() == InputMsg_SelectRange::ID); 351 DCHECK(message->type() == InputMsg_SelectRange::ID);
337 if (select_range_pending_) { 352 if (select_range_pending_) {
338 next_selection_range_ = message.Pass(); 353 next_selection_range_ = message.Pass();
339 return true; 354 return true;
340 } 355 }
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 break; 764 break;
750 } 765 }
751 } 766 }
752 767
753 bool InputRouterImpl::IsInOverscrollGesture() const { 768 bool InputRouterImpl::IsInOverscrollGesture() const {
754 OverscrollController* controller = client_->GetOverscrollController(); 769 OverscrollController* controller = client_->GetOverscrollController();
755 return controller && controller->overscroll_mode() != OVERSCROLL_NONE; 770 return controller && controller->overscroll_mode() != OVERSCROLL_NONE;
756 } 771 }
757 772
758 } // namespace content 773 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698