Commit 08255cfd authored by sahel's avatar sahel Committed by Commit bot

MouseWheelEventQueue sends scrollEnd right away when latching is disabled.

When latching is disabled, instead of setting a timer with zero timeout
to send the scrollEnd event, we send the event right away.
This change has happened to prevent unittests from unintentionally
simulating the latching behavior when it's disabled.

BUG=706175

Review-Url: https://codereview.chromium.org/2782733002
Cr-Commit-Position: refs/heads/master@{#460516}
parent a542c2ef
......@@ -1026,19 +1026,41 @@ TEST_F(InputRouterImplTest, UnhandledWheelEvent) {
// were processed.
EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount());
// There should be a ScrollBegin and ScrollUpdate, MouseWheel sent
// There should be a ScrollBegin and ScrollUpdate, MouseWheel sent.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5);
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_CONSUMED);
// The GestureScrollUpdate ACK releases the GestureScrollEnd.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Check that the ack for the ScrollUpdate and ScrollEnd
// were processed.
EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// There should be a ScrollBegin and ScrollUpdate sent.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
// Check that the correct unhandled wheel event was received.
EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount());
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state());
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
ack_handler_->acked_wheel_event_state());
EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -10);
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_CONSUMED);
// The GestureScrollUpdate ACK releases the GestureScrollEnd.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Check that the ack for the ScrollUpdate and ScrollEnd
// were processed.
EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount());
}
TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) {
......
......@@ -48,6 +48,7 @@ void MockInputAckHandler::OnWheelEventAck(
InputEventAckState ack_result) {
VLOG(1) << __FUNCTION__ << " called!";
acked_wheel_event_ = event.event;
acked_wheel_event_state_ = ack_result;
RecordAckCalled(event.event.type(), ack_result);
}
......
......@@ -55,6 +55,10 @@ class MockInputAckHandler : public InputAckHandler {
}
InputEventAckState ack_state() const { return ack_state_; }
InputEventAckState acked_wheel_event_state() const {
return acked_wheel_event_state_;
}
blink::WebInputEvent::Type ack_event_type() const { return ack_event_type_; }
const NativeWebKeyboardEvent& acked_keyboard_event() const {
......@@ -80,6 +84,7 @@ class MockInputAckHandler : public InputAckHandler {
bool unexpected_event_ack_called_;
blink::WebInputEvent::Type ack_event_type_;
InputEventAckState ack_state_;
InputEventAckState acked_wheel_event_state_;
std::unique_ptr<NativeWebKeyboardEvent> acked_key_event_;
blink::WebMouseWheelEvent acked_wheel_event_;
TouchEventWithLatencyInfo acked_touch_event_;
......
......@@ -246,11 +246,8 @@ void MouseWheelEventQueue::ProcessMouseWheelAck(
// crbug.com/526463 is fully implemented.
SendScrollEnd(scroll_update, true);
} else if (!has_phase_info) {
scroll_end_timer_.Start(
FROM_HERE,
base::TimeDelta::FromMilliseconds(scroll_transaction_ms_),
base::Bind(&MouseWheelEventQueue::SendScrollEnd,
base::Unretained(this), scroll_update, false));
DCHECK_EQ(0, scroll_transaction_ms_);
SendScrollEnd(scroll_update, false);
}
}
}
......
......@@ -297,15 +297,24 @@ class MouseWheelEventQueueTest : public testing::TestWithParam<bool>,
EXPECT_TRUE(event_in_flight());
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_MOUSE_WHEEL(sent_input_event(2));
EXPECT_EQ(3U, GetAndResetSentEventCount());
if (scroll_latching_enabled_) {
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_MOUSE_WHEEL(sent_input_event(2));
EXPECT_EQ(3U, GetAndResetSentEventCount());
RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
} else {
EXPECT_EQ(4U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
EXPECT_MOUSE_WHEEL(sent_input_event(3));
EXPECT_EQ(4U, GetAndResetSentEventCount());
}
}
void PhaseGestureSendingTest(bool high_precision) {
......@@ -509,16 +518,29 @@ TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
EXPECT_FALSE(event_in_flight());
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(2U, GetAndResetSentEventCount());
if (scroll_latching_enabled_) {
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(2U, GetAndResetSentEventCount());
} else {
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
EXPECT_EQ(3U, GetAndResetSentEventCount());
}
// Ensure that a gesture scroll begin terminates the current scroll event.
SendGestureEvent(WebInputEvent::GestureScrollBegin);
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
EXPECT_EQ(1U, GetAndResetSentEventCount());
if (scroll_latching_enabled_) {
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
EXPECT_EQ(1U, GetAndResetSentEventCount());
} else {
// ScrollEnd has already been sent.
EXPECT_EQ(0U, all_sent_events().size());
}
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false);
......@@ -550,10 +572,18 @@ TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
EXPECT_FALSE(event_in_flight());
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(2U, GetAndResetSentEventCount());
if (scroll_latching_enabled_) {
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(2U, GetAndResetSentEventCount());
} else {
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
EXPECT_EQ(3U, GetAndResetSentEventCount());
}
}
TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
......@@ -572,17 +602,26 @@ TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
EXPECT_FALSE(event_in_flight());
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
EXPECT_EQ(2U, GetAndResetSentEventCount());
RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
EXPECT_EQ(1U, GetAndResetSentEventCount());
if (scroll_latching_enabled_) {
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
EXPECT_EQ(2U, GetAndResetSentEventCount());
RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2);
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
EXPECT_EQ(1U, GetAndResetSentEventCount());
} else {
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
EXPECT_EQ(3U, GetAndResetSentEventCount());
}
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false,
......@@ -597,15 +636,28 @@ TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
EXPECT_FALSE(event_in_flight());
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
if (scroll_latching_enabled_) {
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
} else {
EXPECT_EQ(3U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(2));
}
EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
EXPECT_EQ(2U, GetAndResetSentEventCount());
if (scroll_latching_enabled_)
EXPECT_EQ(2U, GetAndResetSentEventCount());
else
EXPECT_EQ(3U, GetAndResetSentEventCount());
}
TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
if (!scroll_latching_enabled_)
return;
const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false,
......@@ -627,13 +679,8 @@ TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
EXPECT_EQ(2U, GetAndResetSentEventCount());
RunTasksAndWait(base::TimeDelta::FromMilliseconds(1));
if (!scroll_latching_enabled_) {
EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
EXPECT_EQ(1U, GetAndResetSentEventCount());
} else {
EXPECT_EQ(0U, GetAndResetSentEventCount());
}
RunTasksAndWait(DefaultScrollEndTimeoutDelay() / 2);
EXPECT_EQ(0U, GetAndResetSentEventCount());
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false,
WebInputEvent::RailsModeVertical);
......@@ -648,22 +695,12 @@ TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type());
EXPECT_EQ(1U, GetAndResetAckedEventCount());
int updateEventIndex = -1;
if (!scroll_latching_enabled_) {
EXPECT_EQ(2U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
updateEventIndex = 1;
} else {
// Scroll latching: no new scroll begin expected.
EXPECT_EQ(1U, all_sent_events().size());
updateEventIndex = 0;
}
EXPECT_GE(updateEventIndex, 0);
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex));
EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX);
EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY);
EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1),
GetAndResetSentEventCount());
// Scroll latching: no new scroll begin expected.
EXPECT_EQ(1U, all_sent_events().size());
EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(0));
EXPECT_EQ(0U, sent_gesture_event(0)->data.scrollUpdate.deltaX);
EXPECT_EQ(1U, sent_gesture_event(0)->data.scrollUpdate.deltaY);
EXPECT_EQ(1U, GetAndResetSentEventCount());
}
INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests,
......
......@@ -3224,23 +3224,27 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelNotPreciseScrollEvent) {
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin, ScrollUpdate, MouseWheel will be queued events
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollUpdate, MouseWheel will be queued events
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
}
TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollEventOverscrolls) {
......@@ -3260,28 +3264,35 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollEventOverscrolls) {
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin, ScrollUpdate, MouseWheel will be queued events
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Receive ACK for the second (coalesced) event as not processed. This will
// start a back navigation. However, this will also cause the queued next
// event to be sent to the renderer. But since overscroll navigation has
// started, that event will also be included in the overscroll computation
// instead of being sent to the renderer. So the result will be an overscroll
// back navigation, and no event will be sent to the renderer.
// back navigation, and no ScrollUpdate event will be sent to the renderer.
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollUpdate, MouseWheel will be queued events
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin and ScrollEnd will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
......@@ -3316,10 +3327,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
// Receive ACK the first wheel event as processed.
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin, ScrollUpdate, MouseWheel will be queued events
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
......@@ -3331,19 +3344,21 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
// ScrollUpdate, MouseWheel will be queued events
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollUpdate will be queued events
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, and MouseWheel will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(0U, sink_->message_count());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
}
......@@ -3357,9 +3372,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
......@@ -3368,9 +3386,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
......@@ -3379,9 +3400,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
EXPECT_EQ(60.f, overscroll_delta_x());
......@@ -3393,7 +3417,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(0U, sink_->message_count());
// ScrollBegin and ScrollEnd will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
......@@ -3402,10 +3427,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
......@@ -3415,10 +3442,12 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be the queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
EXPECT_EQ(-75.f, overscroll_delta_x());
......@@ -3436,12 +3465,14 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Scroll some more so as to not overscroll.
SimulateWheelEvent(20, 0, 0, true);
......@@ -3461,7 +3492,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, and ScrollEnd will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
EXPECT_EQ(60.f, overscroll_delta_x());
......@@ -3476,7 +3508,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
blink::WebGestureDeviceTouchscreen);
SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(3U, sink_->message_count());
// ScrollBegin and FlingStart will be queued events.
EXPECT_EQ(2U, sink_->message_count());
}
// Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that
......@@ -3491,34 +3524,43 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Scroll some more so as to not overscroll.
SimulateWheelEvent(20, 0, 0, true);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Scroll some more to initiate an overscroll.
SimulateWheelEvent(30, 0, 0, true);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(60.f, overscroll_delta_x());
EXPECT_EQ(10.f, overscroll_delegate()->delta_x());
EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
......@@ -3531,7 +3573,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
blink::WebGestureDeviceTouchscreen);
SimulateGestureFlingStartEvent(10.f, 0.f, blink::WebGestureDeviceTouchpad);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(3U, sink_->message_count());
// scrollBeign and FlingStart will be queued events.
EXPECT_EQ(2U, sink_->message_count());
}
// Tests that a fling in the opposite direction of the overscroll cancels the
......@@ -3988,13 +4031,14 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin, ScrollUpdate messages.
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Send another wheel event, but in the reverse direction. The overscroll
// controller will not consume the event, because it is not triggering
......@@ -4005,13 +4049,16 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// Since it was unhandled; the overscroll should now be west
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SimulateWheelEvent(-20, 0, 0, true);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
......@@ -4020,7 +4067,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
// wheel event ack generates gesture scroll update; which gets consumed
// solely by the overflow controller.
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// No ScrollUpdates, only ScrollBegin and ScrollEnd will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
}
......@@ -4039,22 +4087,28 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollMouseMoveCompletion) {
// Receive ACK the first wheel event as not processed.
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
// ScrollBegin, ScrollUpdate, and the second MouseWheel will be queued
// events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Receive ACK for the second (coalesced) event as not processed. This will
// start an overcroll gesture.
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// ScrollBegin and ScrollUpdate will be queued events.
EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
EXPECT_EQ(0U, sink_->message_count());
// ScrollEnd will be the queued event.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// Send a mouse-move event. This should cancel the overscroll navigation
// (since the amount overscrolled is not above the threshold), and so the
......@@ -4127,7 +4181,9 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_CONSUMED);
EXPECT_TRUE(ScrollStateIsContentScrolling());
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, the second MouseWheel, and ScrollEnd will be
// queued events.
EXPECT_EQ(4U, GetSentMessageCountAndResetSink());
// The second wheel event is consumed.
SendInputEventACK(WebInputEvent::MouseWheel,
......@@ -4135,6 +4191,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_CONSUMED);
EXPECT_TRUE(ScrollStateIsContentScrolling());
// ScrollBegin, ScrollUpdate, and ScrollEnd will be queued events.
EXPECT_EQ(3U, sink_->message_count());
// Touchpad scroll can end with a zero-velocity fling. But it is not
// dispatched, but it should still reset the overscroll controller state.
......@@ -4142,7 +4200,9 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
blink::WebGestureDeviceTouchscreen);
SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad);
EXPECT_TRUE(ScrollStateIsUnknown());
EXPECT_EQ(3U, sink_->message_count());
// ScrollBegin, ScrollUpdate, ScrollEnd, and ScrollBegin will be queued
// events.
EXPECT_EQ(4U, sink_->message_count());
// Dropped flings should neither propagate *nor* indicate that they were
// consumed and have triggered a fling animation (as tracked by the router).
......@@ -4150,12 +4210,15 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
blink::WebGestureDeviceTouchscreen);
// ScrollBegin, ScrollUpdate, ScrollEnd, ScrollBegin, and ScrollEnd will be
// queued events.
EXPECT_EQ(5U, GetSentMessageCountAndResetSink());
SimulateWheelEvent(-5, 0, 0, true); // sent directly
SimulateWheelEvent(-60, 0, 0, true); // enqueued
SimulateWheelEvent(-100, 0, 0, true); // coalesced into previous event
EXPECT_TRUE(ScrollStateIsUnknown());
EXPECT_EQ(5U, GetSentMessageCountAndResetSink());
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// The first wheel scroll did not scroll content. Overscroll should not start
// yet, since enough hasn't been scrolled.
......@@ -4164,7 +4227,9 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SendInputEventACK(WebInputEvent::GestureScrollUpdate,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_TRUE(ScrollStateIsUnknown());
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
// ScrollBegin, ScrollUpdate, the second Mousewheel, and ScrollEnd will be
// queued events.
EXPECT_EQ(4U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::MouseWheel,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
......@@ -4172,7 +4237,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
EXPECT_TRUE(ScrollStateIsOverscrolling());
EXPECT_EQ(1U, sink_->message_count());
// ScrollBegin, ScrollUpdate, and ScrollEnd will be queued events.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
// The GestureScrollBegin will reset the delegate's mode, so check it here.
EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
......@@ -4181,7 +4247,8 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest,
SimulateGestureFlingStartEvent(0.f, 0.f, blink::WebGestureDeviceTouchpad);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_TRUE(ScrollStateIsUnknown());
EXPECT_EQ(3U, sink_->message_count());
// ScrollBegin will be the queued event.
EXPECT_EQ(1U, sink_->message_count());
EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment