diff options
author | tdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-15 05:15:25 +0000 |
---|---|---|
committer | tdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-15 05:15:25 +0000 |
commit | 657e2cdba1fb2a8ba6df47d8c2c5f57457436400 (patch) | |
tree | 67e6f5d17b1ac56d207b9da597d24d8e58f59dd2 /content | |
parent | de71a379bfe91ca68da7fe72fbe6f02cbf5bdbbd (diff) | |
download | chromium_src-657e2cdba1fb2a8ba6df47d8c2c5f57457436400.zip chromium_src-657e2cdba1fb2a8ba6df47d8c2c5f57457436400.tar.gz chromium_src-657e2cdba1fb2a8ba6df47d8c2c5f57457436400.tar.bz2 |
Consuming a touch move prevents only the next scroll update.
This implements (In Clank) the touch disposition handling method outlined here:
https://docs.google.com/a/chromium.org/document/d/176xYUC3WbiSl7qd08SBW4NiI4_gO0N4PN6tPAq49-68/edit?pli=1#bookmark=id.wu82d53abe2w
We also modify the way in which Aura handles touch move events to line up with the new way Android handles them. That is, consuming a touch move event prevents the next scroll update event, but does not prevent future scroll update events.
This change will have little impact until https://codereview.chromium.org/166923002/ has landed.
BUG=328503
Review URL: https://codereview.chromium.org/156783006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251533 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
6 files changed, 561 insertions, 162 deletions
diff --git a/content/browser/renderer_host/input/gesture_event_packet.cc b/content/browser/renderer_host/input/gesture_event_packet.cc index d0fe172..10b12e9 100644 --- a/content/browser/renderer_host/input/gesture_event_packet.cc +++ b/content/browser/renderer_host/input/gesture_event_packet.cc @@ -14,34 +14,42 @@ using blink::WebTouchPoint; namespace content { namespace { -bool IsTouchSequenceStart(const WebTouchEvent& event) { - if (event.type != WebInputEvent::TouchStart) - return false; +GestureEventPacket::GestureSource ToGestureSource(const WebTouchEvent& event) { if (!event.touchesLength) - return false; - for (size_t i = 0; i < event.touchesLength; i++) { - if (event.touches[i].state != WebTouchPoint::StatePressed) - return false; + return GestureEventPacket::INVALID; + switch (event.type) { + case WebInputEvent::TouchStart: + for (size_t i = 0; i < event.touchesLength; i++) { + if (event.touches[i].state != WebTouchPoint::StatePressed) + return GestureEventPacket::TOUCH_BEGIN; + } + return GestureEventPacket::TOUCH_SEQUENCE_BEGIN; + case WebInputEvent::TouchMove: + return GestureEventPacket::TOUCH_MOVE; + case WebInputEvent::TouchEnd: + case WebInputEvent::TouchCancel: + for (size_t i = 0; i < event.touchesLength; i++) { + if (event.touches[i].state != WebTouchPoint::StateReleased && + event.touches[i].state != WebTouchPoint::StateCancelled) { + return GestureEventPacket::TOUCH_END; + } + } + return GestureEventPacket::TOUCH_SEQUENCE_END; + default: + return GestureEventPacket::INVALID; } - return true; -} - -GestureEventPacket::GestureSource -ToGestureSource(const WebTouchEvent& event) { - return IsTouchSequenceStart(event) ? GestureEventPacket::TOUCH_BEGIN - : GestureEventPacket::TOUCH; } } // namespace GestureEventPacket::GestureEventPacket() : gesture_count_(0), - gesture_source_(INVALID) {} + gesture_source_(UNDEFINED) {} GestureEventPacket::GestureEventPacket(GestureSource source) : gesture_count_(0), gesture_source_(source) { - DCHECK_NE(gesture_source_, INVALID); + DCHECK_NE(gesture_source_, UNDEFINED); } GestureEventPacket::~GestureEventPacket() {} diff --git a/content/browser/renderer_host/input/gesture_event_packet.h b/content/browser/renderer_host/input/gesture_event_packet.h index 1227417..b277948 100644 --- a/content/browser/renderer_host/input/gesture_event_packet.h +++ b/content/browser/renderer_host/input/gesture_event_packet.h @@ -15,10 +15,14 @@ namespace content { class CONTENT_EXPORT GestureEventPacket { public: enum GestureSource { - INVALID = -1, // Used only for a default-constructed packet.. - TOUCH_BEGIN, // The start of a new gesture sequence. - TOUCH, // Continuation of an existing gesture sequence. - TOUCH_TIMEOUT, // Timeout from an existing gesture sequence. + UNDEFINED = -1, // Used only for a default-constructed packet. + INVALID, // The source of the gesture was invalid. + TOUCH_SEQUENCE_BEGIN, // The start of a new gesture sequence. + TOUCH_SEQUENCE_END, // The end of gesture sequence. + TOUCH_BEGIN, // A touch down occured during a gesture sequence. + TOUCH_MOVE, // A touch move occured during a gesture sequence. + TOUCH_END, // A touch up occured during a gesture sequence. + TOUCH_TIMEOUT, // Timeout from an existing gesture sequence. }; GestureEventPacket(); diff --git a/content/browser/renderer_host/input/touch_disposition_gesture_filter.cc b/content/browser/renderer_host/input/touch_disposition_gesture_filter.cc index 35db767..36de573 100644 --- a/content/browser/renderer_host/input/touch_disposition_gesture_filter.cc +++ b/content/browser/renderer_host/input/touch_disposition_gesture_filter.cc @@ -24,6 +24,79 @@ WebGestureEvent CreateGesture(WebInputEvent::Type type) { return event; } +enum RequiredTouches { + RT_NONE = 0, + RT_START = 1 << 0, + RT_CURRENT = 1 << 1, +}; + +struct DispositionHandlingInfo { + // A bitwise-OR of |RequiredTouches|. + int required_touches; + blink::WebInputEvent::Type antecedent_event_type; + + DispositionHandlingInfo(int required_touches) + : required_touches(required_touches) {} + + DispositionHandlingInfo(int required_touches, + blink::WebInputEvent::Type antecedent_event_type) + : required_touches(required_touches), + antecedent_event_type(antecedent_event_type) {} +}; + +DispositionHandlingInfo Info(int required_touches) { + return DispositionHandlingInfo(required_touches); +} + +DispositionHandlingInfo Info(int required_touches, + blink::WebInputEvent::Type antecedent_event_type) { + return DispositionHandlingInfo(required_touches, antecedent_event_type); +} + +// This approach to disposition handling is described at http://goo.gl/5G8PWJ. +DispositionHandlingInfo GetDispositionHandlingInfo( + blink::WebInputEvent::Type type) { + switch (type) { + case WebInputEvent::GestureTapDown: + return Info(RT_START); + case WebInputEvent::GestureTapCancel: + return Info(RT_START); + case WebInputEvent::GestureShowPress: + return Info(RT_START); + case WebInputEvent::GestureLongPress: + return Info(RT_START); + case WebInputEvent::GestureLongTap: + return Info(RT_START | RT_CURRENT); + case WebInputEvent::GestureTap: + return Info(RT_START | RT_CURRENT, WebInputEvent::GestureTapUnconfirmed); + case WebInputEvent::GestureTwoFingerTap: + return Info(RT_START | RT_CURRENT); + case WebInputEvent::GestureTapUnconfirmed: + return Info(RT_START | RT_CURRENT); + case WebInputEvent::GestureDoubleTap: + return Info(RT_START | RT_CURRENT, WebInputEvent::GestureTapUnconfirmed); + case WebInputEvent::GestureScrollBegin: + return Info(RT_START | RT_CURRENT); + case WebInputEvent::GestureScrollUpdate: + return Info(RT_CURRENT, WebInputEvent::GestureScrollBegin); + case WebInputEvent::GestureScrollEnd: + return Info(RT_NONE, WebInputEvent::GestureScrollBegin); + case WebInputEvent::GestureFlingStart: + return Info(RT_NONE, WebInputEvent::GestureScrollBegin); + case WebInputEvent::GestureFlingCancel: + return Info(RT_NONE, WebInputEvent::GestureFlingStart); + case WebInputEvent::GesturePinchBegin: + return Info(RT_START, WebInputEvent::GestureScrollBegin); + case WebInputEvent::GesturePinchUpdate: + return Info(RT_CURRENT, WebInputEvent::GesturePinchBegin); + case WebInputEvent::GesturePinchEnd: + return Info(RT_NONE, WebInputEvent::GesturePinchBegin); + default: + NOTREACHED(); + return Info(RT_NONE); + } +} + } // namespace // TouchDispositionGestureFilter @@ -41,23 +114,23 @@ TouchDispositionGestureFilter::~TouchDispositionGestureFilter() {} TouchDispositionGestureFilter::PacketResult TouchDispositionGestureFilter::OnGestureEventPacket( const GestureEventPacket& packet) { - if (packet.gesture_source() == GestureEventPacket::INVALID) + if (packet.gesture_source() == GestureEventPacket::UNDEFINED || + packet.gesture_source() == GestureEventPacket::INVALID) return INVALID_PACKET_TYPE; - if (packet.gesture_source() == GestureEventPacket::TOUCH_BEGIN) + if (packet.gesture_source() == GestureEventPacket::TOUCH_SEQUENCE_BEGIN) sequences_.push(GestureSequence()); if (IsEmpty()) return INVALID_PACKET_ORDER; - if (packet.gesture_source() == GestureEventPacket::TOUCH_TIMEOUT) { - // Handle the timeout packet immediately if the packet preceding the - // timeout has already been dispatched. - if (Tail().IsEmpty()) { - if (!Tail().IsGesturePrevented()) - SendPacket(packet); - return SUCCESS; - } + if (packet.gesture_source() == GestureEventPacket::TOUCH_TIMEOUT && + Tail().IsEmpty()) { + // Handle the timeout packet immediately if the packet preceding the timeout + // has already been dispatched. + FilterAndSendPacket( + packet, Tail().state(), INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + return SUCCESS; } Tail().Push(packet); @@ -73,48 +146,51 @@ void TouchDispositionGestureFilter::OnTouchEventAck( if (Head().IsEmpty()) { CancelTapIfNecessary(); CancelFlingIfNecessary(); + last_event_of_type_dropped_.clear(); sequences_.pop(); } GestureSequence& sequence = Head(); - sequence.UpdateState(ack_state); // Dispatch the packet corresponding to the ack'ed touch, as well as any // additional timeout-based packets queued before the ack was received. bool touch_packet_for_current_ack_handled = false; while (!sequence.IsEmpty()) { const GestureEventPacket& packet = sequence.Front(); + DCHECK_NE(packet.gesture_source(), GestureEventPacket::UNDEFINED); + DCHECK_NE(packet.gesture_source(), GestureEventPacket::INVALID); - if (packet.gesture_source() == GestureEventPacket::TOUCH_BEGIN || - packet.gesture_source() == GestureEventPacket::TOUCH) { - // We should handle at most one touch-based packet corresponding to a - // given ack. + if (packet.gesture_source() != GestureEventPacket::TOUCH_TIMEOUT) { + // We should handle at most one non-timeout based packet. if (touch_packet_for_current_ack_handled) break; + sequence.UpdateState(packet.gesture_source(), ack_state); touch_packet_for_current_ack_handled = true; } - - if (!sequence.IsGesturePrevented()) - SendPacket(packet); - + FilterAndSendPacket(packet, sequence.state(), ack_state); sequence.Pop(); } DCHECK(touch_packet_for_current_ack_handled); - - // Immediately cancel a TapDown if TouchStart went unconsumed, but a - // subsequent TouchMove is consumed. - if (sequence.IsGesturePrevented()) - CancelTapIfNecessary(); } bool TouchDispositionGestureFilter::IsEmpty() const { return sequences_.empty(); } -void TouchDispositionGestureFilter::SendPacket( - const GestureEventPacket& packet) { - for (size_t i = 0; i < packet.gesture_count(); ++i) - SendGesture(packet.gesture(i)); +void TouchDispositionGestureFilter::FilterAndSendPacket( + const GestureEventPacket& packet, + const GestureSequence::GestureHandlingState& sequence_state, + InputEventAckState ack_state) { + for (size_t i = 0; i < packet.gesture_count(); ++i) { + const blink::WebGestureEvent& gesture = packet.gesture(i); + if (IsGesturePrevented(gesture.type, ack_state, sequence_state)) { + last_event_of_type_dropped_.insert(gesture.type); + CancelTapIfNecessary(); + continue; + } + last_event_of_type_dropped_.erase(gesture.type); + SendGesture(gesture); + } } void TouchDispositionGestureFilter::SendGesture(const WebGestureEvent& event) { @@ -124,6 +200,7 @@ void TouchDispositionGestureFilter::SendGesture(const WebGestureEvent& event) { CancelFlingIfNecessary(); break; case WebInputEvent::GestureTapDown: + DCHECK(!needs_tap_ending_event_); needs_tap_ending_event_ = true; break; case WebInputEvent::GestureTapCancel: @@ -165,6 +242,14 @@ void TouchDispositionGestureFilter::CancelFlingIfNecessary() { DCHECK(!needs_fling_ending_event_); } +// TouchDispositionGestureFilter::GestureSequence + +TouchDispositionGestureFilter::GestureSequence::GestureHandlingState:: + GestureHandlingState() + : seen_ack(false), + start_consumed(false), + no_consumer(false) {} + TouchDispositionGestureFilter::GestureSequence& TouchDispositionGestureFilter::Head() { DCHECK(!sequences_.empty()); @@ -177,11 +262,7 @@ TouchDispositionGestureFilter::Tail() { return sequences_.back(); } - -// TouchDispositionGestureFilter::GestureSequence - -TouchDispositionGestureFilter::GestureSequence::GestureSequence() - : state_(PENDING) {} +TouchDispositionGestureFilter::GestureSequence::GestureSequence() {} TouchDispositionGestureFilter::GestureSequence::~GestureSequence() {} @@ -202,25 +283,46 @@ TouchDispositionGestureFilter::GestureSequence::Front() const { } void TouchDispositionGestureFilter::GestureSequence::UpdateState( + GestureEventPacket::GestureSource gesture_source, InputEventAckState ack_state) { DCHECK_NE(INPUT_EVENT_ACK_STATE_UNKNOWN, ack_state); // Permanent states will not be affected by subsequent ack's. - if (state_ != PENDING && state_ != ALLOWED_UNTIL_PREVENTED) + if (state_.no_consumer || state_.start_consumed) return; // |NO_CONSUMER| should only be effective when the *first* touch is ack'ed. - if (state_ == PENDING && - ack_state == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) - state_ = ALWAYS_ALLOWED; - else if (ack_state == INPUT_EVENT_ACK_STATE_CONSUMED) - state_ = ALWAYS_PREVENTED; - else - state_ = ALLOWED_UNTIL_PREVENTED; -} - -bool TouchDispositionGestureFilter::GestureSequence::IsGesturePrevented() - const { - return state_ == ALWAYS_PREVENTED; + if (!state_.seen_ack && + ack_state == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { + state_.no_consumer = true; + } else if (ack_state == INPUT_EVENT_ACK_STATE_CONSUMED) { + if (gesture_source == GestureEventPacket::TOUCH_SEQUENCE_BEGIN || + gesture_source == GestureEventPacket::TOUCH_BEGIN) { + state_.start_consumed = true; + } + } + state_.seen_ack = true; +} + +bool TouchDispositionGestureFilter::IsGesturePrevented( + WebInputEvent::Type gesture_type, + InputEventAckState current, + const GestureSequence::GestureHandlingState& state) const { + + if (state.no_consumer) + return false; + + DispositionHandlingInfo disposition_handling_info = + GetDispositionHandlingInfo(gesture_type); + + int required_touches = disposition_handling_info.required_touches; + bool current_consumed = current == INPUT_EVENT_ACK_STATE_CONSUMED; + if ((required_touches & RT_START && state.start_consumed) || + (required_touches & RT_CURRENT && current_consumed) || + (last_event_of_type_dropped_.count( + disposition_handling_info.antecedent_event_type) > 0)) { + return true; + } + return false; } bool TouchDispositionGestureFilter::GestureSequence::IsEmpty() const { diff --git a/content/browser/renderer_host/input/touch_disposition_gesture_filter.h b/content/browser/renderer_host/input/touch_disposition_gesture_filter.h index f2acc3b..3872b47 100644 --- a/content/browser/renderer_host/input/touch_disposition_gesture_filter.h +++ b/content/browser/renderer_host/input/touch_disposition_gesture_filter.h @@ -5,8 +5,8 @@ #ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_DISPOSITION_GESTURE_FILTER_H_ #define CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_DISPOSITION_GESTURE_FILTER_H_ -#include <deque> #include <queue> +#include <set> #include "content/browser/renderer_host/input/gesture_event_packet.h" #include "content/common/content_export.h" @@ -56,30 +56,45 @@ class CONTENT_EXPORT TouchDispositionGestureFilter { // generated by timeouts from a statinoary finger. class GestureSequence { public: + struct GestureHandlingState { + GestureHandlingState(); + // True iff the sequence has had at least one touch acked. + bool seen_ack; + // True iff the sequence has had any touch down event consumed. + bool start_consumed; + // True iff the first ack received for this sequence reported that no + // consumer exists. + bool no_consumer; + }; + GestureSequence(); ~GestureSequence(); void Push(const GestureEventPacket& packet); void Pop(); const GestureEventPacket& Front() const; - void UpdateState(InputEventAckState ack_state); - bool IsGesturePrevented() const; + void UpdateState(GestureEventPacket::GestureSource gesture_source, + InputEventAckState ack_state); bool IsEmpty() const; + const GestureHandlingState& state() const { return state_; }; private: std::queue<GestureEventPacket> packets_; - enum GestureHandlingState { - PENDING, // The sequence has yet to receive an ack. - ALLOWED_UNTIL_PREVENTED, // Gestures in the sequence are allowed until - // a source touch is preventDefault'ed. - ALWAYS_ALLOWED, // All remaining sequence gestures are forwarded. - ALWAYS_PREVENTED // All remaining sequence gestures are dropped. - }; GestureHandlingState state_; }; + bool IsGesturePrevented(blink::WebInputEvent::Type type, + InputEventAckState current, + const GestureSequence::GestureHandlingState& state) + const; + void UpdateAndDispatchPackets(GestureSequence* sequence, InputEventAckState ack_result); - void SendPacket(const GestureEventPacket& packet); + + void FilterAndSendPacket( + const GestureEventPacket& packet, + const GestureSequence::GestureHandlingState& sequence_state, + InputEventAckState ack_state); + void SendGesture(const blink::WebGestureEvent& gesture); void CancelTapIfNecessary(); void CancelFlingIfNecessary(); @@ -89,6 +104,11 @@ class CONTENT_EXPORT TouchDispositionGestureFilter { TouchDispositionGestureFilterClient* client_; std::queue<GestureSequence> sequences_; + // If the previous gesture of a given type was dropped instead of being + // dispatched, its type will occur in this set. Cleared when a new touch + // sequence begins to be acked. + std::set<blink::WebInputEvent::Type> last_event_of_type_dropped_; + // Bookkeeping for inserting synthetic Gesture{Tap,Fling}Cancel events // when necessary, e.g., GestureTapCancel when scrolling begins, or // GestureFlingCancel when a user taps following a GestureFlingStart. diff --git a/content/browser/renderer_host/input/touch_disposition_gesture_filter_unittest.cc b/content/browser/renderer_host/input/touch_disposition_gesture_filter_unittest.cc index e537bdb..16b4b7e 100644 --- a/content/browser/renderer_host/input/touch_disposition_gesture_filter_unittest.cc +++ b/content/browser/renderer_host/input/touch_disposition_gesture_filter_unittest.cc @@ -211,18 +211,24 @@ TEST_F(TouchDispositionGestureFilterTest, BasicGestures) { // Multiple gestures can be queued for a single event. PushGesture(WebInputEvent::GestureFlingStart); PushGesture(WebInputEvent::GestureFlingCancel); - MoveTouchPoint(0, 1, 1); + ReleaseTouchPoint(0); EXPECT_FALSE(GesturesSent()); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, WebInputEvent::GestureFlingCancel), GetAndResetSentGestures())); +} +TEST_F(TouchDispositionGestureFilterTest, BasicGesturesConsumed) { // A consumed touch's gesture should not be sent. + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + PushGesture(WebInputEvent::GestureFlingStart); PushGesture(WebInputEvent::GestureFlingCancel); ReleaseTouchPoint(0); - EXPECT_FALSE(GesturesSent()); SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_FALSE(GesturesSent()); } @@ -247,6 +253,69 @@ TEST_F(TouchDispositionGestureFilterTest, ConsumedThenNotConsumed) { EXPECT_FALSE(GesturesSent()); } +TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenConsumed) { + // A not consumed touch's gesture should be sent. + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); + + // A newly consumed gesture should not be sent. + PushGesture(WebInputEvent::GesturePinchBegin); + PressTouchPoint(10, 10); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + // And subsequent non-consumed pinch updates should not be sent. + PushGesture(WebInputEvent::GestureScrollUpdate); + PushGesture(WebInputEvent::GesturePinchUpdate); + MoveTouchPoint(0, 2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollUpdate), + GetAndResetSentGestures())); + + // End events dispatched only when their start events were. + PushGesture(WebInputEvent::GesturePinchEnd); + ReleaseTouchPoint(1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); +} + +TEST_F(TouchDispositionGestureFilterTest, ScrollAlternatelyConsumed) { + // A consumed touch's gesture should not be sent. + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); + + for (size_t i = 0; i < 3; ++i) { + PushGesture(WebInputEvent::GestureScrollUpdate); + MoveTouchPoint(0, 2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GestureScrollUpdate); + MoveTouchPoint(0, 3, 3); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollUpdate), + GetAndResetSentGestures())); + } + + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); +} + TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenNoConsumer) { // An unconsumed touch's gesture should be sent. PushGesture(WebInputEvent::GestureScrollBegin); @@ -263,11 +332,156 @@ TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenNoConsumer) { EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), GetAndResetSentGestures())); - // If the subsequent touch is consumed, then the remaining gesture sequence - // should be dropped, regardless of subsequent touch ack disposition. + // End events should be dispatched when their start events were, independent + // of the ack state. + PushGesture(WebInputEvent::GesturePinchEnd); + ReleaseTouchPoint(1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); +} + +TEST_F(TouchDispositionGestureFilterTest, EndingEventsSent) { + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GesturePinchBegin); + PressTouchPoint(2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), + GetAndResetSentGestures())); + + // Consuming the touchend event can't suppress the match end gesture. + PushGesture(WebInputEvent::GesturePinchEnd); + ReleaseTouchPoint(1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), + GetAndResetSentGestures())); + + // But other events in the same packet are still suppressed. + PushGesture(WebInputEvent::GestureScrollUpdate); + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); + + // GestureScrollEnd and GestureFlingStart behave the same in this regard. + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GestureFlingStart); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart), + GetAndResetSentGestures())); +} + +TEST_F(TouchDispositionGestureFilterTest, EndingEventsNotSent) { + // Consuming a begin event ensures no end events are sent. + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GesturePinchBegin); + PressTouchPoint(2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GesturePinchEnd); + ReleaseTouchPoint(1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); +} + +TEST_F(TouchDispositionGestureFilterTest, UpdateEventsSuppressedPerEvent) { + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); + + // Consuming a single scroll or pinch update should suppress only that event. + PushGesture(WebInputEvent::GestureScrollUpdate); + MoveTouchPoint(0, 2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GesturePinchBegin); + PressTouchPoint(2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchBegin), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GesturePinchUpdate); + MoveTouchPoint(1, 2, 3); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + // Subsequent updates should not be affected. PushGesture(WebInputEvent::GestureScrollUpdate); + MoveTouchPoint(0, 4, 4); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollUpdate), + GetAndResetSentGestures())); + PushGesture(WebInputEvent::GesturePinchUpdate); + MoveTouchPoint(0, 4, 5); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchUpdate), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GesturePinchEnd); + ReleaseTouchPoint(1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GesturePinchEnd), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GestureScrollEnd); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); +} + +TEST_F(TouchDispositionGestureFilterTest, UpdateEventsDependOnBeginEvents) { + PushGesture(WebInputEvent::GestureScrollBegin); + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + // Scroll and pinch gestures depend on the scroll begin gesture being + // dispatched. + PushGesture(WebInputEvent::GestureScrollUpdate); MoveTouchPoint(0, 2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GesturePinchBegin); + PressTouchPoint(2, 2); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + + PushGesture(WebInputEvent::GesturePinchUpdate); + MoveTouchPoint(1, 2, 3); SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_FALSE(GesturesSent()); @@ -278,19 +492,19 @@ TEST_F(TouchDispositionGestureFilterTest, NotConsumedThenNoConsumer) { PushGesture(WebInputEvent::GestureScrollEnd); ReleaseTouchPoint(0); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(GesturesSent()); } TEST_F(TouchDispositionGestureFilterTest, MultipleTouchSequences) { // Queue two touch-to-gestures sequences. - PushGesture(WebInputEvent::GestureFlingStart); + PushGesture(WebInputEvent::GestureTapDown); PressTouchPoint(1, 1); - PushGesture(WebInputEvent::GestureFlingCancel); + PushGesture(WebInputEvent::GestureTap); ReleaseTouchPoint(0); - PushGesture(WebInputEvent::GestureFlingStart); + PushGesture(WebInputEvent::GestureScrollBegin); PressTouchPoint(1, 1); - PushGesture(WebInputEvent::GestureFlingCancel); + PushGesture(WebInputEvent::GestureScrollEnd); ReleaseTouchPoint(0); // The first gesture sequence should not be allowed. @@ -301,15 +515,18 @@ TEST_F(TouchDispositionGestureFilterTest, MultipleTouchSequences) { // The subsequent sequence should "reset" allowance. SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, - WebInputEvent::GestureFlingCancel), + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, + WebInputEvent::GestureScrollEnd), GetAndResetSentGestures())); } TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnNewTouchSequence) { // Simulate a fling. + PushGesture(WebInputEvent::GestureScrollBegin); PressTouchPoint(1, 1); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin), + GetAndResetSentGestures())); PushGesture(WebInputEvent::GestureFlingStart); ReleaseTouchPoint(0); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); @@ -318,10 +535,12 @@ TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnNewTouchSequence) { // A new touch seqeuence should cancel the outstanding fling. PressTouchPoint(1, 1); - ReleaseTouchPoint(0); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingCancel), GetAndResetSentGestures())); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + EXPECT_FALSE(GesturesSent()); } TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnScrollBegin) { @@ -347,19 +566,24 @@ TEST_F(TouchDispositionGestureFilterTest, FlingCancelledOnScrollBegin) { TEST_F(TouchDispositionGestureFilterTest, FlingNotCancelledIfGFCEventReceived) { // Simulate a fling that is started then cancelled. - PushGesture(WebInputEvent::GestureFlingStart); + PushGesture(WebInputEvent::GestureScrollBegin); PressTouchPoint(1, 1); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + PushGesture(WebInputEvent::GestureFlingStart); + MoveTouchPoint(0, 1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); PushGesture(WebInputEvent::GestureFlingCancel); ReleaseTouchPoint(0); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureFlingStart, + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, + WebInputEvent::GestureFlingStart, WebInputEvent::GestureFlingCancel), GetAndResetSentGestures())); // A new touch sequence will not inject a GestureFlingCancel, as the fling // has already been cancelled. PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); ReleaseTouchPoint(0); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_FALSE(GesturesSent()); @@ -468,12 +692,12 @@ TEST_F(TouchDispositionGestureFilterTest, SpuriousAcksIgnored) { PushGesture(WebInputEvent::GestureScrollBegin); PressTouchPoint(1, 1); - PushGesture(WebInputEvent::GestureScrollEnd); - ReleaseTouchPoint(0); + PushGesture(WebInputEvent::GestureScrollUpdate); + MoveTouchPoint(0, 3,3); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureScrollBegin, - WebInputEvent::GestureScrollEnd), + WebInputEvent::GestureScrollUpdate), GetAndResetSentGestures())); // Even if all packets have been dispatched, the filter may not be empty as @@ -498,10 +722,44 @@ TEST_F(TouchDispositionGestureFilterTest, PacketsWithInvalidOrderIgnored) { WebTouchEvent touch; touch.type = WebInputEvent::TouchCancel; - EXPECT_EQ(TouchDispositionGestureFilter::INVALID_PACKET_ORDER, + EXPECT_EQ(TouchDispositionGestureFilter::INVALID_PACKET_TYPE, SendTouchGestures(WebInputEvent::GestureShowPress, GestureEventPacket())); EXPECT_TRUE(IsEmpty()); } +TEST_F(TouchDispositionGestureFilterTest, ConsumedTouchCancel) { + // An unconsumed touch's gesture should be sent. + PushGesture(WebInputEvent::GestureTapDown); + PressTouchPoint(1, 1); + EXPECT_FALSE(GesturesSent()); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapDown), + GetAndResetSentGestures())); + + PushGesture(WebInputEvent::GestureTapCancel); + PushGesture(WebInputEvent::GestureScrollEnd); + CancelTouchPoint(0); + EXPECT_FALSE(GesturesSent()); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapCancel, + WebInputEvent::GestureScrollEnd), + GetAndResetSentGestures())); +} + +TEST_F(TouchDispositionGestureFilterTest, TimeoutEventAfterRelease) { + PressTouchPoint(1, 1); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_FALSE(GesturesSent()); + PushGesture(WebInputEvent::GestureTapUnconfirmed); + ReleaseTouchPoint(0); + SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTapUnconfirmed), + GetAndResetSentGestures())); + + SendTimeoutGesture(WebInputEvent::GestureTap); + EXPECT_TRUE(GesturesMatch(Gestures(WebInputEvent::GestureTap), + GetAndResetSentGestures())); +} + } // namespace content diff --git a/content/browser/renderer_host/input/touch_event_queue_unittest.cc b/content/browser/renderer_host/input/touch_event_queue_unittest.cc index 2ced9d9..006e79de 100644 --- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc +++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc @@ -48,7 +48,7 @@ class TouchEventQueueTest : public testing::Test, ++sent_event_count_; last_sent_event_ = event.event; if (sync_ack_result_) - SendTouchEventACK(*sync_ack_result_.Pass()); + SendTouchEventAck(*sync_ack_result_.Pass()); } virtual void OnTouchEventAck( @@ -93,10 +93,17 @@ class TouchEventQueueTest : public testing::Test, GestureEventWithLatencyInfo(event, ui::LatencyInfo())); } - void SendTouchEventACK(InputEventAckState ack_result) { + void SendTouchEventAck(InputEventAckState ack_result) { queue_->ProcessTouchAck(ack_result, ui::LatencyInfo()); } + void SendGestureEventAck(WebInputEvent::Type type, + InputEventAckState ack_result) { + blink::WebGestureEvent gesture_event; + gesture_event.type = type; + GestureEventWithLatencyInfo event(gesture_event, ui::LatencyInfo()); + } + void SetFollowupEvent(const WebTouchEvent& event) { followup_touch_event_.reset(new WebTouchEvent(event)); } @@ -211,14 +218,14 @@ TEST_F(TouchEventQueueTest, Basic) { EXPECT_EQ(0U, GetAndResetSentEventCount()); // Receive an ACK for the first touch-event. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); // Receive an ACK for the second touch-event. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, queued_event_count()); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -249,7 +256,7 @@ TEST_F(TouchEventQueueTest, QueueFlushedWhenHandlersRemoved) { // Receive an ACK for the first touch-event. One of the queued touch-event // should be forwarded. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(31U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -310,7 +317,7 @@ TEST_F(TouchEventQueueTest, ActiveSequenceDroppedWhenHandlersRemoved) { EXPECT_EQ(0U, queued_event_count()); // The ack should be ignored as the touch queue is now empty. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(0U, GetAndResetAckedEventCount()); EXPECT_EQ(0U, queued_event_count()); @@ -352,7 +359,7 @@ TEST_F(TouchEventQueueTest, Coalesce) { EXPECT_EQ(3U, queued_event_count()); // ACK the press. Coalesced touch-move events should be sent. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(2U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -360,14 +367,14 @@ TEST_F(TouchEventQueueTest, Coalesce) { EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, acked_event_state()); // ACK the moves. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(10U, GetAndResetAckedEventCount()); EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); // ACK the release. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, queued_event_count()); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -389,7 +396,7 @@ TEST_F(TouchEventQueueTest, SentTouchEventDoesNotCoalesce) { EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(2U, queued_event_count()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, queued_event_count()); @@ -451,7 +458,7 @@ TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) { // Receive an ACK for the press. This should cause the queued touch-move to // be sent to the renderer. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, queued_event_count()); @@ -460,7 +467,7 @@ TEST_F(TouchEventQueueTest, AckAfterQueueFlushed) { EXPECT_EQ(0U, queued_event_count()); // Now receive an ACK for the move. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, queued_event_count()); } @@ -482,7 +489,7 @@ TEST_F(TouchEventQueueTest, NoConsumer) { // Receive an ACK for the first touch-event. This should release the queued // touch-event, but it should not be sent to the renderer. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(0U, queued_event_count()); EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); EXPECT_EQ(2U, GetAndResetAckedEventCount()); @@ -511,14 +518,14 @@ TEST_F(TouchEventQueueTest, NoConsumer) { // touch-move event, the touch-end event and the second touch-press event. EXPECT_EQ(4U, queued_event_count()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(WebInputEvent::TouchEnd, acked_event().type); EXPECT_EQ(4U, GetAndResetAckedEventCount()); EXPECT_EQ(1U, queued_event_count()); // ACK the second press event as NO_CONSUMER too. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(WebInputEvent::TouchStart, acked_event().type); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -558,12 +565,12 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { // ACK the first press as CONSUMED. This should cause the first touch-move of // the first touch-point to be dispatched. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(3U, queued_event_count()); // ACK the first move as CONSUMED. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(2U, queued_event_count()); @@ -571,12 +578,12 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { // touch-move event (which contains both touch points). Although the second // touch-point does not need to be sent to the renderer, the first touch-point // did move, and so the coalesced touch-event will be sent to the renderer. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, queued_event_count()); // ACK the coalesced move as NOT_CONSUMED. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, queued_event_count()); @@ -597,11 +604,11 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { MoveTouchPoints(0, 15, 15, 1, 25, 25); EXPECT_EQ(0U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, queued_event_count()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, queued_event_count()); @@ -623,14 +630,14 @@ TEST_F(TouchEventQueueTest, ConsumerIgnoreMultiFinger) { EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(4U, queued_event_count()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(2U, queued_event_count()); EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); // ACK the press with NO_CONSUMED_EXISTS. This should release the queued // touch-move events to the view. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, queued_event_count()); EXPECT_EQ(WebInputEvent::TouchMove, acked_event().type); @@ -660,7 +667,7 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) { // Receive an ACK for the press. This should cause the followup touch-move to // be sent to the renderer. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -673,7 +680,7 @@ TEST_F(TouchEventQueueTest, AckWithFollowupEvents) { // Receive an ACK for the touch-move followup event. This should cause the // subsequent touch move event be sent to the renderer. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -704,7 +711,7 @@ TEST_F(TouchEventQueueTest, SynchronousAcks) { // TouchCancel (first inserting a TouchStart so the TouchCancel will be sent) PressTouchPoint(1, 1); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -767,17 +774,17 @@ TEST_F(TouchEventQueueTest, NoTouchBasic) { PressTouchPoint(80, 10); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); MoveTouchPoint(0, 80, 20); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); ReleaseTouchPoint(0); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); } @@ -786,7 +793,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) { // Queue a TouchStart. PressTouchPoint(0, 1); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); MoveTouchPoint(0, 20, 5); @@ -803,7 +810,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) { WebGestureEvent followup_scroll; followup_scroll.type = WebInputEvent::GestureScrollBegin; SetFollowupEvent(followup_scroll); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); EXPECT_EQ(2U, queued_event_count()); @@ -811,7 +818,7 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) { EXPECT_EQ(WebInputEvent::TouchStart, latest_event().type); // Acking the TouchCancel will result in dispatch of the next TouchStart. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); // The synthetic TouchCancel should not reach client, only the TouchStart. EXPECT_EQ(1U, GetAndResetAckedEventCount()); EXPECT_EQ(0U, GetAndResetSentEventCount()); @@ -840,17 +847,17 @@ TEST_F(TouchEventQueueTest, NoTouchOnScroll) { // Touch events from a new gesture sequence should be forwarded normally. PressTouchPoint(80, 10); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); MoveTouchPoint(0, 80, 20); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); ReleaseTouchPoint(0); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); } @@ -860,7 +867,7 @@ TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) { // Queue a TouchStart. PressTouchPoint(0, 1); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_EQ(1U, GetAndResetAckedEventCount()); EXPECT_EQ(WebInputEvent::TouchStart, sent_event().type); @@ -894,7 +901,7 @@ TEST_F(TouchEventQueueTest, NoTouchCancelOnScrollIfNoConsumer) { // Touch events from a new gesture sequence should be forwarded normally. PressTouchPoint(80, 10); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); } @@ -914,7 +921,7 @@ TEST_F(TouchEventQueueTest, PendingStart) { EXPECT_TRUE(IsPendingAckTouchStart()); // Ack the touchstart (#1). - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_FALSE(IsPendingAckTouchStart()); @@ -924,7 +931,7 @@ TEST_F(TouchEventQueueTest, PendingStart) { EXPECT_FALSE(IsPendingAckTouchStart()); // Ack the touchmove (#2). - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_TRUE(IsPendingAckTouchStart()); @@ -934,12 +941,12 @@ TEST_F(TouchEventQueueTest, PendingStart) { EXPECT_TRUE(IsPendingAckTouchStart()); // Ack the touchstart for the second point (#3). - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, queued_event_count()); EXPECT_TRUE(IsPendingAckTouchStart()); // Ack the touchstart for the third point (#4). - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(0U, queued_event_count()); EXPECT_FALSE(IsPendingAckTouchStart()); } @@ -951,28 +958,28 @@ TEST_F(TouchEventQueueTest, TouchTimeoutTypes) { // Sending a TouchStart will start the timeout. PressTouchPoint(0, 1); EXPECT_TRUE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); // A TouchMove should start the timeout. MoveTouchPoint(0, 5, 5); EXPECT_TRUE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); // A TouchEnd should not start the timeout. ReleaseTouchPoint(0); EXPECT_FALSE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); // A TouchCancel should not start the timeout. PressTouchPoint(0, 1); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); ASSERT_FALSE(IsTimeoutRunning()); CancelTouchPoint(0); EXPECT_FALSE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); } @@ -1005,7 +1012,7 @@ TEST_F(TouchEventQueueTest, TouchTimeoutBasic) { EXPECT_EQ(1U, GetAndResetAckedEventCount()); // Ack'ing the original event should trigger a cancel event. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); EXPECT_EQ(1U, GetAndResetSentEventCount()); @@ -1021,7 +1028,7 @@ TEST_F(TouchEventQueueTest, TouchTimeoutBasic) { // The synthetic TouchCancel ack should not reach the client, but should // resume touch forwarding. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); @@ -1042,23 +1049,23 @@ TEST_F(TouchEventQueueTest, NoTouchTimeoutIfRendererIsConsumingGesture) { // Mark the event as consumed. This should prevent the timeout from // being activated on subsequent TouchEvents in this gesture. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); // A TouchMove should not start the timeout. MoveTouchPoint(0, 5, 5); EXPECT_FALSE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); // A secondary TouchStart should not start the timeout. PressTouchPoint(1, 0); EXPECT_FALSE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); // A TouchEnd should not start the timeout. ReleaseTouchPoint(1); EXPECT_FALSE(IsTimeoutRunning()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); // A TouchCancel should not start the timeout. CancelTouchPoint(0); @@ -1118,14 +1125,14 @@ TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGesture) { EXPECT_EQ(1U, GetAndResetAckedEventCount()); // Ack the original event, triggering a TouchCancel. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); // Ack the cancel event. Normally, this would resume touch forwarding, // but we're still within a scroll gesture so it remains disabled. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_FALSE(IsTimeoutRunning()); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); @@ -1194,12 +1201,12 @@ TEST_F(TouchEventQueueTest, TouchTimeoutWithFollowupGestureAndDelayedAck) { EXPECT_EQ(2U, GetAndResetAckedEventCount()); // Ack the original event, triggering a cancel. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); // Ack the cancel event, resuming touch forwarding. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); EXPECT_EQ(0U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); @@ -1240,7 +1247,7 @@ TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) { // Ack'ing the original event should not trigger a cancel event, as the // TouchStart had no consumer. However, it should re-enable touch forwarding. - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); EXPECT_FALSE(IsTimeoutRunning()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); EXPECT_EQ(0U, GetAndResetSentEventCount()); @@ -1260,7 +1267,7 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) { // Queue a TouchStart. PressTouchPoint(0, 0); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); ASSERT_EQ(1U, GetAndResetSentEventCount()); ASSERT_EQ(1U, GetAndResetAckedEventCount()); @@ -1294,7 +1301,7 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) { EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); // Even TouchMove's within the original slop region should now be forwarded. @@ -1302,14 +1309,14 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) { EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(0U, GetAndResetAckedEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); // A new touch sequence should reset suppression. ReleaseTouchPoint(0); PressTouchPoint(0, 0); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); ASSERT_EQ(2U, GetAndResetSentEventCount()); ASSERT_EQ(2U, GetAndResetAckedEventCount()); ASSERT_EQ(0U, queued_event_count()); @@ -1335,7 +1342,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) { // Queue a TouchStart. PressTouchPoint(0, 1); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); ASSERT_EQ(1U, GetAndResetSentEventCount()); ASSERT_EQ(1U, GetAndResetAckedEventCount()); @@ -1357,7 +1364,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { // Queue a TouchStart. PressTouchPoint(0, 1); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); ASSERT_EQ(1U, GetAndResetSentEventCount()); ASSERT_EQ(1U, GetAndResetAckedEventCount()); @@ -1369,7 +1376,7 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { // Simulate a secondary pointer press. PressTouchPoint(kDoubleSlopLengthDips, 0); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); @@ -1377,12 +1384,12 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { MoveTouchPoint(1, kDoubleSlopLengthDips, 0); EXPECT_EQ(1U, queued_event_count()); EXPECT_EQ(1U, GetAndResetSentEventCount()); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetAckedEventCount()); // Release the secondary pointer. ReleaseTouchPoint(0); - SendTouchEventACK(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); + SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); EXPECT_EQ(1U, GetAndResetSentEventCount()); EXPECT_EQ(1U, GetAndResetAckedEventCount()); |