diff options
Diffstat (limited to 'chromium/ui/aura/gestures/gesture_recognizer_unittest.cc')
-rw-r--r-- | chromium/ui/aura/gestures/gesture_recognizer_unittest.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/chromium/ui/aura/gestures/gesture_recognizer_unittest.cc b/chromium/ui/aura/gestures/gesture_recognizer_unittest.cc index 8f728b81c73..17600f796b0 100644 --- a/chromium/ui/aura/gestures/gesture_recognizer_unittest.cc +++ b/chromium/ui/aura/gestures/gesture_recognizer_unittest.cc @@ -4806,5 +4806,42 @@ TEST_F(GestureRecognizerTest, GestureConsumerCleanupBeforeTouchAck) { EXPECT_0_EVENTS(delegate->events()); } +// Verifies that destructing a `GestureRecognizerImpl` instance with gesture +// providers works as expected (https://crbug.com/1325256). +TEST_F(GestureRecognizerTest, ResetGestureRecognizerWithGestureProvider) { + TimedEvents tes; + const int kTouchId = 4; + std::unique_ptr<GestureEventConsumeDelegate> delegate( + new GestureEventConsumeDelegate()); + std::unique_ptr<aura::Window> window(CreateTestWindowWithDelegate( + delegate.get(), /*id=*/-2345, /*bounds=*/gfx::Rect(0, 0, 50, 50), + /*parent=*/root_window())); + + // Touch press then release on `window`. + constexpr gfx::Point touch_location(/*x=*/10, /*y=*/20); + ui::TouchEvent press( + ui::ET_TOUCH_PRESSED, touch_location, /*time_stamp=*/tes.Now(), + ui::PointerDetails(ui::EventPointerType::kTouch, kTouchId)); + delegate->Reset(); + DispatchEventUsingWindowDispatcher(&press); + EXPECT_TRUE(delegate->tap_down()); + delegate->Reset(); + ui::TouchEvent release( + ui::ET_TOUCH_RELEASED, touch_location, + /*time_stamp=*/press.time_stamp() + base::Milliseconds(50), + ui::PointerDetails(ui::EventPointerType::kTouch, kTouchId)); + DispatchEventUsingWindowDispatcher(&release); + EXPECT_FALSE(delegate->tap_down()); + + // Check that the gesture recognizer owns one gesture provider. + EXPECT_EQ(1u, static_cast<ui::GestureRecognizerImpl*>( + aura::Env::GetInstance()->gesture_recognizer()) + ->consumer_gesture_provider_.size()); + + // Destroy the current gesture recognizer. + aura::Env::GetInstance()->SetGestureRecognizer( + std::make_unique<ui::GestureRecognizerImpl>()); +} + } // namespace test } // namespace aura |