Index: ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc |
diff --git a/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc b/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc |
index 5d823b72d3f26abe1c23876d5177834e190fc5e5..eb77e64859b1f21aa3c89c3fd1afaae85e188e85 100644 |
--- a/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc |
+++ b/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc |
@@ -179,9 +179,13 @@ class TouchDispositionGestureFilterTest |
bool GesturesSent() const { return !sent_gestures_.empty(); } |
- base::TimeTicks LastSentGestureTime() const { |
+ const GestureEventData& last_sent_gesture() const { |
CHECK(last_sent_gesture_); |
- return last_sent_gesture_->time; |
+ return *last_sent_gesture_; |
+ } |
+ |
+ base::TimeTicks LastSentGestureTime() const { |
+ return last_sent_gesture().time; |
} |
base::TimeTicks CurrentTouchTime() const { |
@@ -197,18 +201,15 @@ class TouchDispositionGestureFilterTest |
} |
gfx::PointF LastSentGestureLocation() const { |
- CHECK(last_sent_gesture_); |
- return gfx::PointF(last_sent_gesture_->x, last_sent_gesture_->y); |
+ return gfx::PointF(last_sent_gesture().x, last_sent_gesture().y); |
} |
gfx::PointF LastSentGestureRawLocation() const { |
- CHECK(last_sent_gesture_); |
- return gfx::PointF(last_sent_gesture_->raw_x, last_sent_gesture_->raw_y); |
+ return gfx::PointF(last_sent_gesture().raw_x, last_sent_gesture().raw_y); |
} |
int LastSentGestureFlags() const { |
- CHECK(last_sent_gesture_); |
- return last_sent_gesture_->flags; |
+ return last_sent_gesture().flags; |
} |
const gfx::RectF& ShowPressBoundingBox() const { |
@@ -1148,4 +1149,44 @@ TEST_F(TouchDispositionGestureFilterTest, EventFlagPropagation) { |
EXPECT_EQ(0, LastSentGestureFlags()); |
} |
+ |
+TEST_F(TouchDispositionGestureFilterTest, PreviousScrollPrevented) { |
+ PushGesture(ET_GESTURE_BEGIN); |
+ PressTouchPoint(1, 1); |
+ EXPECT_FALSE(GesturesSent()); |
+ SendTouchNotConsumedAck(); |
+ EXPECT_TRUE( |
+ GesturesMatch(Gestures(ET_GESTURE_BEGIN), GetAndResetSentGestures())); |
+ |
+ // The sent scroll update should always reflect whether any preceding scroll |
+ // update has been dropped. |
+ PushGesture(ET_GESTURE_SCROLL_UPDATE); |
+ MoveTouchPoint(0, 2, 2); |
+ SendTouchNotConsumedAck(); |
+ ASSERT_TRUE(GesturesSent()); |
+ EXPECT_FALSE(last_sent_gesture() |
+ .details.previous_scroll_update_in_sequence_prevented()); |
+ GetAndResetSentGestures(); |
+ |
+ PushGesture(ET_GESTURE_SCROLL_UPDATE); |
+ MoveTouchPoint(0, -2, -2); |
+ SendTouchConsumedAck(); |
+ EXPECT_FALSE(GesturesSent()); |
+ |
+ PushGesture(ET_GESTURE_SCROLL_UPDATE); |
+ MoveTouchPoint(0, 2, 2); |
+ SendTouchNotConsumedAck(); |
+ ASSERT_TRUE(GesturesSent()); |
+ EXPECT_TRUE(last_sent_gesture() |
+ .details.previous_scroll_update_in_sequence_prevented()); |
+ GetAndResetSentGestures(); |
+ |
+ PushGesture(ET_GESTURE_SCROLL_UPDATE); |
+ MoveTouchPoint(0, 2, 2); |
+ SendTouchNotConsumedAck(); |
+ ASSERT_TRUE(GesturesSent()); |
+ EXPECT_TRUE(last_sent_gesture() |
+ .details.previous_scroll_update_in_sequence_prevented()); |
+} |
+ |
} // namespace ui |