Chromium Code Reviews| 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 |