Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(391)

Unified Diff: ui/events/blink/input_handler_proxy_unittest.cc

Issue 2746513002: [Compositor event queue] Queue GestureFlingStart/Cancel together with scroll/pinch (Closed)
Patch Set: dtapuska@'s review 2: Use IsGestureScrollOrFlingOrPinch Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/blink/input_handler_proxy.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/blink/input_handler_proxy_unittest.cc
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc
index 6c866856e9e6032b29eb52d1f7432677b7c6616c..a9b6b2af14c58498788bfa3df7641eb46c4e1dfe 100644
--- a/ui/events/blink/input_handler_proxy_unittest.cc
+++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -126,15 +126,17 @@ WebGestureEvent CreateFling(WebGestureDevice source_device,
modifiers);
}
-WebScopedInputEvent CreateGestureScrollOrPinch(WebInputEvent::Type type,
- float deltaYOrScale = 0,
- int x = 0,
- int y = 0) {
+WebScopedInputEvent CreateGestureScrollFlingPinch(WebInputEvent::Type type,
+ float deltaYOrScale = 0,
+ int x = 0,
+ int y = 0) {
WebGestureEvent gesture(type, WebInputEvent::NoModifiers,
WebInputEvent::TimeStampForTesting);
gesture.sourceDevice = blink::WebGestureDeviceTouchpad;
if (type == WebInputEvent::GestureScrollUpdate) {
gesture.data.scrollUpdate.deltaY = deltaYOrScale;
+ } else if (type == WebInputEvent::GestureFlingStart) {
+ gesture.data.flingStart.velocityY = deltaYOrScale;
} else if (type == WebInputEvent::GesturePinchUpdate) {
gesture.data.pinchUpdate.scale = deltaYOrScale;
gesture.x = x;
@@ -541,7 +543,7 @@ class InputHandlerProxyEventQueueTest : public testing::Test {
int y = 0) {
LatencyInfo latency;
input_handler_proxy_->HandleInputEventWithLatencyInfo(
- CreateGestureScrollOrPinch(type, deltay_or_scale, x, y), latency,
+ CreateGestureScrollFlingPinch(type, deltay_or_scale, x, y), latency,
base::Bind(
&InputHandlerProxyEventQueueTest::DidHandleInputEventAndOverscroll,
weak_ptr_factory_.GetWeakPtr()));
@@ -3532,6 +3534,55 @@ TEST_F(InputHandlerProxyEventQueueTest, OriginalEventsTracing) {
testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
}
+TEST_F(InputHandlerProxyEventQueueTest, GestureScrollFlingOrder) {
+ // Handle scroll on compositor.
+ cc::InputHandlerScrollResult scroll_result_did_scroll_;
+ scroll_result_did_scroll_.did_scroll = true;
+
+ EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_))
+ .WillRepeatedly(testing::Return(kImplThreadScrollState));
+ EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput())
+ .Times(::testing::AtLeast(1));
+ EXPECT_CALL(
+ mock_input_handler_,
+ ScrollBy(testing::Property(&cc::ScrollState::delta_y, testing::Gt(0))))
+ .WillRepeatedly(testing::Return(scroll_result_did_scroll_));
+ EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_))
+ .Times(::testing::AtLeast(1));
+
+ // Simulate scroll.
+ HandleGestureEvent(WebInputEvent::GestureScrollBegin);
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -20);
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -30);
+ HandleGestureEvent(WebInputEvent::GestureFlingStart, -10);
+
+ // ScrollUpdate and FlingStart should be queued.
+ EXPECT_EQ(2ul, event_queue().size());
+ EXPECT_EQ(1ul, event_disposition_recorder_.size());
+ EXPECT_EQ(WebInputEvent::GestureScrollUpdate,
+ event_queue()[0]->event().type());
+ EXPECT_EQ(WebInputEvent::GestureFlingStart, event_queue()[1]->event().type());
+
+ // Dispatch events.
+ input_handler_proxy_->DeliverInputForBeginFrame();
+ EXPECT_EQ(0ul, event_queue().size());
+ EXPECT_EQ(4ul, event_disposition_recorder_.size());
+ EXPECT_TRUE(
+ input_handler_proxy_->gesture_scroll_on_impl_thread_for_testing());
+
+ // Send FlingCancel to stop scrolling.
+ HandleGestureEvent(WebInputEvent::GestureFlingCancel);
+ EXPECT_EQ(1ul, event_queue().size());
+ EXPECT_EQ(WebInputEvent::GestureFlingCancel,
+ event_queue()[0]->event().type());
+ input_handler_proxy_->DeliverInputForBeginFrame();
+ EXPECT_EQ(0ul, event_queue().size());
+ EXPECT_EQ(5ul, event_disposition_recorder_.size());
+ // Should stop scrolling. Note that no ScrollEnd was sent.
+ EXPECT_TRUE(
+ !input_handler_proxy_->gesture_scroll_on_impl_thread_for_testing());
+}
+
INSTANTIATE_TEST_CASE_P(AnimateInput,
InputHandlerProxyTest,
testing::ValuesIn(test_types));
« no previous file with comments | « ui/events/blink/input_handler_proxy.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698