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 |
deleted file mode 100644 |
index 6333de09646b4921801840f7026e742ee3888241..0000000000000000000000000000000000000000 |
--- a/content/browser/renderer_host/input/gesture_event_queue.cc |
+++ /dev/null |
@@ -1,216 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/browser/renderer_host/input/gesture_event_queue.h" |
- |
-#include "base/auto_reset.h" |
-#include "base/bind.h" |
-#include "base/logging.h" |
- |
-using blink::WebGestureEvent; |
-using blink::WebInputEvent; |
-using blink::WebTouchEvent; |
-using blink::WebTouchPoint; |
- |
-namespace content { |
-namespace { |
- |
-WebGestureEvent CreateGesture(WebInputEvent::Type type) { |
- DCHECK(WebInputEvent::isGestureEventType(type)); |
- WebGestureEvent event; |
- event.type = type; |
- event.sourceDevice = WebGestureEvent::Touchscreen; |
- return event; |
-} |
- |
-} // namespace |
- |
-// GestureEventQueue |
- |
-GestureEventQueue::GestureEventQueue(GestureEventQueueClient* client) |
- : client_(client), |
- needs_tap_ending_event_(false), |
- needs_fling_ending_event_(false) { |
- DCHECK(client_); |
-} |
- |
-GestureEventQueue::~GestureEventQueue() {} |
- |
-void GestureEventQueue::OnGestureEventPacket(const GestureEventPacket& packet) { |
- switch (packet.gesture_source()) { |
- case GestureEventPacket::TOUCH_BEGIN: |
- sequences_.push(GestureSequence()); |
- break; |
- |
- case GestureEventPacket::TOUCH: |
- break; |
- |
- case GestureEventPacket::TOUCH_TIMEOUT: |
- // Handle the timeout packet immediately if the packet preceding the |
- // timeout has already been dispatched. |
- if (Tail().IsEmpty()) { |
- if (!Tail().IsGesturePrevented()) |
- SendPacket(packet); |
- return; |
- } |
- break; |
- |
- case GestureEventPacket::INVALID: |
- NOTREACHED() << "Invalid gesture packet detected."; |
- break; |
- } |
- |
- Tail().Push(packet); |
-} |
- |
-void GestureEventQueue::OnTouchEventAck(InputEventAckState ack_state) { |
- if (Head().IsEmpty()) { |
- CancelTapIfNecessary(); |
- CancelFlingIfNecessary(); |
- sequences_.pop(); |
- } |
- |
- 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. |
- bool touch_packet_for_current_ack_handled = false; |
- while (!sequence.IsEmpty()) { |
- const GestureEventPacket& packet = sequence.Front(); |
- |
- if (packet.gesture_source() == GestureEventPacket::TOUCH_BEGIN || |
- packet.gesture_source() == GestureEventPacket::TOUCH) { |
- // We should handle at most one touch-based packet corresponding to a |
- // given ack. |
- if (touch_packet_for_current_ack_handled) |
- break; |
- touch_packet_for_current_ack_handled = true; |
- } |
- |
- if (!sequence.IsGesturePrevented()) |
- SendPacket(packet); |
- |
- sequence.Pop(); |
- } |
- DCHECK(touch_packet_for_current_ack_handled); |
- |
- // Immediately cancel a TapDown if TouchStart went unconsumed, but a |
- // subsequent TouchMove is consumed. |
- if (sequence.IsGesturePrevented()) |
- CancelTapIfNecessary(); |
-} |
- |
-void GestureEventQueue::SendPacket(const GestureEventPacket& packet) { |
- for (size_t i = 0; i < packet.gesture_count(); ++i) |
- SendGesture(packet.gesture(i)); |
-} |
- |
-void GestureEventQueue::SendGesture(const WebGestureEvent& event) { |
- switch (event.type) { |
- case WebInputEvent::GestureLongTap: |
- CancelTapIfNecessary(); |
- CancelFlingIfNecessary(); |
- break; |
- case WebInputEvent::GestureTapDown: |
- needs_tap_ending_event_ = true; |
- break; |
- case WebInputEvent::GestureTapCancel: |
- case WebInputEvent::GestureTap: |
- case WebInputEvent::GestureTapUnconfirmed: |
- case WebInputEvent::GestureDoubleTap: |
- needs_tap_ending_event_ = false; |
- break; |
- case WebInputEvent::GestureScrollBegin: |
- CancelTapIfNecessary(); |
- CancelFlingIfNecessary(); |
- break; |
- case WebInputEvent::GestureFlingStart: |
- CancelFlingIfNecessary(); |
- needs_fling_ending_event_ = true; |
- break; |
- case WebInputEvent::GestureFlingCancel: |
- needs_fling_ending_event_ = false; |
- break; |
- default: |
- break; |
- } |
- client_->ForwardGestureEvent(event); |
-} |
- |
-void GestureEventQueue::CancelTapIfNecessary() { |
- if (!needs_tap_ending_event_) |
- return; |
- |
- SendGesture(CreateGesture(WebInputEvent::GestureTapCancel)); |
- DCHECK(!needs_tap_ending_event_); |
-} |
- |
-void GestureEventQueue::CancelFlingIfNecessary() { |
- if (!needs_fling_ending_event_) |
- return; |
- |
- SendGesture(CreateGesture(WebInputEvent::GestureFlingCancel)); |
- DCHECK(!needs_fling_ending_event_); |
-} |
- |
-GestureEventQueue::GestureSequence& GestureEventQueue::Head() { |
- DCHECK(!sequences_.empty()); |
- return sequences_.front(); |
-} |
- |
-GestureEventQueue::GestureSequence& GestureEventQueue::Tail() { |
- DCHECK(!sequences_.empty()); |
- return sequences_.back(); |
-} |
- |
- |
-// GestureEventQueue::GestureSequence |
- |
-GestureEventQueue::GestureSequence::GestureSequence() |
- : state_(PENDING) {} |
- |
-GestureEventQueue::GestureSequence::~GestureSequence() {} |
- |
-void GestureEventQueue::GestureSequence::Push( |
- const GestureEventPacket& packet) { |
- packets_.push(packet); |
-} |
- |
-void GestureEventQueue::GestureSequence::Pop() { |
- DCHECK(!IsEmpty()); |
- packets_.pop(); |
-} |
- |
-const GestureEventPacket& GestureEventQueue::GestureSequence::Front() const { |
- DCHECK(!IsEmpty()); |
- return packets_.front(); |
-} |
- |
-void GestureEventQueue::GestureSequence::UpdateState( |
- InputEventAckState ack_state) { |
- DCHECK_NE(INPUT_EVENT_ACK_STATE_UNKNOWN, ack_state); |
- // Permanent states will not be affected by subsequent ack's. |
- if (state_ != PENDING && state_ != ALLOWED_UNTIL_PREVENTED) |
- return; |
- |
- // |NO_CONSUMER| should only be effective when the *first* touch is ack'ed. |
- if (state_ == PENDING && |
- ack_state == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) |
- state_ = ALWAYS_ALLOWED; |
- else if (ack_state == INPUT_EVENT_ACK_STATE_CONSUMED) |
- state_ = ALWAYS_PREVENTED; |
- else |
- state_ = ALLOWED_UNTIL_PREVENTED; |
-} |
- |
-bool GestureEventQueue::GestureSequence::IsGesturePrevented() const { |
- return state_ == ALWAYS_PREVENTED; |
-} |
- |
-bool GestureEventQueue::GestureSequence::IsEmpty() const { |
- return packets_.empty(); |
-} |
- |
-} // namespace content |