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

Unified Diff: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc

Issue 2158423002: Wheel scroll latching enabled behind flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Scroll latching unit test added. Created 4 years, 5 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
Index: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
index 319563c4afd0d5f5ba951c9f437210c0bc381e97..e89f5c97e38ee9a5fbc9918f81523def6e463540 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -30,11 +30,6 @@ const float kWheelScrollX = 10;
const float kWheelScrollY = 12;
const float kWheelScrollGlobalX = 50;
const float kWheelScrollGlobalY = 72;
-const int64_t kScrollEndTimeoutMs = 100;
-
-base::TimeDelta DefaultScrollEndTimeoutDelay() {
- return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs);
-}
#define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \
EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \
@@ -140,13 +135,14 @@ base::TimeDelta DefaultScrollEndTimeoutDelay() {
} // namespace
-class MouseWheelEventQueueTest : public testing::Test,
+class MouseWheelEventQueueTest : public testing::TestWithParam<bool>,
public MouseWheelEventQueueClient {
public:
MouseWheelEventQueueTest()
: acked_event_count_(0),
last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {
- queue_.reset(new MouseWheelEventQueue(this, kScrollEndTimeoutMs));
+ queue_.reset(new MouseWheelEventQueue(this, GetParam()));
+ ScrollEndTimeoutMs_ = GetParam() ? 100 : 0;
}
~MouseWheelEventQueueTest() override {}
@@ -176,6 +172,12 @@ class MouseWheelEventQueueTest : public testing::Test,
last_acked_event_state_ = ack_result;
}
+ base::TimeDelta DefaultScrollEndTimeoutDelay() {
+ return base::TimeDelta::FromMilliseconds(ScrollEndTimeoutMs_);
+ }
+
+ int64_t ScrollEndTimeoutMs_;
+
protected:
size_t queued_event_count() const { return queue_->queued_size(); }
@@ -399,7 +401,7 @@ class MouseWheelEventQueueTest : public testing::Test,
};
// Tests that mouse wheel events are queued properly.
-TEST_F(MouseWheelEventQueueTest, Basic) {
+TEST_P(MouseWheelEventQueueTest, Basic) {
tdresser 2016/07/27 14:38:11 Do we need to change all of these to TEST_P? (I'm
sahel 2016/08/11 15:57:39 Yes, because the constructor is called in these te
tdresser 2016/08/12 13:28:32 Acknowledged.
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false);
EXPECT_EQ(0U, queued_event_count());
@@ -430,24 +432,24 @@ TEST_F(MouseWheelEventQueueTest, Basic) {
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
}
-TEST_F(MouseWheelEventQueueTest, GestureSending) {
+TEST_P(MouseWheelEventQueueTest, GestureSending) {
GestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
GestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
PhaseGestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest,
+TEST_P(MouseWheelEventQueueTest,
GestureSendingWithPhaseInformationPrecisePixels) {
PhaseGestureSendingTest(true);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
@@ -509,7 +511,7 @@ TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
EXPECT_EQ(2U, GetAndResetSentEventCount());
}
-TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
+TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
@@ -558,4 +560,70 @@ TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
EXPECT_EQ(2U, GetAndResetSentEventCount());
}
+TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
tdresser 2016/07/27 14:38:12 Add a local variable equal to GetParam(), with a b
tdresser 2016/07/27 14:38:12 Great, thanks!
sahel 2016/08/11 15:57:39 Done.
sahel 2016/08/11 15:57:39 Acknowledged.
+ const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
+ SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
+ kWheelScrollGlobalY, 1, 1, 0, false,
+ WebInputEvent::RailsModeVertical);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_TRUE(event_in_flight());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+
+ // Receive an ACK for the mouse wheel event.
+ SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(0U, queued_event_count());
+ 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(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
+ EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
+ EXPECT_EQ(2U, GetAndResetSentEventCount());
+
+ RunTasksAndWait(base::TimeDelta::FromMilliseconds(1));
+ if (!GetParam()) {
+ // Scroll end time out happens.
+ EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+ } else {
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ }
+ SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
+ kWheelScrollGlobalY, 1, 1, 0, false,
+ WebInputEvent::RailsModeVertical);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_TRUE(event_in_flight());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+
+ // Receive an ACK for the mouse wheel event.
+ SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_FALSE(event_in_flight());
+ EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+
+ int updateEventIndex = -1;
+ if (!GetParam()) {
+ 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());
+}
+
+INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests,
+ MouseWheelEventQueueTest,
+ testing::Bool());
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/input/mouse_wheel_event_queue.cc ('k') | content/public/common/content_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698