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