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

Unified Diff: content/browser/renderer_host/input/touch_event_queue.cc

Issue 228973003: Don't treat first touch move differently from future touch moves (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add extra return. Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/touch_event_queue.cc
diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc
index bbac01c3ebff51081f112419068c5525a4bad5cf..db4fa9117906215b361ca482cdc7bfbd12cabd12 100644
--- a/content/browser/renderer_host/input/touch_event_queue.cc
+++ b/content/browser/renderer_host/input/touch_event_queue.cc
@@ -349,7 +349,8 @@ TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client,
send_touch_events_async_(false),
needs_async_touchmove_for_outer_slop_region_(false),
last_sent_touch_timestamp_sec_(0),
- touch_scrolling_mode_(config.touch_scrolling_mode) {
+ touch_scrolling_mode_(config.touch_scrolling_mode),
+ seen_scroll_update_this_sequence_(false) {
DCHECK(client);
if (ack_timeout_enabled_) {
timeout_handler_.reset(
@@ -534,31 +535,37 @@ void TouchEventQueue::ForwardNextEventToRenderer() {
void TouchEventQueue::OnGestureScrollEvent(
const GestureEventWithLatencyInfo& gesture_event) {
- if (gesture_event.event.type != blink::WebInputEvent::GestureScrollBegin)
- return;
-
- if (touch_filtering_state_ != DROP_ALL_TOUCHES &&
- touch_filtering_state_ != DROP_TOUCHES_IN_SEQUENCE) {
- DCHECK(!touchmove_slop_suppressor_->suppressing_touchmoves())
- << "The renderer should be offered a touchmove before scrolling begins";
- }
+ if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) {
+ seen_scroll_update_this_sequence_ = false;
- if (touch_scrolling_mode_ == TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE) {
if (touch_filtering_state_ != DROP_ALL_TOUCHES &&
touch_filtering_state_ != DROP_TOUCHES_IN_SEQUENCE) {
+ DCHECK(!touchmove_slop_suppressor_->suppressing_touchmoves())
+ << "The renderer should be offered a touchmove before scrolling "
+ "begins";
+ }
+
+ if (touch_scrolling_mode_ == TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE &&
+ touch_filtering_state_ != DROP_ALL_TOUCHES &&
+ touch_filtering_state_ != DROP_TOUCHES_IN_SEQUENCE &&
+ (touch_ack_states_.empty() ||
+ AllTouchAckStatesHaveState(
+ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS))) {
// If no touch points have a consumer, prevent all subsequent touch events
// received during the scroll from reaching the renderer. This ensures
// that the first touchstart the renderer sees in any given sequence can
// always be preventDefault'ed (cancelable == true).
// TODO(jdduke): Revisit if touchstarts during scroll are made cancelable.
- if (touch_ack_states_.empty() ||
- AllTouchAckStatesHaveState(
- INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS)) {
- touch_filtering_state_ = DROP_TOUCHES_IN_SEQUENCE;
- return;
- }
+ touch_filtering_state_ = DROP_TOUCHES_IN_SEQUENCE;
}
+ return;
+ }
+ if (gesture_event.event.type != blink::WebInputEvent::GestureScrollUpdate ||
+ seen_scroll_update_this_sequence_)
+ return;
+
+ if (touch_scrolling_mode_ == TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE) {
pending_async_touchmove_.reset();
send_touch_events_async_ = true;
needs_async_touchmove_for_outer_slop_region_ = true;

Powered by Google App Engine
This is Rietveld 408576698