OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" | 5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
44 ~MouseWheelEventQueueTest() override {} | 44 ~MouseWheelEventQueueTest() override {} |
45 | 45 |
46 // MouseWheelEventQueueClient | 46 // MouseWheelEventQueueClient |
47 void SendMouseWheelEventImmediately( | 47 void SendMouseWheelEventImmediately( |
48 const MouseWheelEventWithLatencyInfo& event) override { | 48 const MouseWheelEventWithLatencyInfo& event) override { |
49 sent_events_.push_back(event.event); | 49 sent_events_.push_back(event.event); |
50 } | 50 } |
51 | 51 |
52 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { | 52 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { |
53 sent_events_.push_back(event.event); | 53 sent_events_.push_back(event.event); |
54 sent_gesture_events_.push_back(event.event); | |
54 } | 55 } |
55 | 56 |
56 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, | 57 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, |
57 InputEventAckState ack_result) override { | 58 InputEventAckState ack_result) override { |
58 ++acked_event_count_; | 59 ++acked_event_count_; |
59 last_acked_event_ = event.event; | 60 last_acked_event_ = event.event; |
60 last_acked_event_state_ = ack_result; | 61 last_acked_event_state_ = ack_result; |
61 } | 62 } |
62 | 63 |
63 protected: | 64 protected: |
64 void SetUpForGestureTesting(bool send_gestures) { | 65 void SetUpForGestureTesting(bool send_gestures) { |
65 queue_.reset( | 66 queue_.reset( |
66 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); | 67 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); |
67 } | 68 } |
68 | 69 |
69 size_t queued_event_count() const { return queue_->queued_size(); } | 70 size_t queued_event_count() const { return queue_->queued_size(); } |
70 | 71 |
71 bool event_in_flight() const { return queue_->event_in_flight(); } | 72 bool event_in_flight() const { return queue_->event_in_flight(); } |
72 | 73 |
73 std::vector<WebInputEvent>& all_sent_events() { return sent_events_; } | 74 std::vector<WebInputEvent>& all_sent_events() { return sent_events_; } |
74 | 75 |
76 std::vector<WebGestureEvent>& sent_gesture_events() { | |
77 return sent_gesture_events_; | |
78 } | |
79 | |
75 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } | 80 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } |
76 | 81 |
77 size_t GetAndResetSentEventCount() { | 82 size_t GetAndResetSentEventCount() { |
78 size_t count = sent_events_.size(); | 83 size_t count = sent_events_.size(); |
79 sent_events_.clear(); | 84 sent_events_.clear(); |
85 sent_gesture_events_.clear(); | |
80 return count; | 86 return count; |
81 } | 87 } |
82 | 88 |
83 size_t GetAndResetAckedEventCount() { | 89 size_t GetAndResetAckedEventCount() { |
84 size_t count = acked_event_count_; | 90 size_t count = acked_event_count_; |
85 acked_event_count_ = 0; | 91 acked_event_count_ = 0; |
86 return count; | 92 return count; |
87 } | 93 } |
88 | 94 |
89 void SendMouseWheelEventAck(InputEventAckState ack_result) { | 95 void SendMouseWheelEventAck(InputEventAckState ack_result) { |
(...skipping 15 matching lines...) Expand all Loading... | |
105 } | 111 } |
106 | 112 |
107 static void RunTasksAndWait(base::TimeDelta delay) { | 113 static void RunTasksAndWait(base::TimeDelta delay) { |
108 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 114 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
109 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), delay); | 115 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), delay); |
110 base::MessageLoop::current()->Run(); | 116 base::MessageLoop::current()->Run(); |
111 } | 117 } |
112 | 118 |
113 scoped_ptr<MouseWheelEventQueue> queue_; | 119 scoped_ptr<MouseWheelEventQueue> queue_; |
114 std::vector<WebInputEvent> sent_events_; | 120 std::vector<WebInputEvent> sent_events_; |
121 std::vector<WebGestureEvent> sent_gesture_events_; | |
115 size_t acked_event_count_; | 122 size_t acked_event_count_; |
116 InputEventAckState last_acked_event_state_; | 123 InputEventAckState last_acked_event_state_; |
117 base::MessageLoopForUI message_loop_; | 124 base::MessageLoopForUI message_loop_; |
118 WebMouseWheelEvent last_acked_event_; | 125 WebMouseWheelEvent last_acked_event_; |
119 }; | 126 }; |
120 | 127 |
121 // Tests that mouse wheel events are queued properly. | 128 // Tests that mouse wheel events are queued properly. |
122 TEST_F(MouseWheelEventQueueTest, Basic) { | 129 TEST_F(MouseWheelEventQueueTest, Basic) { |
123 SendMouseWheel(10, 10, 1, 1, 0); | 130 SendMouseWheel(10, 10, 1, 1, 0); |
124 EXPECT_EQ(0U, queued_event_count()); | 131 EXPECT_EQ(0U, queued_event_count()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 | 170 |
164 // Receive an ACK for the mouse wheel event and release the next | 171 // Receive an ACK for the mouse wheel event and release the next |
165 // mouse wheel event. | 172 // mouse wheel event. |
166 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 173 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
167 EXPECT_EQ(0U, queued_event_count()); | 174 EXPECT_EQ(0U, queued_event_count()); |
168 EXPECT_TRUE(event_in_flight()); | 175 EXPECT_TRUE(event_in_flight()); |
169 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 176 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
170 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 177 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
171 EXPECT_EQ(3U, all_sent_events().size()); | 178 EXPECT_EQ(3U, all_sent_events().size()); |
172 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 179 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); |
180 EXPECT_EQ(WebGestureEvent::Pixels, | |
tdresser
2016/02/18 16:00:46
Should we have a test which expects PrecisePixels?
dtapuska
2016/02/18 16:16:44
I knew you would ask.. :-)
| |
181 sent_gesture_events()[0].data.scrollBegin.deltaHintUnits); | |
173 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 182 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); |
183 EXPECT_EQ(WebGestureEvent::Pixels, | |
184 sent_gesture_events()[1].data.scrollUpdate.deltaUnits); | |
174 EXPECT_EQ(WebInputEvent::MouseWheel, all_sent_events()[2].type); | 185 EXPECT_EQ(WebInputEvent::MouseWheel, all_sent_events()[2].type); |
175 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 186 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
176 | 187 |
177 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); | 188 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); |
178 EXPECT_EQ(1U, all_sent_events().size()); | 189 EXPECT_EQ(1U, all_sent_events().size()); |
179 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); | 190 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); |
191 EXPECT_EQ(WebGestureEvent::Pixels, | |
192 sent_gesture_events()[0].data.scrollEnd.deltaUnits); | |
180 } | 193 } |
181 | 194 |
182 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { | 195 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { |
183 SetUpForGestureTesting(true); | 196 SetUpForGestureTesting(true); |
184 SendMouseWheel(10, 10, 1, 1, 0); | 197 SendMouseWheel(10, 10, 1, 1, 0); |
185 EXPECT_EQ(0U, queued_event_count()); | 198 EXPECT_EQ(0U, queued_event_count()); |
186 EXPECT_TRUE(event_in_flight()); | 199 EXPECT_TRUE(event_in_flight()); |
187 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 200 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
188 | 201 |
189 // Receive an ACK for the mouse wheel event. | 202 // Receive an ACK for the mouse wheel event. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
231 EXPECT_FALSE(event_in_flight()); | 244 EXPECT_FALSE(event_in_flight()); |
232 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 245 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
233 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 246 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
234 EXPECT_EQ(2U, all_sent_events().size()); | 247 EXPECT_EQ(2U, all_sent_events().size()); |
235 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 248 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); |
236 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 249 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); |
237 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 250 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
238 } | 251 } |
239 | 252 |
240 } // namespace content | 253 } // namespace content |
OLD | NEW |