1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/basictypes.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/touch_disposition_gesture_filter.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/test/mock_motion_event.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ui::test::MockMotionEvent; 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kDefaultEventFlags = EF_ALT_DOWN | EF_SHIFT_DOWN; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class TouchDispositionGestureFilterTest 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public testing::Test, 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public TouchDispositionGestureFilterClient { 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TouchDispositionGestureFilterTest() 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : cancel_after_next_gesture_(false), sent_gesture_count_(0) {} 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~TouchDispositionGestureFilterTest() {} 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // testing::Test 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUp() OVERRIDE { 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) queue_.reset(new TouchDispositionGestureFilter(this)); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_event_.set_flags(kDefaultEventFlags); 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void TearDown() OVERRIDE { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) queue_.reset(); 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TouchDispositionGestureFilterClient 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void ForwardGestureEvent(const GestureEventData& event) OVERRIDE { 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ++sent_gesture_count_; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_sent_gesture_.reset(new GestureEventData(event)); 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sent_gestures_.push_back(event.type()); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (event.type() == ET_GESTURE_SHOW_PRESS) 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci show_press_bounding_box_ = event.details.bounding_box(); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (cancel_after_next_gesture_) { 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cancel_after_next_gesture_ = false; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CancelTouchPoint(); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected: 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef std::vector<EventType> GestureList; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ::testing::AssertionResult GesturesMatch(const GestureList& expected, 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GestureList& actual) { 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (expected.size() != actual.size()) { 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ::testing::AssertionFailure() 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << "actual.size(" << actual.size() 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << ") != expected.size(" << expected.size() << ")"; 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < expected.size(); ++i) { 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (expected[i] != actual[i]) { 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ::testing::AssertionFailure() 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << "actual[" << i << "] (" 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << actual[i] 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << ") != expected[" << i << "] (" 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << expected[i] << ")"; 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ::testing::AssertionSuccess(); 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList Gestures(EventType type) { 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GestureList(1, type); 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList Gestures(EventType type0, EventType type1) { 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList gestures(2); 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[0] = type0; 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[1] = type1; 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gestures; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList Gestures(EventType type0, 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EventType type1, 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EventType type2) { 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList gestures(3); 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[0] = type0; 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[1] = type1; 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[2] = type2; 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gestures; 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList Gestures(EventType type0, 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EventType type1, 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EventType type2, 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EventType type3) { 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList gestures(4); 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[0] = type0; 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[1] = type1; 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[2] = type2; 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gestures[3] = type3; 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gestures; 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SendTouchGestures() { 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) touch_event_.set_event_time(base::TimeTicks::Now()); 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(TouchDispositionGestureFilter::SUCCESS, 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchGestures(touch_event_, pending_gesture_packet_)); 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket gesture_packet; 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::swap(gesture_packet, pending_gesture_packet_); 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TouchDispositionGestureFilter::PacketResult 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchGestures(const MotionEvent& touch, 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GestureEventDataPacket& packet) { 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket touch_packet = 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket::FromTouch(touch); 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < packet.gesture_count(); ++i) 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch_packet.Push(packet.gesture(i)); 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return queue_->OnGesturePacket(touch_packet); 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TouchDispositionGestureFilter::PacketResult 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(EventType type) { 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return queue_->OnGesturePacket( 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket::FromTouchTimeout(CreateGesture(type))); 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TouchDispositionGestureFilter::PacketResult 134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendGesturePacket(const GestureEventDataPacket& packet) { 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return queue_->OnGesturePacket(packet); 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SendTouchEventAck(bool event_consumed) { 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) queue_->OnTouchEventAck(event_consumed); 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void SendTouchConsumedAck() { SendTouchEventAck(true); } 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void SendTouchNotConsumedAck() { SendTouchEventAck(false); } 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void PushGesture(EventType type) { 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) pending_gesture_packet_.Push(CreateGesture(type)); 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void PushGesture(EventType type, float x, float y, float diameter) { 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pending_gesture_packet_.Push(CreateGesture(type, x, y, diameter)); 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void PressTouchPoint(int x, int y) { 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch_event_.PressPoint(x, y); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) touch_event_.SetRawOffset(raw_offset_.x(), raw_offset_.y()); 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchGestures(); 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void MoveTouchPoint(size_t index, int x, int y) { 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch_event_.MovePoint(index, x, y); 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) touch_event_.SetRawOffset(raw_offset_.x(), raw_offset_.y()); 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchGestures(); 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void ReleaseTouchPoint() { 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch_event_.ReleasePoint(); 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchGestures(); 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void CancelTouchPoint() { 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch_event_.CancelPoint(); 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchGestures(); 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void SetRawTouchOffset(const gfx::Vector2dF& raw_offset) { 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) raw_offset_ = raw_offset; 1786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 1796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void ResetTouchPoints() { touch_event_ = MockMotionEvent(); } 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool GesturesSent() const { return !sent_gestures_.empty(); } 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeTicks LastSentGestureTime() const { 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(last_sent_gesture_); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return last_sent_gesture_->time; 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::TimeTicks CurrentTouchTime() const { 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return touch_event_.GetEventTime(); 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool IsEmpty() const { return queue_->IsEmpty(); } 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList GetAndResetSentGestures() { 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList sent_gestures; 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sent_gestures.swap(sent_gestures_); 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return sent_gestures; 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::PointF LastSentGestureLocation() const { 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(last_sent_gesture_); 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return gfx::PointF(last_sent_gesture_->x, last_sent_gesture_->y); 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::PointF LastSentGestureRawLocation() const { 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(last_sent_gesture_); 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return gfx::PointF(last_sent_gesture_->raw_x, last_sent_gesture_->raw_y); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int LastSentGestureFlags() const { 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(last_sent_gesture_); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return last_sent_gesture_->flags; 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::RectF& ShowPressBoundingBox() const { 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return show_press_bounding_box_; 2186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 2196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void SetCancelAfterNextGesture(bool cancel_after_next_gesture) { 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cancel_after_next_gesture_ = cancel_after_next_gesture; 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GestureEventData CreateGesture(EventType type) { 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return CreateGesture(type, 0, 0, 0); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GestureEventData CreateGesture(EventType type, 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float x, 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float y, 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float diameter) { 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GestureEventData( 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GestureEventDetails(type), 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MotionEvent::TOOL_TYPE_FINGER, 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks(), 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_event_.GetX(0), 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_event_.GetY(0), 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_event_.GetRawX(0), 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch_event_.GetRawY(0), 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::RectF(x - diameter / 2, y - diameter / 2, diameter, diameter), 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kDefaultEventFlags); 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<TouchDispositionGestureFilter> queue_; 2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool cancel_after_next_gesture_; 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockMotionEvent touch_event_; 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket pending_gesture_packet_; 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t sent_gesture_count_; 252a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureList sent_gestures_; 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::Vector2dF raw_offset_; 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<GestureEventData> last_sent_gesture_; 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::RectF show_press_bounding_box_; 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, BasicNoGestures) { 259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // No gestures should be dispatched by the ack, as the queued packets 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // contained no gestures. 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Release the touch gesture. 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, BasicGestures) { 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An unconsumed touch's gesture should be sent. 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_BEGIN); 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_BEGIN, ET_GESTURE_SCROLL_BEGIN), 285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Multiple gestures can be queued for a single event. 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_CANCEL); 290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_END); 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 294a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_SCROLL_FLING_START, 295c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_SCROLL_FLING_CANCEL, 296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_END), 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, BasicGesturesConsumed) { 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A consumed touch's gesture should not be sent. 302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_BEGIN); 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 308c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_SCROLL_UPDATE); 309c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MoveTouchPoint(0, 2, 2); 310c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchConsumedAck(); 311c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(GesturesSent()); 312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_CANCEL); 315c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_END); 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, ConsumedThenNotConsumed) { 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A consumed touch's gesture should not be sent. 323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Even if the subsequent touch is not consumed, continue dropping gestures. 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Even if the subsequent touch had no consumer, continue dropping gestures. 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenConsumed) { 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A not consumed touch's gesture should be sent. 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A newly consumed gesture should not be sent. 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(10, 10); 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // And subsequent non-consumed pinch updates should not be sent. 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_UPDATE); 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_UPDATE), 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // End events dispatched only when their start events were. 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, ScrollAlternatelyConsumed) { 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A consumed touch's gesture should not be sent. 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 381a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < 3; ++i) { 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 3, 3); 392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_UPDATE), 394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenNoConsumer) { 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An unconsumed touch's gesture should be sent. 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the subsequent touch has no consumer (e.g., a secondary pointer is 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // pressed but not on a touch handling rect), send the gesture. 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(2, 2); 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_BEGIN), 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // End events should be dispatched when their start events were, independent 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // of the ack state. 422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_END), 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, EndingEventsSent) { 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(2, 2); 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_BEGIN), 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Consuming the touchend event can't suppress the match end gesture. 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_END), 453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // But other events in the same packet are still suppressed. 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // ET_GESTURE_SCROLL_END and ET_SCROLL_FLING_START behave the same in this 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // regard. 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_SCROLL_FLING_START), 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, EndingEventsNotSent) { 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Consuming a begin event ensures no end events are sent. 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(2, 2); 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 491a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 500a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, UpdateEventsSuppressedPerEvent) { 502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Consuming a single scroll or pinch update should suppress only that event. 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(2, 2); 516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_BEGIN), 518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_UPDATE); 521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(1, 2, 3); 522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Subsequent updates should not be affected. 526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 4, 4); 528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_UPDATE), 530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_UPDATE); 533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 4, 5); 534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_UPDATE), 536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_END), 542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, UpdateEventsDependOnBeginEvents) { 552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Scroll and pinch gestures depend on the scroll begin gesture being 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // dispatched. 559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_BEGIN); 565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(2, 2); 566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_UPDATE); 570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(1, 2, 3); 571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_PINCH_END); 575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, MultipleTouchSequences) { 586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Queue two touch-to-gestures sequences. 587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 589a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP); 590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 592a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 593a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 594a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 595a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 596a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The first gesture sequence should not be allowed. 597a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 599a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The subsequent sequence should "reset" allowance. 602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN, 605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_GESTURE_SCROLL_END), 606a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnNewTouchSequence) { 6106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const gfx::Vector2dF raw_offset(1.3f, 3.7f); 6116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetRawTouchOffset(raw_offset); 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Simulate a fling. 614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 616a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 617a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch( 619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Gestures( 620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP_CANCEL, ET_GESTURE_SCROLL_BEGIN), 621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_SCROLL_FLING_START), 626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 628010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // A new touch sequence should cancel the outstanding fling. 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_SCROLL_FLING_CANCEL), 632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 633010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 6356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(LastSentGestureRawLocation(), gfx::PointF(1, 1) + raw_offset); 636a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 639a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 641010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, ScrollEndedOnTouchReleaseIfNoFling) { 642a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Simulate a scroll. 643c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 647c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch( 648c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Gestures( 649c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP_CANCEL, ET_GESTURE_SCROLL_BEGIN), 650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 653010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 654010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetAndResetSentGestures())); 655010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 657010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 658010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 659010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, ScrollEndedOnNewTouchSequence) { 660010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Simulate a scroll. 661010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 662010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 663010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PressTouchPoint(1, 1); 664010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SendTouchNotConsumedAck(); 665010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(GesturesMatch( 666010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Gestures( 667010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP_CANCEL, ET_GESTURE_SCROLL_BEGIN), 668010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetAndResetSentGestures())); 669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 670010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // A new touch sequence should end the outstanding scroll. 671010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ResetTouchPoints(); 672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PressTouchPoint(2, 3); 673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 676010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(2, 3)); 678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 680a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnScrollBegin) { 681a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Simulate a fling sequence. 682c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 683a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 684a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 686a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 687c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN, 688c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_TAP_CANCEL, 689c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_SCROLL_BEGIN, 690a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_SCROLL_FLING_START), 691a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 692a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 693a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The new fling should cancel the preceding one. 694a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 695a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 696a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_SCROLL_FLING_CANCEL, 699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_GESTURE_SCROLL_BEGIN, 700a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_SCROLL_FLING_START), 701a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 702a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 703a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 704a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, FlingNotCancelledIfGFCEventReceived) { 705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Simulate a fling that is started then cancelled. 706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 707a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_START); 710cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MoveTouchPoint(0, 2, 3); 711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_SCROLL_FLING_CANCEL); 713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 714a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 715a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN, 716a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_SCROLL_FLING_START, 717a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_SCROLL_FLING_CANCEL), 718a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 719cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(2, 3)); 720a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 721a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // A new touch sequence will not inject a ET_SCROLL_FLING_CANCEL, as the fling 722a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // has already been cancelled. 723a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 724a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 725a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 726a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 727a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 728a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 729a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 730a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, TapCancelledWhenScrollBegins) { 731a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 734a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 736a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the subsequent touch turns into a scroll, the tap should be cancelled. 738a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 739a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 740a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 741a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL, 742a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_GESTURE_SCROLL_BEGIN), 743a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 744a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 745a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, TapCancelledWhenTouchConsumed) { 747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 751a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the subsequent touch is consumed, the tap should be cancelled. 754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 2, 2); 756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE( 758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL, ET_GESTURE_SCROLL_BEGIN), 759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetAndResetSentGestures())); 760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, 764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TapNotCancelledIfTapEndingEventReceived) { 765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 766a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 767a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 768cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE( 769cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), GetAndResetSentGestures())); 770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP); 772a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 774cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS, ET_GESTURE_TAP), 775a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 777a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The tap should not be cancelled as it was terminated by a |ET_GESTURE_TAP|. 778cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PressTouchPoint(2, 2); 779a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 780a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 781a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, TimeoutGestures) { 784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the sequence is allowed, and there are no preceding gestures, the 785a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // timeout gestures should be forwarded immediately. 786c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 787a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 788a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 789c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 791a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 792a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_SHOW_PRESS); 793a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS), 794a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 795a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 796a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_LONG_PRESS); 797a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_LONG_PRESS), 798a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 799a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 800c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_LONG_TAP); 801a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 802a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 803c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL, 804c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_LONG_TAP), 805c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 806a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 807a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the sequence is disallowed, and there are no preceding gestures, the 808a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // timeout gestures should be dropped immediately. 809c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 810a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 811a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 812a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 813a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_SHOW_PRESS); 815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 816a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 817a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 818a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 819a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If the sequence has a pending ack, the timeout gestures should 820a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // remain queued until the ack is received. 821c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 822a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 823a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 824a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 825a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_LONG_PRESS); 826a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 827a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 828a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 829c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN, 830c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_LONG_PRESS), 831a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 832a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 833a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 834a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, SpuriousAcksIgnored) { 835a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Acks received when the queue is empty will be safely ignored. 836a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(IsEmpty()); 837a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 838a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 839a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 840a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_BEGIN); 841a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_UPDATE); 843a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MoveTouchPoint(0, 3,3); 844a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 845a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 846a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN, 847a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_GESTURE_SCROLL_UPDATE), 848a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 849a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 850a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Even if all packets have been dispatched, the filter may not be empty as 851a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // there could be follow-up timeout events. Spurious acks in such cases 852a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // should also be safely ignored. 853a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_FALSE(IsEmpty()); 854a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 855a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 856a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 857a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 858a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, PacketWithInvalidTypeIgnored) { 859a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket packet; 860a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(TouchDispositionGestureFilter::INVALID_PACKET_TYPE, 861a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendGesturePacket(packet)); 862a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(IsEmpty()); 863a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 864a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 865a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, PacketsWithInvalidOrderIgnored) { 866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(TouchDispositionGestureFilter::INVALID_PACKET_ORDER, 867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_SHOW_PRESS)); 868a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(IsEmpty()); 869a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 870a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 871a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, ConsumedTouchCancel) { 872a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // An unconsumed touch's gesture should be sent. 873a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 874a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 875a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 876a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 877a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 878a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 879a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 880a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_CANCEL); 881a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_SCROLL_END); 882a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CancelTouchPoint(); 883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchConsumedAck(); 885a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL, 886a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ET_GESTURE_SCROLL_END), 887a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 888a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 889a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 890a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, TimeoutEventAfterRelease) { 891a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PressTouchPoint(1, 1); 892a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 893a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(GesturesSent()); 8945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_TAP_DOWN); 895a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_UNCONFIRMED); 896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReleaseTouchPoint(); 897a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTouchNotConsumedAck(); 8985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE( 8995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP_UNCONFIRMED), 9005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 901a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 902a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SendTimeoutGesture(ET_GESTURE_TAP); 9035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS, ET_GESTURE_TAP), 904a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetAndResetSentGestures())); 905a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 907c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(TouchDispositionGestureFilterTest, ShowPressInsertedBeforeTap) { 908c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 909c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 910c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 911c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 912c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 913c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 914c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTimeoutGesture(ET_GESTURE_TAP_UNCONFIRMED); 915c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_UNCONFIRMED), 916c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 917c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 918c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP); 919c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ReleaseTouchPoint(); 920c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 921c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS, 922c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ET_GESTURE_TAP), 923c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 924c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 925c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 926c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(TouchDispositionGestureFilterTest, ShowPressNotInsertedIfAlreadySent) { 927c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 928c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 929c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 930c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 931c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 932c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 933c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTimeoutGesture(ET_GESTURE_SHOW_PRESS); 934c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS), 935c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 936c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 937c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP); 938c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ReleaseTouchPoint(); 939c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 940c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP), 941c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 942c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 943c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 944c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(TouchDispositionGestureFilterTest, TapAndScrollCancelledOnTouchCancel) { 9456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const gfx::Vector2dF raw_offset(1.3f, 3.7f); 9466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetRawTouchOffset(raw_offset); 9475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 948c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_TAP_DOWN); 949c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 950c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 951c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 952c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 953c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 9545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // A cancellation motion event should cancel the tap. 955c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CancelTouchPoint(); 956c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 9575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL), 9585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 959010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 960cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 9616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(LastSentGestureRawLocation(), gfx::PointF(1, 1) + raw_offset); 962c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 963c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_SCROLL_BEGIN); 964c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 965c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 9665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 967c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 968c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 969c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // A cancellation motion event should end the scroll, even if the touch was 970c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // consumed. 971c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CancelTouchPoint(); 972c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchConsumedAck(); 973c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END), 974c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 975010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 976cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 9776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(LastSentGestureRawLocation(), gfx::PointF(1, 1) + raw_offset); 978c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 979c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 980c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(TouchDispositionGestureFilterTest, 981c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ConsumedScrollUpdateMakesFlingScrollEnd) { 982c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // A consumed touch's gesture should not be sent. 983c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_BEGIN); 984c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_SCROLL_BEGIN); 985c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 986c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 987c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 988c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE( 989c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GesturesMatch(Gestures(ET_GESTURE_BEGIN, ET_GESTURE_SCROLL_BEGIN), 990c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 991c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 992c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_SCROLL_UPDATE); 993c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MoveTouchPoint(0, 2, 2); 994c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchConsumedAck(); 995c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(GesturesSent()); 996c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 997c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_SCROLL_FLING_START); 998c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_SCROLL_FLING_CANCEL); 999c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_END); 1000c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ReleaseTouchPoint(); 1001c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 10021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_END, ET_GESTURE_END), 1003c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 1004cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(2, 2)); 1005c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1006c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_BEGIN); 1007c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PushGesture(ET_GESTURE_SCROLL_BEGIN); 1008c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PressTouchPoint(1, 1); 1009c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SendTouchNotConsumedAck(); 1010c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_BEGIN, ET_GESTURE_SCROLL_BEGIN), 1011c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetAndResetSentGestures())); 1012c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1013c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 10145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(TouchDispositionGestureFilterTest, TapCancelledOnTouchCancel) { 10155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_TAP_DOWN); 10165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 10195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 10205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // A cancellation motion event should cancel the tap. 10225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CancelTouchPoint(); 10235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL), 10255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 1026010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(CurrentTouchTime(), LastSentGestureTime()); 1027cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 10285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 10295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Test that a GestureEvent whose dispatch causes a cancel event to be fired 10315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// won't cause a crash. 10325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(TouchDispositionGestureFilterTest, TestCancelMidGesture) { 10335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetCancelAfterNextGesture(true); 10345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_TAP_DOWN); 10355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN, 10385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ET_GESTURE_TAP_CANCEL), 10395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(LastSentGestureLocation(), gfx::PointF(1, 1)); 10415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 10425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Test that a MultiFingerSwipe event is dispatched when appropriate. 10445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(TouchDispositionGestureFilterTest, TestAllowedMultiFingerSwipe) { 10455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_SCROLL_BEGIN); 10465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 10495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 10505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_PINCH_BEGIN); 10525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_BEGIN), 10555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 10565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PushGesture(ET_GESTURE_SWIPE); 10585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SWIPE), 10615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetAndResetSentGestures())); 10625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 10635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Test that a MultiFingerSwipe event is dispatched when appropriate. 10655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(TouchDispositionGestureFilterTest, TestDisallowedMultiFingerSwipe) { 10665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 10685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_SCROLL_BEGIN); 10705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MoveTouchPoint(0, 0, 0); 10715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchConsumedAck(); 1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SCROLL_BEGIN), 1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetAndResetSentGestures())); 10745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PushGesture(ET_GESTURE_PINCH_BEGIN); 10765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 10775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SendTouchNotConsumedAck(); 1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_PINCH_BEGIN), 1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetAndResetSentGestures())); 10805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1081cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PushGesture(ET_GESTURE_SWIPE); 10825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PressTouchPoint(1, 1); 1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendTouchConsumedAck(); 10845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(GesturesSent()); 10855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 10865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1087cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(TouchDispositionGestureFilterTest, TapCancelOnSecondFingerDown) { 1088cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PushGesture(ET_GESTURE_TAP_DOWN); 1089cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PressTouchPoint(1, 1); 1090cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SendTouchNotConsumedAck(); 1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), 1092cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetAndResetSentGestures())); 1093cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1094cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PressTouchPoint(1, 1); 1095cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SendTouchNotConsumedAck(); 1096cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL), 1097cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetAndResetSentGestures())); 1098cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1099cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(TouchDispositionGestureFilterTest, ShowPressBoundingBox) { 11011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_TAP_DOWN, 9, 9, 8); 11021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PressTouchPoint(9, 9); 11031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 11051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), GetAndResetSentGestures())); 11061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_TAP, 10, 10, 10); 11081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ReleaseTouchPoint(); 11091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS, ET_GESTURE_TAP), 11111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(gfx::RectF(5, 5, 10, 10), ShowPressBoundingBox()); 11131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 11141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(TouchDispositionGestureFilterTest, TapCancelledBeforeGestureEnd) { 11161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_BEGIN); 11171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_TAP_DOWN); 11181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PressTouchPoint(1, 1); 11191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_BEGIN, ET_GESTURE_TAP_DOWN), 11211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTimeoutGesture(ET_GESTURE_SHOW_PRESS); 11231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_SHOW_PRESS), 11241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTimeoutGesture(ET_GESTURE_LONG_PRESS); 11271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_LONG_PRESS), 11281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_END); 11301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CancelTouchPoint(); 11311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL, ET_GESTURE_END), 11331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 11351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(TouchDispositionGestureFilterTest, EventFlagPropagation) { 11371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Real gestures should propagate flags from their causal touches. 11381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PushGesture(ET_GESTURE_TAP_DOWN); 11391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PressTouchPoint(1, 1); 11401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 11421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GesturesMatch(Gestures(ET_GESTURE_TAP_DOWN), GetAndResetSentGestures())); 11431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kDefaultEventFlags, LastSentGestureFlags()); 11441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Synthetic gestures lack flags. 11461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PressTouchPoint(1, 1); 11471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendTouchNotConsumedAck(); 11481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GesturesMatch(Gestures(ET_GESTURE_TAP_CANCEL), 11491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAndResetSentGestures())); 11501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, LastSentGestureFlags()); 11511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 11521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ui 1154