| Index: content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
|
| diff --git a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
|
| index 195a49629f03becb6f6160acb9805b2523c77eb6..b064a5bfb57b56e0d5019336d3997971a1dbd465 100644
|
| --- a/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
|
| +++ b/content/browser/renderer_host/input/tap_suppression_controller_unittest.cc
|
| @@ -71,8 +71,10 @@ class MockTapSuppressionController : public TapSuppressionController,
|
| }
|
|
|
| void SendTapCancel() {
|
| + bool stashed_tap_down_forwarded =
|
| + last_actions_ & STASHED_TAP_DOWN_FORWARDED;
|
| last_actions_ = NONE;
|
| - if (ShouldSuppressTapEnd())
|
| + if (!stashed_tap_down_forwarded && ShouldSuppressTapEnd())
|
| last_actions_ |= TAP_CANCEL_SUPPRESSED;
|
| else
|
| last_actions_ |= TAP_CANCEL_FORWARDED;
|
| @@ -245,7 +247,7 @@ TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapUp) {
|
| EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
|
| tap_suppression_controller_->state());
|
|
|
| - // Send MouseDown. This MouseDown should be suppressed, for now.
|
| + // Send TapDown. This TapDown should be suppressed, for now.
|
| tap_suppression_controller_->SendTapDown();
|
| EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
|
| tap_suppression_controller_->last_actions());
|
| @@ -270,6 +272,49 @@ TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapUp) {
|
| tap_suppression_controller_->state());
|
| }
|
|
|
| +// Test TapSuppressionController for when stashed TapDown gets forwarded.
|
| +// The next TapCancel should be forwarded as well to maintain a valid input
|
| +// stream.
|
| +TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapCancel) {
|
| + // Send GestureFlingCancel.
|
| + tap_suppression_controller_->SendGestureFlingCancel();
|
| + EXPECT_EQ(MockTapSuppressionController::NONE,
|
| + tap_suppression_controller_->last_actions());
|
| + EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS,
|
| + tap_suppression_controller_->state());
|
| +
|
| + // Send processed GestureFlingCancel Ack.
|
| + tap_suppression_controller_->SendGestureFlingCancelAck(true);
|
| + EXPECT_EQ(MockTapSuppressionController::NONE,
|
| + tap_suppression_controller_->last_actions());
|
| + EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING,
|
| + tap_suppression_controller_->state());
|
| +
|
| + // Send TapDown. This TapDown should be suppressed, for now.
|
| + tap_suppression_controller_->SendTapDown();
|
| + EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED,
|
| + tap_suppression_controller_->last_actions());
|
| + EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED,
|
| + tap_suppression_controller_->state());
|
| +
|
| + // Wait more than the delay for TapDown timer. This should release the
|
| + // previously stashed TapDown.
|
| + tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13));
|
| + EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED,
|
| + tap_suppression_controller_->last_actions());
|
| + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
|
| + tap_suppression_controller_->state());
|
| +
|
| + // Send TapCancel. This TapCancel should be forwarded.
|
| + // When a TapDown is forwarded because of the timer expiration, the next
|
| + // TapCancel should get forwarded as well to maintain a valid input stream.
|
| + tap_suppression_controller_->SendTapCancel();
|
| + EXPECT_EQ(MockTapSuppressionController::TAP_CANCEL_FORWARDED,
|
| + tap_suppression_controller_->last_actions());
|
| + EXPECT_EQ(MockTapSuppressionController::SUPPRESSING_TAPS,
|
| + tap_suppression_controller_->state());
|
| +}
|
| +
|
| // Test TapSuppressionController for when GestureFlingCancel Ack comes before
|
| // TapDown, but there is a small delay between the Ack and TapDown.
|
| TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapInsufficientlyLateTapDown) {
|
|
|