Index: content/browser/renderer_host/input/gesture_event_queue.cc |
diff --git a/content/browser/renderer_host/input/gesture_event_queue.cc b/content/browser/renderer_host/input/gesture_event_queue.cc |
index 6333de09646b4921801840f7026e742ee3888241..2265ef08c2bc7d3d119ec273f1877075a054db35 100644 |
--- a/content/browser/renderer_host/input/gesture_event_queue.cc |
+++ b/content/browser/renderer_host/input/gesture_event_queue.cc |
@@ -72,7 +72,6 @@ void GestureEventQueue::OnTouchEventAck(InputEventAckState ack_state) { |
} |
GestureSequence& sequence = Head(); |
- sequence.UpdateState(ack_state); |
// Dispatch the packet corresponding to the ack'ed touch, as well as any |
// additional timeout-based packets queued before the ack was received. |
@@ -86,10 +85,16 @@ void GestureEventQueue::OnTouchEventAck(InputEventAckState ack_state) { |
// given ack. |
if (touch_packet_for_current_ack_handled) |
break; |
+ if (!packet.is_independent()) |
+ sequence.UpdateState(ack_state); |
touch_packet_for_current_ack_handled = true; |
} |
- if (!sequence.IsGesturePrevented()) |
+ // In addition to the global filtering state, independent packets may be |
+ // suppressed individually by their local touch ack state. |
+ if (!sequence.IsGesturePrevented() && |
+ !(packet.is_independent() && |
+ ack_state == INPUT_EVENT_ACK_STATE_CONSUMED)) |
SendPacket(packet); |
sequence.Pop(); |