summaryrefslogtreecommitdiff
path: root/chromium/ui/aura/gestures/gesture_recognizer_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/aura/gestures/gesture_recognizer_unittest.cc')
-rw-r--r--chromium/ui/aura/gestures/gesture_recognizer_unittest.cc37
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