Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(912)

Unified Diff: ui/events/gestures/gesture_event_queue_unittest.cc

Issue 101933004: Eager Gesture Recognizer (WIP) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Starting work on Android. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/gestures/gesture_event_queue.cc ('k') | ui/events/gestures/gesture_recognizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/gestures/gesture_event_queue_unittest.cc
diff --git a/ui/events/gestures/gesture_event_queue_unittest.cc b/ui/events/gestures/gesture_event_queue_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ea82e24529d8e88c341fc36f913ebb9bf5ba6fa0
--- /dev/null
+++ b/ui/events/gestures/gesture_event_queue_unittest.cc
@@ -0,0 +1,454 @@
+// Copyright 2013 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 "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event.h"
+#include "ui/events/gestures/gesture_event_queue.h"
+#include "ui/events/gestures/test/eager_gesture_recognition_test_base.h"
+#include "ui/events/gestures/touch_point_state.h"
+
+using testing::ElementsAre;
+
+namespace ui {
+namespace test {
+
+namespace {
+
+// Used to condense definitions of ScopedVectors of TouchPointStates.
+class TPStates : public std::vector<TouchPointState*> {
+ public:
+ TPStates(int n, ...) {
+ va_list ap;
+ va_start(ap, n);
+
+ TouchPointState* tps;
+ for (int i = 0; i < n; ++i) {
+ tps = va_arg(ap, TouchPointState*);
+ push_back(tps);
+ }
+ va_end(ap);
+ }
+
+ TPStates(int touch_id,
+ bool has_press,
+ bool has_release,
+ int move_count,
+ int timer_count) {
+ push_back(new TouchPointState(
+ touch_id, has_press, has_release, move_count, timer_count));
+ }
+};
+
+class MockGestureEventQueueDelegate: public GestureEventQueueDelegate {
+ public:
+ MockGestureEventQueueDelegate() {}
+ virtual ~MockGestureEventQueueDelegate() {}
+ std::vector<EventType> GetAndResetDispatchedEvents() {
+ std::vector<EventType> tmp;
+ dispatched_events_.swap(tmp);
+ return tmp;
+
+ }
+ virtual void DispatchGestureEvent(GestureEvent* event) OVERRIDE {
+ dispatched_events_.push_back(event->type());
+ }
+
+ private:
+ std::vector<EventType> dispatched_events_;
+};
+
+class TestGestureEventQueue : public GestureEventQueue{
+ public:
+ TestGestureEventQueue(MockGestureEventQueueDelegate* delegate)
+ : GestureEventQueue(delegate)
+ , mock_delegate_(delegate) {
+ }
+
+ std::vector<EventType> GetAndResetDispatchedEvents() {
+ return mock_delegate_->GetAndResetDispatchedEvents();
+ }
+
+ std::list<size_t> SequenceSizes() {
+ std::list<size_t> sizes;
+ for (std::list<Sequence*>::iterator it = sequences_.begin();
+ it != sequences_.end();
+ ++it) {
+ sizes.push_back((*it)->size());
+ }
+ return sizes;
+ }
+
+ void QueueForTest(
+ GestureEvent* event,
+ std::vector<TouchPointState*>& touch_point_states) {
+ QueueGestureEvent(event, touch_point_states);
+ }
+
+ private:
+ MockGestureEventQueueDelegate* mock_delegate_;
+ DISALLOW_COPY_AND_ASSIGN(TestGestureEventQueue);
+};
+
+class GestureEventQueueTest : public EagerGestureRecognitionTestBase {
+ public:
+ GestureEventQueueTest() {}
+ virtual void SetUp() {
+ EagerGestureRecognitionTestBase::SetUp();
+ delegate_.reset(new MockGestureEventQueueDelegate());
+ geq_.reset(new TestGestureEventQueue(delegate_.get()));
+ }
+
+ virtual void TearDown() {
+ geq_.reset();
+ EagerGestureRecognitionTestBase::TearDown();
+ }
+
+ TestGestureEventQueue& geq() { return *geq_.get(); }
+
+ private:
+ scoped_ptr<TestGestureEventQueue> geq_;
+ scoped_ptr<MockGestureEventQueueDelegate> delegate_;
+ DISALLOW_COPY_AND_ASSIGN(GestureEventQueueTest);
+};
+
+} // namespace
+
+// Ensure that GESTURE_BEGIN creates a new sequence in the queue. We ensure
+// no events are acked, to simplify the test.
+TEST_F(GestureEventQueueTest, QueueGestureEvent) {
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre());
+
+ // QueueForTest takes ownership of the elements of the TPStates object, and
+ // empties it, so we can't reuse these objects.
+ TPStates never_send_1(0, false, false, 100, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_1);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+
+ TPStates never_send_2(0, false, false, 100, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), never_send_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+
+ TPStates never_send_3(0, false, false, 100, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_3);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 1));
+
+ TPStates never_send_4(0, false, false, 100, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), never_send_4);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 2));
+
+ TPStates never_send_5(0, false, false, 100, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_5);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 2, 1));
+}
+
+TEST_F(GestureEventQueueTest, OnTouchEventAckNotConsumed) {
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre());
+
+ TPStates depends_on_nothing(0, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_press_1(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press_1);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press_2(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_BEGIN),
+ depends_on_press_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_1_move(0, true, false, 1, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE),
+ depends_on_1_move);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(3));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_2_moves(0, true, false, 2, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE),
+ depends_on_2_moves);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(4));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press_3(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_press_3);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(4, 1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack TAP_DOWN and SCROLL_BEGIN.
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN, ET_GESTURE_SCROLL_BEGIN));
+
+ // Ack SCROLL_UPDATE.
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1, 1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE));
+
+ // Ack SCROLL_UPDATE, which is the end of this sequence. We could dispatch the
+ // next GESTURE_BEGIN at this point, but at this point it isn't clear if we
+ // want to dispatch it before the press receives an ack.
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0, 1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE));
+}
+
+TEST_F(GestureEventQueueTest, OnTouchEventAckConsumed) {
+ TPStates depends_on_nothing(0, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_press(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press_and_move(0, true, false, 1, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP),
+ depends_on_press_and_move);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_move(0, false, false, 1, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE),
+ depends_on_move);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(3));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Consume press event.
+ geq().OnTouchEventAck(Press(0), ui::ER_CONSUMED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack move event.
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE));
+}
+
+TEST_F(GestureEventQueueTest, SimpleMultiFingerTest) {
+ TPStates depends_on_nothing(1, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_press(1, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), depends_on_press);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press_2(2, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), depends_on_press_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack touch 1 press.
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+
+ // Ack touch 2 press.
+ geq().OnTouchEventAck(Press(2), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP));
+}
+
+TEST_F(GestureEventQueueTest, StaysInOrder) {
+ TPStates depends_on_nothing(1, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_press(1, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), depends_on_press);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press_2(2, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), depends_on_press_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack touch 2 press.
+ geq().OnTouchEventAck(Press(2), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre());
+
+ // Ack touch 1 press.
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP));
+
+}
+
+TEST_F(GestureEventQueueTest, DependsTwoFingers) {
+ TPStates depends_on_nothing(1, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_presses(2,
+ new TouchPointState(4, true, false, 0, 0),
+ new TouchPointState(1, true, false, 0, 0));
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_presses);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack touch 4 press.
+ geq().OnTouchEventAck(Press(4), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre());
+
+ // Ack touch 1 press.
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+}
+
+TEST_F(GestureEventQueueTest, OnTouchEventAckConsumedBeforeGestureArrives) {
+ TPStates depends_on_nothing(0, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ // Consume press event.
+ geq().OnTouchEventAck(Press(0), ui::ER_CONSUMED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_press(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack press event.
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+}
+
+// Touch down with touch point 0. Then tap twice with touch point 1.
+TEST_F(GestureEventQueueTest, ResetTouchPointOnRelease) {
+ TPStates depends_on_nothing(0, false, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN),
+ depends_on_nothing);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates depends_on_press_0(0, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press_0);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack the zeroth press.
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+
+ TPStates depends_on_press_1(1, true, false, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press_1);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_release_1(1, true, true, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP),
+ depends_on_release_1);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack the first press.
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+
+ // Ack the release.
+ geq().OnTouchEventAck(Release(1),
+ ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP));
+
+ TPStates depends_on_press_1_2(1, true, false, 0, 0);
+ // Now tap again with touch point 1.
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN),
+ depends_on_press_1_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ TPStates depends_on_release_1_2(1, true, true, 0, 0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP),
+ depends_on_release_1_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre());
+
+ // Ack touch point 1's second press.
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+
+ // Ack touch point 1's second release.
+ geq().OnTouchEventAck(Release(1),
+ ui::ER_UNHANDLED);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP));
+}
+
+TEST_F(GestureEventQueueTest, NoAckTest) {
+ TPStates empty_1(0);
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), empty_1);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_BEGIN));
+
+ TPStates empty_2(0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), empty_2);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP_DOWN));
+
+ TPStates empty_3(0);
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), empty_3);
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0));
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(),
+ ElementsAre(ET_GESTURE_TAP));
+}
+
+} // namespace test
+} // namespace ui
« no previous file with comments | « ui/events/gestures/gesture_event_queue.cc ('k') | ui/events/gestures/gesture_recognizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698