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 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 12 matching lines...) Expand all Loading... | |
23 using blink::WebInputEvent; | 23 using blink::WebInputEvent; |
24 using blink::WebMouseWheelEvent; | 24 using blink::WebMouseWheelEvent; |
25 | 25 |
26 namespace content { | 26 namespace content { |
27 namespace { | 27 namespace { |
28 | 28 |
29 const float kWheelScrollX = 10; | 29 const float kWheelScrollX = 10; |
30 const float kWheelScrollY = 12; | 30 const float kWheelScrollY = 12; |
31 const float kWheelScrollGlobalX = 50; | 31 const float kWheelScrollGlobalX = 50; |
32 const float kWheelScrollGlobalY = 72; | 32 const float kWheelScrollGlobalY = 72; |
33 const int64_t kScrollEndTimeoutMs = 100; | |
34 | |
35 base::TimeDelta DefaultScrollEndTimeoutDelay() { | |
36 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); | |
37 } | |
38 | 33 |
39 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ | 34 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ |
40 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \ | 35 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \ |
41 EXPECT_EQ(kWheelScrollX, event->x); \ | 36 EXPECT_EQ(kWheelScrollX, event->x); \ |
42 EXPECT_EQ(kWheelScrollY, event->y); \ | 37 EXPECT_EQ(kWheelScrollY, event->y); \ |
43 EXPECT_EQ(kWheelScrollGlobalX, event->globalX); \ | 38 EXPECT_EQ(kWheelScrollGlobalX, event->globalX); \ |
44 EXPECT_EQ(kWheelScrollGlobalY, event->globalY); \ | 39 EXPECT_EQ(kWheelScrollGlobalY, event->globalY); \ |
45 EXPECT_EQ(scroll_units, event->data.scrollBegin.deltaHintUnits); | 40 EXPECT_EQ(scroll_units, event->data.scrollBegin.deltaHintUnits); |
46 | 41 |
47 #define EXPECT_GESTURE_SCROLL_BEGIN(event) \ | 42 #define EXPECT_GESTURE_SCROLL_BEGIN(event) \ |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ | 128 EXPECT_GESTURE_SCROLL_END_IMPL(event); \ |
134 EXPECT_TRUE(event->data.scrollEnd.synthetic); \ | 129 EXPECT_TRUE(event->data.scrollEnd.synthetic); \ |
135 EXPECT_EQ(WebGestureEvent::MomentumPhase, \ | 130 EXPECT_EQ(WebGestureEvent::MomentumPhase, \ |
136 event->data.scrollEnd.inertialPhase); | 131 event->data.scrollEnd.inertialPhase); |
137 | 132 |
138 #define EXPECT_MOUSE_WHEEL(event) \ | 133 #define EXPECT_MOUSE_WHEEL(event) \ |
139 EXPECT_EQ(WebInputEvent::MouseWheel, event->type); | 134 EXPECT_EQ(WebInputEvent::MouseWheel, event->type); |
140 | 135 |
141 } // namespace | 136 } // namespace |
142 | 137 |
143 class MouseWheelEventQueueTest : public testing::Test, | 138 class MouseWheelEventQueueTest : public testing::TestWithParam<bool>, |
144 public MouseWheelEventQueueClient { | 139 public MouseWheelEventQueueClient { |
145 public: | 140 public: |
146 MouseWheelEventQueueTest() | 141 MouseWheelEventQueueTest() |
147 : acked_event_count_(0), | 142 : acked_event_count_(0), |
148 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { | 143 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { |
149 queue_.reset(new MouseWheelEventQueue(this, kScrollEndTimeoutMs)); | 144 ScrollLatchingEnabled_ = GetParam(); |
145 queue_.reset(new MouseWheelEventQueue(this, ScrollLatchingEnabled_)); | |
146 ScrollEndTimeoutMs_ = ScrollLatchingEnabled_ ? 100 : 0; | |
150 } | 147 } |
151 | 148 |
152 ~MouseWheelEventQueueTest() override {} | 149 ~MouseWheelEventQueueTest() override {} |
153 | 150 |
154 // MouseWheelEventQueueClient | 151 // MouseWheelEventQueueClient |
155 void SendMouseWheelEventImmediately( | 152 void SendMouseWheelEventImmediately( |
156 const MouseWheelEventWithLatencyInfo& event) override { | 153 const MouseWheelEventWithLatencyInfo& event) override { |
157 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); | 154 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); |
158 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); | 155 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); |
159 *cloned_event = event.event; | 156 *cloned_event = event.event; |
160 sent_events_.push_back(std::move(cloned_event_holder)); | 157 sent_events_.push_back(std::move(cloned_event_holder)); |
161 } | 158 } |
162 | 159 |
163 void ForwardGestureEventWithLatencyInfo( | 160 void ForwardGestureEventWithLatencyInfo( |
164 const blink::WebGestureEvent& event, | 161 const blink::WebGestureEvent& event, |
165 const ui::LatencyInfo& latency_info) override { | 162 const ui::LatencyInfo& latency_info) override { |
166 WebGestureEvent* cloned_event = new WebGestureEvent(); | 163 WebGestureEvent* cloned_event = new WebGestureEvent(); |
167 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); | 164 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); |
168 *cloned_event = event; | 165 *cloned_event = event; |
169 sent_events_.push_back(std::move(cloned_event_holder)); | 166 sent_events_.push_back(std::move(cloned_event_holder)); |
170 } | 167 } |
171 | 168 |
172 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, | 169 void OnMouseWheelEventAck(const MouseWheelEventWithLatencyInfo& event, |
173 InputEventAckState ack_result) override { | 170 InputEventAckState ack_result) override { |
174 ++acked_event_count_; | 171 ++acked_event_count_; |
175 last_acked_event_ = event.event; | 172 last_acked_event_ = event.event; |
176 last_acked_event_state_ = ack_result; | 173 last_acked_event_state_ = ack_result; |
177 } | 174 } |
178 | 175 |
176 base::TimeDelta DefaultScrollEndTimeoutDelay() { | |
177 return base::TimeDelta::FromMilliseconds(ScrollEndTimeoutMs_); | |
178 } | |
179 | |
180 bool ScrollLatchingEnabled() { return ScrollLatchingEnabled_; } | |
tdresser
2016/08/12 13:28:32
scroll_latching_enabled()
Thin getters should be
sahel
2016/08/12 15:45:28
Done.
| |
181 | |
179 protected: | 182 protected: |
180 size_t queued_event_count() const { return queue_->queued_size(); } | 183 size_t queued_event_count() const { return queue_->queued_size(); } |
181 | 184 |
182 bool event_in_flight() const { return queue_->event_in_flight(); } | 185 bool event_in_flight() const { return queue_->event_in_flight(); } |
183 | 186 |
184 std::vector<std::unique_ptr<WebInputEvent>>& all_sent_events() { | 187 std::vector<std::unique_ptr<WebInputEvent>>& all_sent_events() { |
185 return sent_events_; | 188 return sent_events_; |
186 } | 189 } |
187 | 190 |
188 const std::unique_ptr<WebInputEvent>& sent_input_event(size_t index) { | 191 const std::unique_ptr<WebInputEvent>& sent_input_event(size_t index) { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
389 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); | 392 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); |
390 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 393 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
391 } | 394 } |
392 | 395 |
393 std::unique_ptr<MouseWheelEventQueue> queue_; | 396 std::unique_ptr<MouseWheelEventQueue> queue_; |
394 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; | 397 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; |
395 size_t acked_event_count_; | 398 size_t acked_event_count_; |
396 InputEventAckState last_acked_event_state_; | 399 InputEventAckState last_acked_event_state_; |
397 base::MessageLoopForUI message_loop_; | 400 base::MessageLoopForUI message_loop_; |
398 WebMouseWheelEvent last_acked_event_; | 401 WebMouseWheelEvent last_acked_event_; |
402 int64_t ScrollEndTimeoutMs_; | |
tdresser
2016/08/12 13:28:32
scroll_end_timeout_ms_
sahel
2016/08/12 15:45:29
Done.
| |
403 bool ScrollLatchingEnabled_; | |
tdresser
2016/08/12 13:28:32
scroll_latching_enabled_
sahel
2016/08/12 15:45:29
Done.
| |
399 }; | 404 }; |
400 | 405 |
401 // Tests that mouse wheel events are queued properly. | 406 // Tests that mouse wheel events are queued properly. |
402 TEST_F(MouseWheelEventQueueTest, Basic) { | 407 TEST_P(MouseWheelEventQueueTest, Basic) { |
403 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 408 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
404 kWheelScrollGlobalY, 1, 1, 0, false); | 409 kWheelScrollGlobalY, 1, 1, 0, false); |
405 EXPECT_EQ(0U, queued_event_count()); | 410 EXPECT_EQ(0U, queued_event_count()); |
406 EXPECT_TRUE(event_in_flight()); | 411 EXPECT_TRUE(event_in_flight()); |
407 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 412 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
408 | 413 |
409 // The second mouse wheel should not be sent since one is already in queue. | 414 // The second mouse wheel should not be sent since one is already in queue. |
410 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 415 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
411 kWheelScrollGlobalY, 5, 5, 0, false); | 416 kWheelScrollGlobalY, 5, 5, 0, false); |
412 EXPECT_EQ(1U, queued_event_count()); | 417 EXPECT_EQ(1U, queued_event_count()); |
(...skipping 10 matching lines...) Expand all Loading... | |
423 | 428 |
424 // Receive an ACK for the second mouse wheel event. | 429 // Receive an ACK for the second mouse wheel event. |
425 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); | 430 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); |
426 EXPECT_EQ(0U, queued_event_count()); | 431 EXPECT_EQ(0U, queued_event_count()); |
427 EXPECT_FALSE(event_in_flight()); | 432 EXPECT_FALSE(event_in_flight()); |
428 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 433 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
429 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 434 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
430 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 435 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
431 } | 436 } |
432 | 437 |
433 TEST_F(MouseWheelEventQueueTest, GestureSending) { | 438 TEST_P(MouseWheelEventQueueTest, GestureSending) { |
434 GestureSendingTest(false); | 439 GestureSendingTest(false); |
435 } | 440 } |
436 | 441 |
437 TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { | 442 TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { |
438 GestureSendingTest(false); | 443 GestureSendingTest(false); |
439 } | 444 } |
440 | 445 |
441 TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { | 446 TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) { |
442 PhaseGestureSendingTest(false); | 447 PhaseGestureSendingTest(false); |
443 } | 448 } |
444 | 449 |
445 TEST_F(MouseWheelEventQueueTest, | 450 TEST_P(MouseWheelEventQueueTest, |
446 GestureSendingWithPhaseInformationPrecisePixels) { | 451 GestureSendingWithPhaseInformationPrecisePixels) { |
447 PhaseGestureSendingTest(true); | 452 PhaseGestureSendingTest(true); |
448 } | 453 } |
449 | 454 |
450 TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) { | 455 TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) { |
451 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | 456 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; |
452 | 457 |
453 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 458 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
454 kWheelScrollGlobalY, 1, 1, 0, false); | 459 kWheelScrollGlobalY, 1, 1, 0, false); |
455 EXPECT_EQ(0U, queued_event_count()); | 460 EXPECT_EQ(0U, queued_event_count()); |
456 EXPECT_TRUE(event_in_flight()); | 461 EXPECT_TRUE(event_in_flight()); |
457 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 462 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
458 | 463 |
459 // Receive an ACK for the mouse wheel event. | 464 // Receive an ACK for the mouse wheel event. |
460 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 465 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
502 EXPECT_EQ(0U, queued_event_count()); | 507 EXPECT_EQ(0U, queued_event_count()); |
503 EXPECT_FALSE(event_in_flight()); | 508 EXPECT_FALSE(event_in_flight()); |
504 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 509 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
505 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 510 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
506 EXPECT_EQ(2U, all_sent_events().size()); | 511 EXPECT_EQ(2U, all_sent_events().size()); |
507 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 512 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
508 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 513 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
509 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 514 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
510 } | 515 } |
511 | 516 |
512 TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) { | 517 TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) { |
513 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | 518 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; |
514 | 519 |
515 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 520 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
516 kWheelScrollGlobalY, 1, 1, 0, false, | 521 kWheelScrollGlobalY, 1, 1, 0, false, |
517 WebInputEvent::RailsModeHorizontal); | 522 WebInputEvent::RailsModeHorizontal); |
518 EXPECT_EQ(0U, queued_event_count()); | 523 EXPECT_EQ(0U, queued_event_count()); |
519 EXPECT_TRUE(event_in_flight()); | 524 EXPECT_TRUE(event_in_flight()); |
520 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 525 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
521 | 526 |
522 // Receive an ACK for the mouse wheel event. | 527 // Receive an ACK for the mouse wheel event. |
(...skipping 28 matching lines...) Expand all Loading... | |
551 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | 556 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); |
552 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 557 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
553 EXPECT_EQ(2U, all_sent_events().size()); | 558 EXPECT_EQ(2U, all_sent_events().size()); |
554 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 559 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
555 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 560 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
556 EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | 561 EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); |
557 EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | 562 EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); |
558 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 563 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
559 } | 564 } |
560 | 565 |
566 TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) { | |
567 const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels; | |
568 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
569 kWheelScrollGlobalY, 1, 1, 0, false, | |
570 WebInputEvent::RailsModeVertical); | |
571 EXPECT_EQ(0U, queued_event_count()); | |
572 EXPECT_TRUE(event_in_flight()); | |
573 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
574 | |
575 // Receive an ACK for the mouse wheel event. | |
576 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
577 EXPECT_EQ(0U, queued_event_count()); | |
578 EXPECT_FALSE(event_in_flight()); | |
579 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | |
580 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
581 EXPECT_EQ(2U, all_sent_events().size()); | |
582 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | |
583 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | |
584 EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | |
585 EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | |
586 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
587 | |
588 RunTasksAndWait(base::TimeDelta::FromMilliseconds(1)); | |
589 if (!ScrollLatchingEnabled_) { | |
590 // Scroll end time out happens. | |
tdresser
2016/08/12 13:28:32
If scroll latching isn't enabled, there's no timeo
sahel
2016/08/12 15:45:28
Yes, the timeout is zero. I think the comment is m
| |
591 EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0)); | |
592 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
593 } else { | |
594 EXPECT_EQ(0U, GetAndResetSentEventCount()); | |
595 } | |
596 SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | |
597 kWheelScrollGlobalY, 1, 1, 0, false, | |
598 WebInputEvent::RailsModeVertical); | |
599 EXPECT_EQ(0U, queued_event_count()); | |
600 EXPECT_TRUE(event_in_flight()); | |
601 EXPECT_EQ(1U, GetAndResetSentEventCount()); | |
602 | |
603 // Receive an ACK for the mouse wheel event. | |
604 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
605 EXPECT_EQ(0U, queued_event_count()); | |
606 EXPECT_FALSE(event_in_flight()); | |
607 EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type); | |
608 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | |
609 | |
610 int updateEventIndex = -1; | |
611 if (!ScrollLatchingEnabled_) { | |
612 EXPECT_EQ(2U, all_sent_events().size()); | |
613 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | |
614 updateEventIndex = 1; | |
615 } else { | |
616 // Scroll latching: no new scroll begin expected. | |
617 EXPECT_EQ(1U, all_sent_events().size()); | |
618 updateEventIndex = 0; | |
619 } | |
620 EXPECT_GE(updateEventIndex, 0); | |
621 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex)); | |
622 EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX); | |
623 EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY); | |
624 EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1), | |
625 GetAndResetSentEventCount()); | |
626 } | |
627 | |
628 INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests, | |
629 MouseWheelEventQueueTest, | |
630 testing::Bool()); | |
631 | |
561 } // namespace content | 632 } // namespace content |
OLD | NEW |