| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/basictypes.h" | |
| 6 #include "base/memory/scoped_ptr.h" | |
| 7 #include "content/browser/renderer_host/input/tap_suppression_controller.h" | |
| 8 #include "content/browser/renderer_host/input/tap_suppression_controller_client.
h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 | |
| 11 using base::TimeDelta; | |
| 12 | |
| 13 namespace content { | |
| 14 | |
| 15 class MockTapSuppressionController : public TapSuppressionController, | |
| 16 public TapSuppressionControllerClient { | |
| 17 public: | |
| 18 using TapSuppressionController::NOTHING; | |
| 19 using TapSuppressionController::GFC_IN_PROGRESS; | |
| 20 using TapSuppressionController::TAP_DOWN_STASHED; | |
| 21 using TapSuppressionController::LAST_CANCEL_STOPPED_FLING; | |
| 22 | |
| 23 enum Action { | |
| 24 NONE = 0, | |
| 25 TAP_DOWN_DEFERRED = 1 << 0, | |
| 26 TAP_DOWN_FORWARDED = 1 << 1, | |
| 27 TAP_DOWN_DROPPED = 1 << 2, | |
| 28 TAP_UP_SUPPRESSED = 1 << 3, | |
| 29 TAP_UP_FORWARDED = 1 << 4, | |
| 30 TAP_CANCEL_SUPPRESSED = 1 << 5, | |
| 31 TAP_CANCEL_FORWARDED = 1 << 6, | |
| 32 STASHED_TAP_DOWN_FORWARDED = 1 << 7, | |
| 33 }; | |
| 34 | |
| 35 MockTapSuppressionController() | |
| 36 : TapSuppressionController(this), | |
| 37 max_cancel_to_down_time_in_ms_(1), | |
| 38 max_tap_gap_time_in_ms_(1), | |
| 39 last_actions_(NONE), | |
| 40 time_(), | |
| 41 timer_started_(false) { | |
| 42 } | |
| 43 | |
| 44 virtual ~MockTapSuppressionController() {} | |
| 45 | |
| 46 void SendGestureFlingCancel() { | |
| 47 last_actions_ = NONE; | |
| 48 GestureFlingCancel(); | |
| 49 } | |
| 50 | |
| 51 void SendGestureFlingCancelAck(bool processed) { | |
| 52 last_actions_ = NONE; | |
| 53 GestureFlingCancelAck(processed); | |
| 54 } | |
| 55 | |
| 56 void SendTapDown() { | |
| 57 last_actions_ = NONE; | |
| 58 if (ShouldDeferTapDown()) | |
| 59 last_actions_ |= TAP_DOWN_DEFERRED; | |
| 60 else | |
| 61 last_actions_ |= TAP_DOWN_FORWARDED; | |
| 62 } | |
| 63 | |
| 64 void SendTapUp() { | |
| 65 last_actions_ = NONE; | |
| 66 if (ShouldSuppressTapUp()) | |
| 67 last_actions_ |= TAP_UP_SUPPRESSED; | |
| 68 else | |
| 69 last_actions_ |= TAP_UP_FORWARDED; | |
| 70 } | |
| 71 | |
| 72 void SendTapCancel() { | |
| 73 last_actions_ = NONE; | |
| 74 if (ShouldSuppressTapCancel()) | |
| 75 last_actions_ |= TAP_CANCEL_SUPPRESSED; | |
| 76 else | |
| 77 last_actions_ |= TAP_CANCEL_FORWARDED; | |
| 78 } | |
| 79 | |
| 80 void AdvanceTime(const base::TimeDelta& delta) { | |
| 81 last_actions_ = NONE; | |
| 82 time_ += delta; | |
| 83 if (timer_started_ && time_ >= timer_expiry_time_) { | |
| 84 timer_started_ = false; | |
| 85 TapDownTimerExpired(); | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 void set_max_cancel_to_down_time_in_ms(int val) { | |
| 90 max_cancel_to_down_time_in_ms_ = val; | |
| 91 } | |
| 92 | |
| 93 void set_max_tap_gap_time_in_ms(int val) { | |
| 94 max_tap_gap_time_in_ms_ = val; | |
| 95 } | |
| 96 | |
| 97 State state() { return state_; } | |
| 98 | |
| 99 int last_actions() { return last_actions_; } | |
| 100 | |
| 101 protected: | |
| 102 virtual base::TimeTicks Now() OVERRIDE { | |
| 103 return time_; | |
| 104 } | |
| 105 | |
| 106 virtual void StartTapDownTimer(const base::TimeDelta& delay) OVERRIDE { | |
| 107 timer_expiry_time_ = time_ + delay; | |
| 108 timer_started_ = true; | |
| 109 } | |
| 110 | |
| 111 virtual void StopTapDownTimer() OVERRIDE { | |
| 112 timer_started_ = false; | |
| 113 } | |
| 114 | |
| 115 private: | |
| 116 // TapSuppressionControllerClient implementation | |
| 117 virtual int MaxCancelToDownTimeInMs() OVERRIDE { | |
| 118 return max_cancel_to_down_time_in_ms_; | |
| 119 } | |
| 120 | |
| 121 virtual int MaxTapGapTimeInMs() OVERRIDE { | |
| 122 return max_tap_gap_time_in_ms_; | |
| 123 } | |
| 124 | |
| 125 virtual void DropStashedTapDown() OVERRIDE { | |
| 126 last_actions_ |= TAP_DOWN_DROPPED; | |
| 127 } | |
| 128 | |
| 129 virtual void ForwardStashedTapDown() OVERRIDE { | |
| 130 last_actions_ |= STASHED_TAP_DOWN_FORWARDED; | |
| 131 } | |
| 132 | |
| 133 // Hiding some derived public methods | |
| 134 using TapSuppressionController::GestureFlingCancel; | |
| 135 using TapSuppressionController::GestureFlingCancelAck; | |
| 136 using TapSuppressionController::ShouldDeferTapDown; | |
| 137 using TapSuppressionController::ShouldSuppressTapUp; | |
| 138 using TapSuppressionController::ShouldSuppressTapCancel; | |
| 139 | |
| 140 int max_cancel_to_down_time_in_ms_; | |
| 141 int max_tap_gap_time_in_ms_; | |
| 142 | |
| 143 int last_actions_; | |
| 144 | |
| 145 base::TimeTicks time_; | |
| 146 bool timer_started_; | |
| 147 base::TimeTicks timer_expiry_time_; | |
| 148 | |
| 149 DISALLOW_COPY_AND_ASSIGN(MockTapSuppressionController); | |
| 150 }; | |
| 151 | |
| 152 class TapSuppressionControllerTest : public testing::Test { | |
| 153 public: | |
| 154 TapSuppressionControllerTest() { | |
| 155 } | |
| 156 virtual ~TapSuppressionControllerTest() { | |
| 157 } | |
| 158 | |
| 159 protected: | |
| 160 // testing::Test | |
| 161 virtual void SetUp() { | |
| 162 tap_suppression_controller_.reset(new MockTapSuppressionController()); | |
| 163 } | |
| 164 | |
| 165 virtual void TearDown() { | |
| 166 tap_suppression_controller_.reset(); | |
| 167 } | |
| 168 | |
| 169 scoped_ptr<MockTapSuppressionController> tap_suppression_controller_; | |
| 170 }; | |
| 171 | |
| 172 // Test TapSuppressionController for when GestureFlingCancel Ack comes before | |
| 173 // TapDown and everything happens without any delays. | |
| 174 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapFast) { | |
| 175 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 176 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 177 | |
| 178 // Send GestureFlingCancel. | |
| 179 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 180 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 181 tap_suppression_controller_->last_actions()); | |
| 182 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 183 tap_suppression_controller_->state()); | |
| 184 | |
| 185 // Send GestureFlingCancel Ack. | |
| 186 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 187 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 188 tap_suppression_controller_->last_actions()); | |
| 189 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 190 tap_suppression_controller_->state()); | |
| 191 | |
| 192 // Send TapDown. This TapDown should be suppressed. | |
| 193 tap_suppression_controller_->SendTapDown(); | |
| 194 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 195 tap_suppression_controller_->last_actions()); | |
| 196 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 197 tap_suppression_controller_->state()); | |
| 198 | |
| 199 // Send TapUp. This TapUp should be suppressed. | |
| 200 tap_suppression_controller_->SendTapUp(); | |
| 201 EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | | |
| 202 MockTapSuppressionController::TAP_DOWN_DROPPED, | |
| 203 tap_suppression_controller_->last_actions()); | |
| 204 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 205 tap_suppression_controller_->state()); | |
| 206 } | |
| 207 | |
| 208 // Test TapSuppressionController for when GestureFlingCancel Ack comes before | |
| 209 // TapDown, but there is a small delay between TapDown and TapUp. | |
| 210 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapInsufficientlyLateTapUp) { | |
| 211 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 212 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 213 | |
| 214 // Send GestureFlingCancel. | |
| 215 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 216 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 217 tap_suppression_controller_->last_actions()); | |
| 218 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 219 tap_suppression_controller_->state()); | |
| 220 | |
| 221 // Send GestureFlingCancel Ack. | |
| 222 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 223 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 224 tap_suppression_controller_->last_actions()); | |
| 225 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 226 tap_suppression_controller_->state()); | |
| 227 | |
| 228 // Send TapDown. This TapDown should be suppressed. | |
| 229 tap_suppression_controller_->SendTapDown(); | |
| 230 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 231 tap_suppression_controller_->last_actions()); | |
| 232 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 233 tap_suppression_controller_->state()); | |
| 234 | |
| 235 // Wait less than allowed delay between TapDown and TapUp, so they are still | |
| 236 // considered a tap. | |
| 237 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(7)); | |
| 238 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 239 tap_suppression_controller_->last_actions()); | |
| 240 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 241 tap_suppression_controller_->state()); | |
| 242 | |
| 243 // Send TapUp. This TapUp should be suppressed. | |
| 244 tap_suppression_controller_->SendTapUp(); | |
| 245 EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | | |
| 246 MockTapSuppressionController::TAP_DOWN_DROPPED, | |
| 247 tap_suppression_controller_->last_actions()); | |
| 248 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 249 tap_suppression_controller_->state()); | |
| 250 } | |
| 251 | |
| 252 // Test TapSuppressionController for when GestureFlingCancel Ack comes before | |
| 253 // TapDown, but there is a long delay between TapDown and TapUp. | |
| 254 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapUp) { | |
| 255 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 256 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 257 | |
| 258 // Send GestureFlingCancel. | |
| 259 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 260 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 261 tap_suppression_controller_->last_actions()); | |
| 262 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 263 tap_suppression_controller_->state()); | |
| 264 | |
| 265 // Send processed GestureFlingCancel Ack. | |
| 266 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 267 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 268 tap_suppression_controller_->last_actions()); | |
| 269 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 270 tap_suppression_controller_->state()); | |
| 271 | |
| 272 // Send MouseDown. This MouseDown should be suppressed, for now. | |
| 273 tap_suppression_controller_->SendTapDown(); | |
| 274 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 275 tap_suppression_controller_->last_actions()); | |
| 276 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 277 tap_suppression_controller_->state()); | |
| 278 | |
| 279 // Wait more than allowed delay between TapDown and TapUp, so they are not | |
| 280 // considered a tap. This should release the previously suppressed TapDown. | |
| 281 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13)); | |
| 282 EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED, | |
| 283 tap_suppression_controller_->last_actions()); | |
| 284 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 285 tap_suppression_controller_->state()); | |
| 286 | |
| 287 // Send TapUp. This TapUp should not be suppressed. | |
| 288 tap_suppression_controller_->SendTapUp(); | |
| 289 EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, | |
| 290 tap_suppression_controller_->last_actions()); | |
| 291 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 292 tap_suppression_controller_->state()); | |
| 293 } | |
| 294 | |
| 295 // Test TapSuppressionController for when GestureFlingCancel Ack comes before | |
| 296 // TapDown, but there is a small delay between the Ack and TapDown. | |
| 297 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapInsufficientlyLateTapDown) { | |
| 298 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 299 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 300 | |
| 301 // Send GestureFlingCancel. | |
| 302 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 303 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 304 tap_suppression_controller_->last_actions()); | |
| 305 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 306 tap_suppression_controller_->state()); | |
| 307 | |
| 308 // Send GestureFlingCancel Ack. | |
| 309 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 310 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 311 tap_suppression_controller_->last_actions()); | |
| 312 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 313 tap_suppression_controller_->state()); | |
| 314 | |
| 315 // Wait less than allowed delay between GestureFlingCancel and TapDown, so the | |
| 316 // TapDown is still considered associated with the GestureFlingCancel. | |
| 317 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(7)); | |
| 318 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 319 tap_suppression_controller_->last_actions()); | |
| 320 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 321 tap_suppression_controller_->state()); | |
| 322 | |
| 323 // Send TapDown. This TapDown should be suppressed. | |
| 324 tap_suppression_controller_->SendTapDown(); | |
| 325 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 326 tap_suppression_controller_->last_actions()); | |
| 327 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 328 tap_suppression_controller_->state()); | |
| 329 | |
| 330 // Send TapUp. This TapUp should be suppressed. | |
| 331 tap_suppression_controller_->SendTapUp(); | |
| 332 EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | | |
| 333 MockTapSuppressionController::TAP_DOWN_DROPPED, | |
| 334 tap_suppression_controller_->last_actions()); | |
| 335 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 336 tap_suppression_controller_->state()); | |
| 337 } | |
| 338 | |
| 339 // Test TapSuppressionController for when GestureFlingCancel Ack comes before | |
| 340 // TapDown, but there is a long delay between the Ack and TapDown. | |
| 341 TEST_F(TapSuppressionControllerTest, GFCAckBeforeTapSufficientlyLateTapDown) { | |
| 342 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 343 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 344 | |
| 345 // Send GestureFlingCancel. | |
| 346 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 347 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 348 tap_suppression_controller_->last_actions()); | |
| 349 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 350 tap_suppression_controller_->state()); | |
| 351 | |
| 352 // Send GestureFlingCancel Ack. | |
| 353 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 354 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 355 tap_suppression_controller_->last_actions()); | |
| 356 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 357 tap_suppression_controller_->state()); | |
| 358 | |
| 359 // Wait more than allowed delay between GestureFlingCancel and TapDown, so the | |
| 360 // TapDown is not considered associated with the GestureFlingCancel. | |
| 361 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13)); | |
| 362 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 363 tap_suppression_controller_->last_actions()); | |
| 364 EXPECT_EQ(MockTapSuppressionController::LAST_CANCEL_STOPPED_FLING, | |
| 365 tap_suppression_controller_->state()); | |
| 366 | |
| 367 // Send TapDown. This TapDown should not be suppressed. | |
| 368 tap_suppression_controller_->SendTapDown(); | |
| 369 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_FORWARDED, | |
| 370 tap_suppression_controller_->last_actions()); | |
| 371 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 372 tap_suppression_controller_->state()); | |
| 373 | |
| 374 // Send MouseUp. This MouseUp should not be suppressed. | |
| 375 tap_suppression_controller_->SendTapUp(); | |
| 376 EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, | |
| 377 tap_suppression_controller_->last_actions()); | |
| 378 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 379 tap_suppression_controller_->state()); | |
| 380 } | |
| 381 | |
| 382 // Test TapSuppressionController for when unprocessed GestureFlingCancel Ack | |
| 383 // comes after TapDown and everything happens without any delay. | |
| 384 TEST_F(TapSuppressionControllerTest, GFCAckUnprocessedAfterTapFast) { | |
| 385 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 386 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 387 | |
| 388 // Send GestureFlingCancel. | |
| 389 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 390 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 391 tap_suppression_controller_->last_actions()); | |
| 392 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 393 tap_suppression_controller_->state()); | |
| 394 | |
| 395 // Send TapDown. This TapDown should be suppressed, for now. | |
| 396 tap_suppression_controller_->SendTapDown(); | |
| 397 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 398 tap_suppression_controller_->last_actions()); | |
| 399 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 400 tap_suppression_controller_->state()); | |
| 401 | |
| 402 // Send unprocessed GestureFlingCancel Ack. This should release the | |
| 403 // previously suppressed TapDown. | |
| 404 tap_suppression_controller_->SendGestureFlingCancelAck(false); | |
| 405 EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED, | |
| 406 tap_suppression_controller_->last_actions()); | |
| 407 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 408 tap_suppression_controller_->state()); | |
| 409 | |
| 410 // Send TapUp. This TapUp should not be suppressed. | |
| 411 tap_suppression_controller_->SendTapUp(); | |
| 412 EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, | |
| 413 tap_suppression_controller_->last_actions()); | |
| 414 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 415 tap_suppression_controller_->state()); | |
| 416 } | |
| 417 | |
| 418 // Test TapSuppressionController for when processed GestureFlingCancel Ack comes | |
| 419 // after TapDown and everything happens without any delay. | |
| 420 TEST_F(TapSuppressionControllerTest, GFCAckProcessedAfterTapFast) { | |
| 421 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 422 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 423 | |
| 424 // Send GestureFlingCancel. | |
| 425 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 426 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 427 tap_suppression_controller_->last_actions()); | |
| 428 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 429 tap_suppression_controller_->state()); | |
| 430 | |
| 431 // Send TapDown. This TapDown should be suppressed. | |
| 432 tap_suppression_controller_->SendTapDown(); | |
| 433 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 434 tap_suppression_controller_->last_actions()); | |
| 435 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 436 tap_suppression_controller_->state()); | |
| 437 | |
| 438 // Send processed GestureFlingCancel Ack. | |
| 439 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 440 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 441 tap_suppression_controller_->last_actions()); | |
| 442 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 443 tap_suppression_controller_->state()); | |
| 444 | |
| 445 // Send TapUp. This TapUp should be suppressed. | |
| 446 tap_suppression_controller_->SendTapUp(); | |
| 447 EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | | |
| 448 MockTapSuppressionController::TAP_DOWN_DROPPED, | |
| 449 tap_suppression_controller_->last_actions()); | |
| 450 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 451 tap_suppression_controller_->state()); | |
| 452 } | |
| 453 | |
| 454 // Test TapSuppressionController for when GestureFlingCancel Ack comes after | |
| 455 // TapDown and there is a small delay between the Ack and TapUp. | |
| 456 TEST_F(TapSuppressionControllerTest, GFCAckAfterTapInsufficientlyLateTapUp) { | |
| 457 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 458 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 459 | |
| 460 // Send GestureFlingCancel. | |
| 461 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 462 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 463 tap_suppression_controller_->last_actions()); | |
| 464 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 465 tap_suppression_controller_->state()); | |
| 466 | |
| 467 // Send TapDown. This TapDown should be suppressed. | |
| 468 tap_suppression_controller_->SendTapDown(); | |
| 469 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 470 tap_suppression_controller_->last_actions()); | |
| 471 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 472 tap_suppression_controller_->state()); | |
| 473 | |
| 474 // Send GestureFlingCancel Ack. | |
| 475 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 476 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 477 tap_suppression_controller_->last_actions()); | |
| 478 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 479 tap_suppression_controller_->state()); | |
| 480 | |
| 481 // Wait less than allowed delay between TapDown and TapUp, so they are still | |
| 482 // considered as a tap. | |
| 483 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(7)); | |
| 484 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 485 tap_suppression_controller_->last_actions()); | |
| 486 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 487 tap_suppression_controller_->state()); | |
| 488 | |
| 489 // Send TapUp. This TapUp should be suppressed. | |
| 490 tap_suppression_controller_->SendTapUp(); | |
| 491 EXPECT_EQ(MockTapSuppressionController::TAP_UP_SUPPRESSED | | |
| 492 MockTapSuppressionController::TAP_DOWN_DROPPED, | |
| 493 tap_suppression_controller_->last_actions()); | |
| 494 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 495 tap_suppression_controller_->state()); | |
| 496 } | |
| 497 | |
| 498 // Test TapSuppressionController for when GestureFlingCancel Ack comes after | |
| 499 // TapDown and there is a long delay between the Ack and TapUp. | |
| 500 TEST_F(TapSuppressionControllerTest, GFCAckAfterTapSufficientlyLateTapUp) { | |
| 501 tap_suppression_controller_->set_max_cancel_to_down_time_in_ms(10); | |
| 502 tap_suppression_controller_->set_max_tap_gap_time_in_ms(10); | |
| 503 | |
| 504 // Send GestureFlingCancel. | |
| 505 tap_suppression_controller_->SendGestureFlingCancel(); | |
| 506 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 507 tap_suppression_controller_->last_actions()); | |
| 508 EXPECT_EQ(MockTapSuppressionController::GFC_IN_PROGRESS, | |
| 509 tap_suppression_controller_->state()); | |
| 510 | |
| 511 // Send TapDown. This TapDown should be suppressed, for now. | |
| 512 tap_suppression_controller_->SendTapDown(); | |
| 513 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_DEFERRED, | |
| 514 tap_suppression_controller_->last_actions()); | |
| 515 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 516 tap_suppression_controller_->state()); | |
| 517 | |
| 518 // Send GestureFlingCancel Ack. | |
| 519 tap_suppression_controller_->SendGestureFlingCancelAck(true); | |
| 520 EXPECT_EQ(MockTapSuppressionController::NONE, | |
| 521 tap_suppression_controller_->last_actions()); | |
| 522 EXPECT_EQ(MockTapSuppressionController::TAP_DOWN_STASHED, | |
| 523 tap_suppression_controller_->state()); | |
| 524 | |
| 525 // Wait more than allowed delay between TapDown and TapUp, so they are not | |
| 526 // considered as a tap. This should release the previously suppressed TapDown. | |
| 527 tap_suppression_controller_->AdvanceTime(TimeDelta::FromMilliseconds(13)); | |
| 528 EXPECT_EQ(MockTapSuppressionController::STASHED_TAP_DOWN_FORWARDED, | |
| 529 tap_suppression_controller_->last_actions()); | |
| 530 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 531 tap_suppression_controller_->state()); | |
| 532 | |
| 533 // Send TapUp. This TapUp should not be suppressed. | |
| 534 tap_suppression_controller_->SendTapUp(); | |
| 535 EXPECT_EQ(MockTapSuppressionController::TAP_UP_FORWARDED, | |
| 536 tap_suppression_controller_->last_actions()); | |
| 537 EXPECT_EQ(MockTapSuppressionController::NOTHING, | |
| 538 tap_suppression_controller_->state()); | |
| 539 } | |
| 540 | |
| 541 } // namespace content | |
| OLD | NEW |