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 db4fa9117906215b361ca482cdc7bfbd12cabd12..bbac01c3ebff51081f112419068c5525a4bad5cf 100644 |
--- a/content/browser/renderer_host/input/touch_event_queue.cc |
+++ b/content/browser/renderer_host/input/touch_event_queue.cc |
@@ -349,8 +349,7 @@ |
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), |
- seen_scroll_update_this_sequence_(false) { |
+ touch_scrolling_mode_(config.touch_scrolling_mode) { |
DCHECK(client); |
if (ack_timeout_enabled_) { |
timeout_handler_.reset( |
@@ -535,37 +534,31 @@ |
void TouchEventQueue::OnGestureScrollEvent( |
const GestureEventWithLatencyInfo& gesture_event) { |
- if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) { |
- seen_scroll_update_this_sequence_ = false; |
- |
+ 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 (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. |
- 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) { |
+ if (touch_ack_states_.empty() || |
+ AllTouchAckStatesHaveState( |
+ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS)) { |
+ touch_filtering_state_ = DROP_TOUCHES_IN_SEQUENCE; |
+ return; |
+ } |
+ } |
+ |
pending_async_touchmove_.reset(); |
send_touch_events_async_ = true; |
needs_async_touchmove_for_outer_slop_region_ = true; |