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 16 matching lines...) Expand all Loading... | |
| 27 const float kWheelScrollX = 10; | 27 const float kWheelScrollX = 10; |
| 28 const float kWheelScrollY = 12; | 28 const float kWheelScrollY = 12; |
| 29 const float kWheelScrollGlobalX = 50; | 29 const float kWheelScrollGlobalX = 50; |
| 30 const float kWheelScrollGlobalY = 72; | 30 const float kWheelScrollGlobalY = 72; |
| 31 const int64_t kScrollEndTimeoutMs = 100; | 31 const int64_t kScrollEndTimeoutMs = 100; |
| 32 | 32 |
| 33 base::TimeDelta DefaultScrollEndTimeoutDelay() { | 33 base::TimeDelta DefaultScrollEndTimeoutDelay() { |
| 34 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); | 34 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); |
| 35 } | 35 } |
| 36 | 36 |
| 37 struct CombinedEvent { | |
|
tdresser
2016/03/09 14:30:06
What about just storing a WebInputEvent?
You'd nee
dtapuska
2016/03/09 16:12:29
Done.
| |
| 38 public: | |
| 39 explicit CombinedEvent(const WebGestureEvent& event) { data.gesture = event; } | |
| 40 explicit CombinedEvent(const WebMouseWheelEvent& event) { | |
| 41 data.mouse_wheel = event; | |
| 42 } | |
| 43 union Data { | |
| 44 WebGestureEvent gesture; | |
| 45 WebMouseWheelEvent mouse_wheel; | |
| 46 | |
| 47 Data() { memset(this, 0, sizeof(Data)); } | |
| 48 } data; | |
| 49 }; | |
| 50 | |
| 51 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ | |
| 52 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event.data.gesture.type); \ | |
| 53 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
| 54 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
| 55 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
| 56 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); \ | |
| 57 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollBegin.deltaHintUnits); | |
| 58 | |
| 59 #define EXPECT_GESTURE_SCROLL_BEGIN(event) \ | |
| 60 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
| 61 EXPECT_FALSE(event.data.gesture.data.scrollBegin.synthetic); \ | |
| 62 EXPECT_FALSE(event.data.gesture.data.scrollBegin.inertial); | |
| 63 | |
| 64 #define EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(event) \ | |
| 65 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
| 66 EXPECT_TRUE(event.data.gesture.data.scrollBegin.synthetic); \ | |
| 67 EXPECT_FALSE(event.data.gesture.data.scrollBegin.inertial); | |
| 68 | |
| 69 #define EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ | |
| 70 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
| 71 EXPECT_FALSE(event.data.gesture.data.scrollBegin.synthetic); \ | |
| 72 EXPECT_TRUE(event.data.gesture.data.scrollBegin.inertial); | |
| 73 | |
| 74 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(event) \ | |
| 75 EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event); \ | |
| 76 EXPECT_TRUE(event.data.gesture.data.scrollBegin.synthetic); \ | |
| 77 EXPECT_TRUE(event.data.gesture.data.scrollBegin.inertial); | |
| 78 | |
| 79 #define EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event) \ | |
| 80 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, event.data.gesture.type); \ | |
| 81 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollUpdate.deltaUnits); \ | |
| 82 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
| 83 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
| 84 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
| 85 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); | |
| 86 | |
| 87 #define EXPECT_GESTURE_SCROLL_UPDATE(event) \ | |
| 88 EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event); \ | |
| 89 EXPECT_FALSE(event.data.gesture.data.scrollUpdate.inertial); | |
| 90 | |
| 91 #define EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(event) \ | |
| 92 EXPECT_GESTURE_SCROLL_UPDATE_IMPL(event); \ | |
| 93 EXPECT_TRUE(event.data.gesture.data.scrollUpdate.inertial); | |
| 94 | |
| 95 #define EXPECT_GESTURE_SCROLL_END_IMPL(event) \ | |
| 96 EXPECT_EQ(WebInputEvent::GestureScrollEnd, event.data.gesture.type); \ | |
| 97 EXPECT_EQ(scroll_units, event.data.gesture.data.scrollEnd.deltaUnits); \ | |
| 98 EXPECT_EQ(kWheelScrollX, event.data.gesture.x); \ | |
| 99 EXPECT_EQ(kWheelScrollY, event.data.gesture.y); \ | |
| 100 EXPECT_EQ(kWheelScrollGlobalX, event.data.gesture.globalX); \ | |
| 101 EXPECT_EQ(kWheelScrollGlobalY, event.data.gesture.globalY); | |
| 102 | |
| 103 #define EXPECT_GESTURE_SCROLL_END(event) \ | |
| 104 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
| 105 EXPECT_FALSE(event.data.gesture.data.scrollEnd.synthetic); \ | |
| 106 EXPECT_FALSE(event.data.gesture.data.scrollEnd.inertial); | |
| 107 | |
| 108 #define EXPECT_SYNTHETIC_GESTURE_SCROLL_END(event) \ | |
| 109 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
| 110 EXPECT_TRUE(event.data.gesture.data.scrollEnd.synthetic); \ | |
| 111 EXPECT_FALSE(event.data.gesture.data.scrollEnd.inertial); | |
| 112 | |
| 113 #define EXPECT_INERTIAL_GESTURE_SCROLL_END(event) \ | |
| 114 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
| 115 EXPECT_FALSE(event.data.gesture.data.scrollEnd.synthetic); \ | |
| 116 EXPECT_TRUE(event.data.gesture.data.scrollEnd.inertial); | |
| 117 | |
| 118 #define EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(event) \ | |
| 119 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | |
| 120 EXPECT_TRUE(event.data.gesture.data.scrollEnd.synthetic); \ | |
| 121 EXPECT_TRUE(event.data.gesture.data.scrollEnd.inertial); | |
| 122 | |
| 123 #define EXPECT_MOUSE_WHEEL(event) \ | |
| 124 EXPECT_EQ(WebInputEvent::MouseWheel, event.data.mouse_wheel.type); | |
| 125 | |
| 37 } // namespace | 126 } // namespace |
| 38 | 127 |
| 39 class MouseWheelEventQueueTest : public testing::Test, | 128 class MouseWheelEventQueueTest : public testing::Test, |
| 40 public MouseWheelEventQueueClient { | 129 public MouseWheelEventQueueClient { |
| 41 public: | 130 public: |
| 42 MouseWheelEventQueueTest() | 131 MouseWheelEventQueueTest() |
| 43 : acked_event_count_(0), | 132 : acked_event_count_(0), |
| 44 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { | 133 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { |
| 45 SetUpForGestureTesting(false); | 134 SetUpForGestureTesting(false); |
| 46 } | 135 } |
| 47 | 136 |
| 48 ~MouseWheelEventQueueTest() override {} | 137 ~MouseWheelEventQueueTest() override {} |
| 49 | 138 |
| 50 // MouseWheelEventQueueClient | 139 // MouseWheelEventQueueClient |
| 51 void SendMouseWheelEventImmediately( | 140 void SendMouseWheelEventImmediately( |
| 52 const MouseWheelEventWithLatencyInfo& event) override { | 141 const MouseWheelEventWithLatencyInfo& event) override { |
| 53 sent_events_.push_back(event.event); | 142 sent_events_.push_back(CombinedEvent(event.event)); |
| 54 } | 143 } |
| 55 | 144 |
| 56 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { | 145 void SendGestureEvent(const GestureEventWithLatencyInfo& event) override { |
| 57 sent_events_.push_back(event.event); | 146 sent_events_.push_back(CombinedEvent(event.event)); |
| 58 sent_gesture_events_.push_back(event.event); | |
| 59 } | 147 } |
| 60 | 148 |
| 61 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, | 149 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, |
| 62 InputEventAckState ack_result) override { | 150 InputEventAckState ack_result) override { |
| 63 ++acked_event_count_; | 151 ++acked_event_count_; |
| 64 last_acked_event_ = event.event; | 152 last_acked_event_ = event.event; |
| 65 last_acked_event_state_ = ack_result; | 153 last_acked_event_state_ = ack_result; |
| 66 } | 154 } |
| 67 | 155 |
| 68 protected: | 156 protected: |
| 69 void SetUpForGestureTesting(bool send_gestures) { | 157 void SetUpForGestureTesting(bool send_gestures) { |
| 70 queue_.reset( | 158 queue_.reset( |
| 71 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); | 159 new MouseWheelEventQueue(this, send_gestures, kScrollEndTimeoutMs)); |
| 72 } | 160 } |
| 73 | 161 |
| 74 size_t queued_event_count() const { return queue_->queued_size(); } | 162 size_t queued_event_count() const { return queue_->queued_size(); } |
| 75 | 163 |
| 76 bool event_in_flight() const { return queue_->event_in_flight(); } | 164 bool event_in_flight() const { return queue_->event_in_flight(); } |
| 77 | 165 |
| 78 std::vector<WebInputEvent>& all_sent_events() { return sent_events_; } | 166 std::vector<CombinedEvent>& all_sent_events() { return sent_events_; } |
| 79 | |
| 80 std::vector<WebGestureEvent>& sent_gesture_events() { | |
| 81 return sent_gesture_events_; | |
| 82 } | |
| 83 | 167 |
| 84 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } | 168 const WebMouseWheelEvent& acked_event() const { return last_acked_event_; } |
| 85 | 169 |
| 86 size_t GetAndResetSentEventCount() { | 170 size_t GetAndResetSentEventCount() { |
| 87 size_t count = sent_events_.size(); | 171 size_t count = sent_events_.size(); |
| 88 sent_events_.clear(); | 172 sent_events_.clear(); |
| 89 sent_gesture_events_.clear(); | |
| 90 return count; | 173 return count; |
| 91 } | 174 } |
| 92 | 175 |
| 93 size_t GetAndResetAckedEventCount() { | 176 size_t GetAndResetAckedEventCount() { |
| 94 size_t count = acked_event_count_; | 177 size_t count = acked_event_count_; |
| 95 acked_event_count_ = 0; | 178 acked_event_count_ = 0; |
| 96 return count; | 179 return count; |
| 97 } | 180 } |
| 98 | 181 |
| 99 void SendMouseWheelEventAck(InputEventAckState ack_result) { | 182 void SendMouseWheelEventAck(InputEventAckState ack_result) { |
| 100 queue_->ProcessMouseWheelAck(ack_result, ui::LatencyInfo()); | 183 queue_->ProcessMouseWheelAck(ack_result, ui::LatencyInfo()); |
| 101 } | 184 } |
| 102 | 185 |
| 103 void SendMouseWheel(float x, | 186 void SendMouseWheel(float x, |
| 104 float y, | 187 float y, |
| 105 float global_x, | 188 float global_x, |
| 106 float global_y, | 189 float global_y, |
| 107 float dX, | 190 float dX, |
| 108 float dY, | 191 float dY, |
| 109 int modifiers, | 192 int modifiers, |
| 110 bool high_precision) { | 193 bool high_precision) { |
| 111 queue_->QueueEvent(MouseWheelEventWithLatencyInfo( | 194 queue_->QueueEvent(MouseWheelEventWithLatencyInfo( |
| 112 SyntheticWebMouseWheelEventBuilder::Build( | 195 SyntheticWebMouseWheelEventBuilder::Build( |
| 113 x, y, global_x, global_y, dX, dY, modifiers, high_precision))); | 196 x, y, global_x, global_y, dX, dY, modifiers, high_precision))); |
| 114 } | 197 } |
| 115 | 198 |
| 199 void SendMouseWheelWithPhase( | |
| 200 float x, | |
| 201 float y, | |
| 202 float global_x, | |
| 203 float global_y, | |
| 204 float dX, | |
| 205 float dY, | |
| 206 int modifiers, | |
| 207 bool high_precision, | |
| 208 blink::WebMouseWheelEvent::Phase phase, | |
| 209 blink::WebMouseWheelEvent::Phase momentum_phase) { | |
| 210 WebMouseWheelEvent event = SyntheticWebMouseWheelEventBuilder::Build( | |
| 211 x, y, global_x, global_y, dX, dY, modifiers, high_precision); | |
| 212 event.phase = phase; | |
| 213 event.momentumPhase = momentum_phase; | |
| 214 queue_->QueueEvent(MouseWheelEventWithLatencyInfo(event)); | |
| 215 } | |
| 216 | |
| 116 void SendGestureEvent(WebInputEvent::Type type) { | 217 void SendGestureEvent(WebInputEvent::Type type) { |
| 117 WebGestureEvent event; | 218 WebGestureEvent event; |
| 118 event.type = type; | 219 event.type = type; |
| 119 event.sourceDevice = blink::WebGestureDeviceTouchscreen; | 220 event.sourceDevice = blink::WebGestureDeviceTouchscreen; |
| 120 queue_->OnGestureScrollEvent( | 221 queue_->OnGestureScrollEvent( |
| 121 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); | 222 GestureEventWithLatencyInfo(event, ui::LatencyInfo())); |
| 122 } | 223 } |
| 123 | 224 |
| 124 static void RunTasksAndWait(base::TimeDelta delay) { | 225 static void RunTasksAndWait(base::TimeDelta delay) { |
| 125 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 226 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 145 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 246 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
| 146 | 247 |
| 147 // Receive an ACK for the mouse wheel event and release the next | 248 // Receive an ACK for the mouse wheel event and release the next |
| 148 // mouse wheel event. | 249 // mouse wheel event. |
| 149 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 250 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 150 EXPECT_EQ(0U, queued_event_count()); | 251 EXPECT_EQ(0U, queued_event_count()); |
| 151 EXPECT_TRUE(event_in_flight()); | 252 EXPECT_TRUE(event_in_flight()); |
| 152 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 253 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
| 153 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 254 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 154 EXPECT_EQ(3U, all_sent_events().size()); | 255 EXPECT_EQ(3U, all_sent_events().size()); |
| 155 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 256 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
| 156 EXPECT_EQ(scroll_units, | 257 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
| 157 sent_gesture_events()[0].data.scrollBegin.deltaHintUnits); | 258 EXPECT_MOUSE_WHEEL(all_sent_events()[2]); |
| 158 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[0].x); | |
| 159 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[0].y); | |
| 160 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[0].globalX); | |
| 161 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[0].globalY); | |
| 162 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | |
| 163 EXPECT_EQ(scroll_units, | |
| 164 sent_gesture_events()[1].data.scrollUpdate.deltaUnits); | |
| 165 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[1].x); | |
| 166 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[1].y); | |
| 167 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[1].globalX); | |
| 168 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[1].globalY); | |
| 169 EXPECT_EQ(WebInputEvent::MouseWheel, all_sent_events()[2].type); | |
| 170 EXPECT_EQ(3U, GetAndResetSentEventCount()); | 259 EXPECT_EQ(3U, GetAndResetSentEventCount()); |
| 171 | 260 |
| 172 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); | 261 RunTasksAndWait(DefaultScrollEndTimeoutDelay() * 2); |
| 173 EXPECT_EQ(1U, all_sent_events().size()); | 262 EXPECT_EQ(1U, all_sent_events().size()); |
| 174 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); | 263 EXPECT_GESTURE_SCROLL_END(all_sent_events()[0]); |
| 175 EXPECT_EQ(scroll_units, sent_gesture_events()[0].data.scrollEnd.deltaUnits); | 264 } |
| 176 EXPECT_EQ(kWheelScrollX, sent_gesture_events()[0].x); | 265 |
| 177 EXPECT_EQ(kWheelScrollY, sent_gesture_events()[0].y); | 266 void PhaseGestureSendingTest(bool high_precision) { |
| 178 EXPECT_EQ(kWheelScrollGlobalX, sent_gesture_events()[0].globalX); | 267 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 179 EXPECT_EQ(kWheelScrollGlobalY, sent_gesture_events()[0].globalY); | 268 kWheelScrollGlobalY, 1, 1, 0, high_precision, |
| 269 WebMouseWheelEvent::PhaseBegan, | |
| 270 WebMouseWheelEvent::PhaseNone); | |
|
tdresser
2016/03/09 14:30:06
I still find this difficult to read, as the expect
dtapuska
2016/03/09 16:12:29
Done.
| |
| 271 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 272 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
| 273 WebMouseWheelEvent::PhaseChanged, | |
| 274 WebMouseWheelEvent::PhaseNone); | |
| 275 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 276 kWheelScrollGlobalY, 0, 0, 0, high_precision, | |
| 277 WebMouseWheelEvent::PhaseEnded, | |
| 278 WebMouseWheelEvent::PhaseNone); | |
| 279 // Send a double phase end; OSX does it consistently; note the modifiers | |
| 280 // are set differently as to avoid coalescing. | |
| 281 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 282 kWheelScrollGlobalY, 0, 0, 1, high_precision, | |
| 283 WebMouseWheelEvent::PhaseEnded, | |
| 284 WebMouseWheelEvent::PhaseNone); | |
| 285 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 286 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
| 287 WebMouseWheelEvent::PhaseNone, | |
| 288 WebMouseWheelEvent::PhaseBegan); | |
| 289 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 290 kWheelScrollGlobalY, 5, 5, 0, high_precision, | |
| 291 WebMouseWheelEvent::PhaseNone, | |
| 292 WebMouseWheelEvent::PhaseChanged); | |
| 293 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
| 294 kWheelScrollGlobalY, 0, 0, 0, high_precision, | |
| 295 WebMouseWheelEvent::PhaseNone, | |
| 296 WebMouseWheelEvent::PhaseEnded); | |
| 297 | |
| 298 EXPECT_EQ(6U, queued_event_count()); | |
| 299 EXPECT_TRUE(event_in_flight()); | |
| 300 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 301 | |
| 302 const WebGestureEvent::ScrollUnits scroll_units = | |
| 303 high_precision ? WebGestureEvent::PrecisePixels | |
| 304 : WebGestureEvent::Pixels; | |
| 305 | |
| 306 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 307 EXPECT_EQ(4U, all_sent_events().size()); | |
| 308 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 309 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
| 310 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(all_sent_events()[2]); | |
| 311 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
| 312 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
| 313 | |
| 314 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 315 EXPECT_EQ(4U, all_sent_events().size()); | |
| 316 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 317 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
| 318 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(all_sent_events()[2]); | |
| 319 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
| 320 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
| 321 | |
| 322 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 323 EXPECT_EQ(3U, all_sent_events().size()); | |
| 324 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 325 EXPECT_GESTURE_SCROLL_END(all_sent_events()[1]); | |
| 326 EXPECT_MOUSE_WHEEL(all_sent_events()[2]); | |
| 327 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
| 328 | |
| 329 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 330 EXPECT_EQ(1U, all_sent_events().size()); | |
| 331 EXPECT_MOUSE_WHEEL(all_sent_events()[0]); | |
| 332 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
| 333 | |
| 334 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 335 EXPECT_EQ(4U, all_sent_events().size()); | |
| 336 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 337 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
| 338 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[2]); | |
| 339 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
| 340 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
| 341 | |
| 342 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 343 EXPECT_EQ(4U, all_sent_events().size()); | |
| 344 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 345 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); | |
| 346 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[2]); | |
| 347 EXPECT_MOUSE_WHEEL(all_sent_events()[3]); | |
| 348 EXPECT_EQ(4U, GetAndResetSentEventCount()); | |
| 349 | |
| 350 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
| 351 EXPECT_EQ(2U, all_sent_events().size()); | |
| 352 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); | |
| 353 EXPECT_INERTIAL_GESTURE_SCROLL_END(all_sent_events()[1]); | |
| 354 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
| 180 } | 355 } |
| 181 | 356 |
| 182 scoped_ptr<MouseWheelEventQueue> queue_; | 357 scoped_ptr<MouseWheelEventQueue> queue_; |
| 183 std::vector<WebInputEvent> sent_events_; | 358 std::vector<CombinedEvent> sent_events_; |
| 184 std::vector<WebGestureEvent> sent_gesture_events_; | |
| 185 size_t acked_event_count_; | 359 size_t acked_event_count_; |
| 186 InputEventAckState last_acked_event_state_; | 360 InputEventAckState last_acked_event_state_; |
| 187 base::MessageLoopForUI message_loop_; | 361 base::MessageLoopForUI message_loop_; |
| 188 WebMouseWheelEvent last_acked_event_; | 362 WebMouseWheelEvent last_acked_event_; |
| 189 }; | 363 }; |
| 190 | 364 |
| 191 // Tests that mouse wheel events are queued properly. | 365 // Tests that mouse wheel events are queued properly. |
| 192 TEST_F(MouseWheelEventQueueTest, Basic) { | 366 TEST_F(MouseWheelEventQueueTest, Basic) { |
| 193 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 367 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 194 kWheelScrollGlobalY, 1, 1, 0, false); | 368 kWheelScrollGlobalY, 1, 1, 0, false); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 223 TEST_F(MouseWheelEventQueueTest, GestureSending) { | 397 TEST_F(MouseWheelEventQueueTest, GestureSending) { |
| 224 SetUpForGestureTesting(true); | 398 SetUpForGestureTesting(true); |
| 225 GestureSendingTest(false); | 399 GestureSendingTest(false); |
| 226 } | 400 } |
| 227 | 401 |
| 228 TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { | 402 TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { |
| 229 SetUpForGestureTesting(true); | 403 SetUpForGestureTesting(true); |
| 230 GestureSendingTest(false); | 404 GestureSendingTest(false); |
| 231 } | 405 } |
| 232 | 406 |
| 407 TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { | |
| 408 SetUpForGestureTesting(true); | |
| 409 PhaseGestureSendingTest(false); | |
| 410 } | |
| 411 | |
| 412 TEST_F(MouseWheelEventQueueTest, | |
| 413 GestureSendingWithPhaseInformationPrecisePixels) { | |
| 414 SetUpForGestureTesting(true); | |
| 415 PhaseGestureSendingTest(true); | |
| 416 } | |
| 417 | |
| 233 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { | 418 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { |
| 234 SetUpForGestureTesting(true); | 419 SetUpForGestureTesting(true); |
| 420 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | |
| 421 | |
| 235 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 422 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 236 kWheelScrollGlobalY, 1, 1, 0, false); | 423 kWheelScrollGlobalY, 1, 1, 0, false); |
| 237 EXPECT_EQ(0U, queued_event_count()); | 424 EXPECT_EQ(0U, queued_event_count()); |
| 238 EXPECT_TRUE(event_in_flight()); | 425 EXPECT_TRUE(event_in_flight()); |
| 239 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 426 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 240 | 427 |
| 241 // Receive an ACK for the mouse wheel event. | 428 // Receive an ACK for the mouse wheel event. |
| 242 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 429 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 243 EXPECT_EQ(0U, queued_event_count()); | 430 EXPECT_EQ(0U, queued_event_count()); |
| 244 EXPECT_FALSE(event_in_flight()); | 431 EXPECT_FALSE(event_in_flight()); |
| 245 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 432 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
| 246 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 433 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 247 EXPECT_EQ(2U, all_sent_events().size()); | 434 EXPECT_EQ(2U, all_sent_events().size()); |
| 248 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 435 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
| 249 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 436 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
| 250 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 437 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 251 | 438 |
| 252 // Ensure that a gesture scroll begin terminates the current scroll event. | 439 // Ensure that a gesture scroll begin terminates the current scroll event. |
| 253 SendGestureEvent(WebInputEvent::GestureScrollBegin); | 440 SendGestureEvent(WebInputEvent::GestureScrollBegin); |
| 254 EXPECT_EQ(1U, all_sent_events().size()); | 441 EXPECT_EQ(1U, all_sent_events().size()); |
| 255 EXPECT_EQ(WebInputEvent::GestureScrollEnd, all_sent_events()[0].type); | 442 EXPECT_GESTURE_SCROLL_END(all_sent_events()[0]); |
| 256 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 443 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 257 | 444 |
| 258 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 445 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
| 259 kWheelScrollGlobalY, 1, 1, 0, false); | 446 kWheelScrollGlobalY, 1, 1, 0, false); |
| 260 EXPECT_EQ(0U, queued_event_count()); | 447 EXPECT_EQ(0U, queued_event_count()); |
| 261 EXPECT_TRUE(event_in_flight()); | 448 EXPECT_TRUE(event_in_flight()); |
| 262 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 449 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 263 | 450 |
| 264 // New mouse wheel events won't cause gestures because a scroll | 451 // New mouse wheel events won't cause gestures because a scroll |
| 265 // is already in progress by another device. | 452 // is already in progress by another device. |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 279 EXPECT_TRUE(event_in_flight()); | 466 EXPECT_TRUE(event_in_flight()); |
| 280 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 467 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
| 281 | 468 |
| 282 // Receive an ACK for the mouse wheel event. | 469 // Receive an ACK for the mouse wheel event. |
| 283 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 470 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 284 EXPECT_EQ(0U, queued_event_count()); | 471 EXPECT_EQ(0U, queued_event_count()); |
| 285 EXPECT_FALSE(event_in_flight()); | 472 EXPECT_FALSE(event_in_flight()); |
| 286 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 473 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
| 287 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 474 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
| 288 EXPECT_EQ(2U, all_sent_events().size()); | 475 EXPECT_EQ(2U, all_sent_events().size()); |
| 289 EXPECT_EQ(WebInputEvent::GestureScrollBegin, all_sent_events()[0].type); | 476 EXPECT_GESTURE_SCROLL_BEGIN(all_sent_events()[0]); |
| 290 EXPECT_EQ(WebInputEvent::GestureScrollUpdate, all_sent_events()[1].type); | 477 EXPECT_GESTURE_SCROLL_UPDATE(all_sent_events()[1]); |
| 291 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 478 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
| 292 } | 479 } |
| 293 | 480 |
| 294 } // namespace content | 481 } // namespace content |
| OLD | NEW |