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 7fb04c5d5986087819c4c205e8a1c764bec6077d..47b7d55f81d7d6f4e98334f16366e7a83e6de100 100644 |
--- a/content/browser/renderer_host/input/touch_event_queue.cc |
+++ b/content/browser/renderer_host/input/touch_event_queue.cc |
@@ -346,11 +346,17 @@ class TouchEventQueue::TouchMoveSlopSuppressor { |
class CoalescedWebTouchEvent { |
public: |
CoalescedWebTouchEvent(const TouchEventWithLatencyInfo& event, |
- bool suppress_client_ack) |
+ bool suppress_client_ack, |
+ bool fling_in_progress) |
: coalesced_event_(event), suppress_client_ack_(suppress_client_ack) { |
TRACE_EVENT_ASYNC_BEGIN0("input", "TouchEventQueue::QueueEvent", this); |
+ coalesced_event_.event.isFlingInProgress = fling_in_progress; |
} |
+ CoalescedWebTouchEvent(const TouchEventWithLatencyInfo& event, |
+ bool suppress_client_ack) |
+ : CoalescedWebTouchEvent(event, suppress_client_ack, false) {} |
+ |
~CoalescedWebTouchEvent() { |
TRACE_EVENT_ASYNC_END0("input", "TouchEventQueue::QueueEvent", this); |
} |
@@ -440,7 +446,8 @@ TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client, |
drop_remaining_touches_in_sequence_(false), |
touchmove_slop_suppressor_(new TouchMoveSlopSuppressor), |
send_touch_events_async_(false), |
- last_sent_touch_timestamp_sec_(0) { |
+ last_sent_touch_timestamp_sec_(0), |
+ fling_in_progress_(false) { |
DCHECK(client); |
if (config.touch_ack_timeout_supported) { |
timeout_handler_.reset( |
@@ -475,7 +482,8 @@ void TouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) { |
// There is no touch event in the queue. Forward it to the renderer |
// immediately. |
- touch_queue_.push_back(new CoalescedWebTouchEvent(event, false)); |
+ touch_queue_.push_back( |
+ new CoalescedWebTouchEvent(event, false, fling_in_progress_)); |
ForwardNextEventToRenderer(); |
return; |
} |
@@ -487,7 +495,8 @@ void TouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) { |
if (last_event->CoalesceEventIfPossible(event)) |
return; |
} |
- touch_queue_.push_back(new CoalescedWebTouchEvent(event, false)); |
+ touch_queue_.push_back( |
+ new CoalescedWebTouchEvent(event, false, fling_in_progress_)); |
} |
void TouchEventQueue::PrependTouchScrollNotification() { |
@@ -666,6 +675,11 @@ void TouchEventQueue::FlushPendingAsyncTouchmove() { |
void TouchEventQueue::OnGestureScrollEvent( |
const GestureEventWithLatencyInfo& gesture_event) { |
+ if (gesture_event.event.type == WebInputEvent::GestureFlingStart) |
+ fling_in_progress_ = true; |
+ else if (gesture_event.event.type == WebInputEvent::GestureFlingCancel) |
+ fling_in_progress_ = false; |
+ |
if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) { |
if (has_handler_for_current_sequence_ && |
!drop_remaining_touches_in_sequence_) { |