| 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_) {
|
|
|