// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_INPUT_GESTURE_EVENT_QUEUE_H_ #define COMPONENTS_INPUT_GESTURE_EVENT_QUEUE_H_ #include <stddef.h> #include "base/containers/circular_deque.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "components/input/event_with_latency_info.h" #include "components/input/fling_controller.h" #include "base/component_export.h" #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/mojom/input/input_event_result.mojom-shared.h" namespace content { class MockRenderWidgetHost; } // namespace content namespace input { class GestureEventQueueTest; // Interface with which the GestureEventQueue can forward gesture events, and // dispatch gesture event responses. class COMPONENT_EXPORT(INPUT) GestureEventQueueClient { … }; // Despite its name, this class isn't so much one queue as it is a collection // of queues and filters. This class applies logic to determine if an event // should be queued, filtered altogether, or sent immediately; it tracks sent // events and ACKs them to the clilent in the order they were dispatched. This // class applies a series of filters and queues for various scenarios: // 1. The sequence is filtered for bounces. A bounce is when the finger lifts // from the screen briefly during an in-progress scroll. If this happens, // non-GestureScrollUpdate events are queued until the de-bounce interval // passes or another GestureScrollUpdate event occurs. // 2. Unnecessary GestureFlingCancel events are filtered by fling controller. // These are GestureFlingCancels that have no corresponding GestureFlingStart // in the queue. GestureFlingStarts are also filtered and translated to // scroll gestures by the fling controller. // 3. Taps immediately after a GestureFlingCancel (caused by the same tap) are // filtered by fling controller. // 4. Gesture events are queued while we're waiting to determine the allowed // touch actions. // Sent events are kept in a queue until a response from the renderer is // received for that event. The client is notified of ACKs in the order the // events were sent, not ACK'd. This means an ACK'd event that was sent after // an event still awaiting an ACK won't notify the client until the earlier // event is ACK'd. class COMPONENT_EXPORT(INPUT) GestureEventQueue { … }; } // namespace input #endif // COMPONENTS_INPUT_GESTURE_EVENT_QUEUE_H_