Index: content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc |
diff --git a/content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc b/content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc |
index 10fc3ff2f54f6d34fa3c34808a5718a662032846..178797d1fb4de088870ec84ec9c5d3aa0ef64c02 100644 |
--- a/content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc |
+++ b/content/browser/renderer_host/input/legacy_input_router_impl_unittest.cc |
@@ -149,31 +149,55 @@ bool EventListIsSubset( |
} |
#endif // defined(USE_AURA) |
+enum WheelScrollingMode { |
+ kWheelScrollingModeNone, |
+ kWheelScrollLatching, |
+ kAsyncWheelEvents, |
+}; |
+ |
} // namespace |
class LegacyInputRouterImplTest : public testing::Test { |
public: |
- LegacyInputRouterImplTest(bool raf_aligned_touch = true, |
- bool wheel_scroll_latching = true) |
- : scoped_task_environment_( |
+ LegacyInputRouterImplTest( |
+ bool raf_aligned_touch = true, |
+ WheelScrollingMode wheel_scrolling_mode = kWheelScrollLatching) |
+ : wheel_scroll_latching_enabled_(wheel_scrolling_mode != |
+ kWheelScrollingModeNone), |
+ scoped_task_environment_( |
base::test::ScopedTaskEnvironment::MainThreadType::UI) { |
- if (raf_aligned_touch && wheel_scroll_latching) { |
+ if (raf_aligned_touch && wheel_scrolling_mode == kAsyncWheelEvents) { |
+ feature_list_.InitWithFeatures({features::kRafAlignedTouchInputEvents, |
+ features::kTouchpadAndWheelScrollLatching, |
+ features::kAsyncWheelEvents}, |
+ {}); |
+ } else if (raf_aligned_touch && |
+ wheel_scrolling_mode == kWheelScrollLatching) { |
feature_list_.InitWithFeatures( |
{features::kRafAlignedTouchInputEvents, |
features::kTouchpadAndWheelScrollLatching}, |
- {}); |
- } else if (raf_aligned_touch && !wheel_scroll_latching) { |
- feature_list_.InitWithFeatures( |
- {features::kRafAlignedTouchInputEvents}, |
- {features::kTouchpadAndWheelScrollLatching}); |
- } else if (!raf_aligned_touch && wheel_scroll_latching) { |
+ {features::kAsyncWheelEvents}); |
+ } else if (raf_aligned_touch && |
+ wheel_scrolling_mode == kWheelScrollingModeNone) { |
+ feature_list_.InitWithFeatures({features::kRafAlignedTouchInputEvents}, |
+ {features::kTouchpadAndWheelScrollLatching, |
+ features::kAsyncWheelEvents}); |
+ } else if (!raf_aligned_touch && |
+ wheel_scrolling_mode == kAsyncWheelEvents) { |
+ feature_list_.InitWithFeatures({features::kTouchpadAndWheelScrollLatching, |
+ features::kAsyncWheelEvents}, |
+ {features::kRafAlignedTouchInputEvents}); |
+ } else if (!raf_aligned_touch && |
+ wheel_scrolling_mode == kWheelScrollLatching) { |
feature_list_.InitWithFeatures( |
{features::kTouchpadAndWheelScrollLatching}, |
- {features::kRafAlignedTouchInputEvents}); |
- } else { // !raf_aligned_touch && !wheel_scroll_latching |
- feature_list_.InitWithFeatures( |
- {}, {features::kRafAlignedTouchInputEvents, |
- features::kTouchpadAndWheelScrollLatching}); |
+ {features::kRafAlignedTouchInputEvents, features::kAsyncWheelEvents}); |
+ } else { // !raf_aligned_touch && wheel_scroll_latching == |
+ // kWheelScrollingModeNone. |
+ feature_list_.InitWithFeatures({}, |
+ {features::kRafAlignedTouchInputEvents, |
+ features::kTouchpadAndWheelScrollLatching, |
+ features::kAsyncWheelEvents}); |
} |
} |
@@ -248,6 +272,21 @@ class LegacyInputRouterImplTest : public testing::Test { |
input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo(wheel_event)); |
} |
+ void SimulateWheelEventPossiblyIncludingPhase( |
+ bool ignore_phase, |
+ float x, |
+ float y, |
+ float dX, |
+ float dY, |
+ int modifiers, |
+ bool precise, |
+ WebMouseWheelEvent::Phase phase) { |
+ if (ignore_phase) |
+ SimulateWheelEvent(x, y, dX, dY, modifiers, precise); |
+ else |
+ SimulateWheelEventWithPhase(x, y, dX, dY, modifiers, precise, phase); |
+ } |
+ |
void SimulateMouseEvent(WebInputEvent::Type type, int x, int y) { |
input_router_->SendMouseEvent(MouseEventWithLatencyInfo( |
SyntheticWebMouseEventBuilder::Build(type, x, y, 0))); |
@@ -379,91 +418,16 @@ class LegacyInputRouterImplTest : public testing::Test { |
base::RunLoop().Run(); |
} |
- void UnhandledWheelEvent(bool wheel_scroll_latching_enabled) { |
- // Simulate wheel events. |
- if (wheel_scroll_latching_enabled) { |
- SimulateWheelEventWithPhase( |
- 0, 0, 0, -5, 0, false, |
- WebMouseWheelEvent::kPhaseBegan); // sent directly |
- SimulateWheelEventWithPhase( |
- 0, 0, 0, -10, 0, false, |
- WebMouseWheelEvent::kPhaseChanged); // enqueued |
- } else { |
- SimulateWheelEvent(0, 0, 0, -5, 0, false); // sent directly |
- SimulateWheelEvent(0, 0, 0, -10, 0, false); // enqueued |
- } |
- |
- // Check that only the first event was sent. |
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
- InputMsg_HandleInputEvent::ID)); |
- EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
- |
- // Indicate that the wheel event was unhandled. |
- SendInputEventACK(WebInputEvent::kMouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- // Check that the ack for the MouseWheel and ScrollBegin |
- // were processed. |
- EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
- |
- // There should be a ScrollBegin and ScrollUpdate, MouseWheel sent. |
- EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
+ void UnhandledWheelEvent(); |
- EXPECT_EQ(ack_handler_->acked_wheel_event().delta_y, -5); |
- SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- |
- if (wheel_scroll_latching_enabled) { |
- // Check that the ack for ScrollUpdate were processed. |
- EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
- } else { |
- // The GestureScrollUpdate ACK releases the GestureScrollEnd. |
- EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
- |
- // Check that the ack for the ScrollUpdate and ScrollEnd |
- // were processed. |
- EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
- } |
- |
- SendInputEventACK(WebInputEvent::kMouseWheel, |
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
- |
- if (wheel_scroll_latching_enabled) { |
- // There should be a ScrollUpdate sent. |
- EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
- EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
- } else { |
- // There should be a ScrollBegin and ScrollUpdate sent. |
- EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
- EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
- } |
- |
- // Check that the correct unhandled wheel event was received. |
- EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, |
- ack_handler_->acked_wheel_event_state()); |
- EXPECT_EQ(ack_handler_->acked_wheel_event().delta_y, -10); |
- |
- SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
- INPUT_EVENT_ACK_STATE_CONSUMED); |
- |
- if (wheel_scroll_latching_enabled) { |
- // Check that the ack for ScrollUpdate were processed. |
- EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
- } else { |
- // The GestureScrollUpdate ACK releases the GestureScrollEnd. |
- EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
- |
- // Check that the ack for the ScrollUpdate and ScrollEnd |
- // were processed. |
- EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
- } |
- } |
+ void OverscrollDispatch(); |
InputRouter::Config config_; |
std::unique_ptr<MockRenderProcessHost> process_; |
std::unique_ptr<MockInputRouterClient> client_; |
std::unique_ptr<MockInputAckHandler> ack_handler_; |
std::unique_ptr<LegacyInputRouterImpl> input_router_; |
+ bool wheel_scroll_latching_enabled_; |
private: |
base::test::ScopedTaskEnvironment scoped_task_environment_; |
@@ -477,14 +441,21 @@ class LegacyInputRouterImplRafAlignedTouchDisabledTest |
: public LegacyInputRouterImplTest { |
public: |
LegacyInputRouterImplRafAlignedTouchDisabledTest() |
- : LegacyInputRouterImplTest(false, false) {} |
+ : LegacyInputRouterImplTest(false, kWheelScrollingModeNone) {} |
}; |
class LegacyInputRouterImplWheelScrollLatchingDisabledTest |
: public LegacyInputRouterImplTest { |
public: |
LegacyInputRouterImplWheelScrollLatchingDisabledTest() |
- : LegacyInputRouterImplTest(true, false) {} |
+ : LegacyInputRouterImplTest(true, kWheelScrollingModeNone) {} |
+}; |
+ |
+class LegacyInputRouterImplAsyncWheelEventEnabledTest |
+ : public LegacyInputRouterImplTest { |
+ public: |
+ LegacyInputRouterImplAsyncWheelEventEnabledTest() |
+ : LegacyInputRouterImplTest(true, kAsyncWheelEvents) {} |
}; |
TEST_F(LegacyInputRouterImplTest, CoalescesRangeSelection) { |
@@ -578,8 +549,8 @@ TEST_F(LegacyInputRouterImplTest, |
new InputMsg_SelectRange(0, gfx::Point(7, 8), gfx::Point(9, 10)))); |
EXPECT_EQ(0u, GetSentMessageCountAndResetSink()); |
- // Ack the messages and verify that they're not coalesced and that they're in |
- // correct order. |
+ // Ack the messages and verify that they're not coalesced and that they're |
+ // in correct order. |
// Ack the first message. |
{ |
@@ -658,8 +629,8 @@ TEST_F(LegacyInputRouterImplTest, |
input_router_->OnMessageReceived(*response); |
} |
- // Verify that the three MoveRangeSelectionExtent messages are coalesced into |
- // one message. |
+ // Verify that the three MoveRangeSelectionExtent messages are coalesced |
+ // into one message. |
ExpectIPCMessageWithArg1<InputMsg_MoveRangeSelectionExtent>( |
process_->sink().GetMessageAt(0), gfx::Point(9, 10)); |
EXPECT_EQ(1u, GetSentMessageCountAndResetSink()); |
@@ -774,7 +745,7 @@ TEST_F(LegacyInputRouterImplTest, NoncorrespondingKeyEvents) { |
EXPECT_TRUE(ack_handler_->unexpected_event_ack_called()); |
} |
-// Tests ported from RenderWidgetHostTest -------------------------------------- |
+// Tests ported from RenderWidgetHostTest ------------------------------------- |
TEST_F(LegacyInputRouterImplTest, HandleKeyEventsWeSent) { |
// Simulate a keyboard event. |
@@ -806,11 +777,21 @@ TEST_F(LegacyInputRouterImplTest, IgnoreKeyEventsWeDidntSend) { |
TEST_F(LegacyInputRouterImplTest, CoalescesWheelEvents) { |
// Simulate wheel events. |
- SimulateWheelEvent(0, 0, 0, -5, 0, false); // sent directly |
- SimulateWheelEvent(0, 0, 0, -10, 0, false); // enqueued |
- SimulateWheelEvent(0, 0, 8, -6, 0, false); // coalesced into previous event |
- SimulateWheelEvent(0, 0, 9, -7, 1, false); // enqueued, different modifiers |
- SimulateWheelEvent(0, 0, 0, -10, 0, false); // enqueued, different modifiers |
+ SimulateWheelEventPossiblyIncludingPhase( |
+ !wheel_scroll_latching_enabled_, 0, 0, 0, -5, 0, false, |
+ WebMouseWheelEvent::kPhaseBegan); // sent directly |
+ SimulateWheelEventPossiblyIncludingPhase( |
+ !wheel_scroll_latching_enabled_, 0, 0, 0, -10, 0, false, |
+ WebMouseWheelEvent::kPhaseChanged); // enqueued |
+ SimulateWheelEventPossiblyIncludingPhase( |
+ !wheel_scroll_latching_enabled_, 0, 0, 8, -6, 0, false, |
+ WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event |
+ SimulateWheelEventPossiblyIncludingPhase( |
+ !wheel_scroll_latching_enabled_, 0, 0, 9, -7, 1, false, |
+ WebMouseWheelEvent::kPhaseChanged); // enqueued, different modifiers |
+ SimulateWheelEventPossiblyIncludingPhase( |
+ !wheel_scroll_latching_enabled_, 0, 0, 0, -10, 0, false, |
+ WebMouseWheelEvent::kPhaseChanged); // enqueued, different modifiers |
// Explicitly verify that PhaseEnd isn't coalesced to avoid bugs like |
// https://crbug.com/154740. |
SimulateWheelEventWithPhase(WebMouseWheelEvent::kPhaseEnded); // enqueued |
@@ -960,8 +941,8 @@ TEST_F(LegacyInputRouterImplTest, TouchEventQueue) { |
EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
} |
-// Tests that the touch-queue is emptied after a page stops listening for touch |
-// events and the outstanding ack is received. |
+// Tests that the touch-queue is emptied after a page stops listening for |
+// touch events and the outstanding ack is received. |
TEST_F(LegacyInputRouterImplTest, TouchEventQueueFlush) { |
OnHasTouchEventHandlers(true); |
EXPECT_TRUE(client_->has_touch_handler()); |
@@ -1089,12 +1070,131 @@ TEST_F(LegacyInputRouterImplTest, MAYBE_AckedTouchEventState) { |
} |
#endif // defined(USE_AURA) |
+void LegacyInputRouterImplTest::UnhandledWheelEvent() { |
+ // Simulate wheel events. |
+ SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 0, |
+ 0, 0, -5, 0, false, |
+ WebMouseWheelEvent::kPhaseBegan); |
+ SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 0, |
+ 0, 0, -10, 0, false, |
+ WebMouseWheelEvent::kPhaseChanged); |
+ |
+ // Check that only the first event was sent. |
+ EXPECT_TRUE( |
+ process_->sink().GetUniqueMessageMatching(InputMsg_HandleInputEvent::ID)); |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ |
+ // Indicate that the wheel event was unhandled. |
+ SendInputEventACK(WebInputEvent::kMouseWheel, |
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ |
+ // Check that the ack for the MouseWheel and ScrollBegin |
+ // were processed. |
+ EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
+ |
+ // There should be a ScrollBegin and ScrollUpdate, MouseWheel sent. |
+ EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
+ |
+ EXPECT_EQ(ack_handler_->acked_wheel_event().delta_y, -5); |
+ SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ if (wheel_scroll_latching_enabled_) { |
+ // Check that the ack for ScrollUpdate were processed. |
+ EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
+ } else { |
+ // The GestureScrollUpdate ACK releases the GestureScrollEnd. |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ |
+ // Check that the ack for the ScrollUpdate and ScrollEnd |
+ // were processed. |
+ EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
+ } |
+ |
+ SendInputEventACK(WebInputEvent::kMouseWheel, |
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ |
+ if (wheel_scroll_latching_enabled_) { |
+ // There should be a ScrollUpdate sent. |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
+ } else { |
+ // There should be a ScrollBegin and ScrollUpdate sent. |
+ EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); |
+ EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
+ } |
+ |
+ // Check that the correct unhandled wheel event was received. |
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, |
+ ack_handler_->acked_wheel_event_state()); |
+ EXPECT_EQ(ack_handler_->acked_wheel_event().delta_y, -10); |
+ |
+ SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ if (wheel_scroll_latching_enabled_) { |
+ // Check that the ack for ScrollUpdate were processed. |
+ EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
+ } else { |
+ // The GestureScrollUpdate ACK releases the GestureScrollEnd. |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ |
+ // Check that the ack for the ScrollUpdate and ScrollEnd |
+ // were processed. |
+ EXPECT_EQ(2U, ack_handler_->GetAndResetAckCount()); |
+ } |
+} |
+ |
TEST_F(LegacyInputRouterImplTest, UnhandledWheelEvent) { |
- UnhandledWheelEvent(true); |
+ UnhandledWheelEvent(); |
} |
TEST_F(LegacyInputRouterImplWheelScrollLatchingDisabledTest, |
UnhandledWheelEvent) { |
- UnhandledWheelEvent(false); |
+ UnhandledWheelEvent(); |
+} |
+TEST_F(LegacyInputRouterImplAsyncWheelEventEnabledTest, UnhandledWheelEvent) { |
+ // Simulate wheel events. |
+ SimulateWheelEventWithPhase(0, 0, 0, -5, 0, false, |
+ WebMouseWheelEvent::kPhaseBegan); |
+ SimulateWheelEventWithPhase(0, 0, 0, -10, 0, false, |
+ WebMouseWheelEvent::kPhaseChanged); |
+ |
+ // Check that only the first event was sent. |
+ EXPECT_TRUE( |
+ process_->sink().GetUniqueMessageMatching(InputMsg_HandleInputEvent::ID)); |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ |
+ // Indicate that the wheel event was unhandled. |
+ SendInputEventACK(WebInputEvent::kMouseWheel, |
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ |
+ // Check that the ack for the first MouseWheel, ScrollBegin, and the second |
+ // MouseWheel were processed. |
+ EXPECT_EQ(3U, ack_handler_->GetAndResetAckCount()); |
+ |
+ // There should be a ScrollBegin and ScrollUpdate, MouseWheel sent. |
+ EXPECT_EQ(3U, GetSentMessageCountAndResetSink()); |
+ |
+ // The last acked wheel event should be the second one since the input router |
+ // has alread sent the immediate ack for the second wheel event. |
+ EXPECT_EQ(ack_handler_->acked_wheel_event().delta_y, -10); |
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_IGNORED, |
+ ack_handler_->acked_wheel_event_state()); |
+ |
+ SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ // Check that the ack for the first ScrollUpdate were processed. |
+ EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
+ |
+ // There should be a second ScrollUpdate sent. |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ |
+ SendInputEventACK(WebInputEvent::kGestureScrollUpdate, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ // Check that the ack for ScrollUpdate were processed. |
+ EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
} |
TEST_F(LegacyInputRouterImplTest, TouchTypesIgnoringAck) { |
@@ -1892,7 +1992,7 @@ TEST_F(LegacyInputRouterImplTest, TouchpadPinchAndScrollUpdate) { |
// Test proper routing of overscroll notifications received either from |
// event acks or from |DidOverscroll| IPC messages. |
-TEST_F(LegacyInputRouterImplTest, OverscrollDispatch) { |
+void LegacyInputRouterImplTest::OverscrollDispatch() { |
DidOverscrollParams overscroll; |
overscroll.accumulated_overscroll = gfx::Vector2dF(-14, 14); |
overscroll.latest_overscroll_delta = gfx::Vector2dF(-7, 0); |
@@ -1912,7 +2012,9 @@ TEST_F(LegacyInputRouterImplTest, OverscrollDispatch) { |
wheel_overscroll.latest_overscroll_delta = gfx::Vector2dF(3, 0); |
wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0); |
- SimulateWheelEvent(0, 0, 3, 0, 0, false); |
+ SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 0, |
+ 0, 3, 0, 0, false, |
+ WebMouseWheelEvent::kPhaseBegan); |
InputEventAck ack(InputEventAckSource::COMPOSITOR_THREAD, |
WebInputEvent::kMouseWheel, |
INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
@@ -1927,6 +2029,16 @@ TEST_F(LegacyInputRouterImplTest, OverscrollDispatch) { |
EXPECT_EQ(wheel_overscroll.current_fling_velocity, |
client_overscroll.current_fling_velocity); |
} |
+TEST_F(LegacyInputRouterImplTest, OverscrollDispatch) { |
+ OverscrollDispatch(); |
+} |
+TEST_F(LegacyInputRouterImplWheelScrollLatchingDisabledTest, |
+ OverscrollDispatch) { |
+ OverscrollDispatch(); |
+} |
+TEST_F(LegacyInputRouterImplAsyncWheelEventEnabledTest, OverscrollDispatch) { |
+ OverscrollDispatch(); |
+} |
// Tests that touch event stream validation passes when events are filtered |
// out. See crbug.com/581231 for details. |
@@ -2024,7 +2136,8 @@ TEST_F(LegacyInputRouterImplScaleMouseEventTest, ScaleMouseEventTest) { |
TEST_F(LegacyInputRouterImplScaleEventTest, ScaleMouseWheelEventTest) { |
ASSERT_EQ(0u, process_->sink().message_count()); |
- SimulateWheelEvent(5, 5, 10, 10, 0, false); |
+ SimulateWheelEventWithPhase(5, 5, 10, 10, 0, false, |
+ WebMouseWheelEvent::kPhaseBegan); |
ASSERT_EQ(1u, process_->sink().message_count()); |
const WebMouseWheelEvent* sent_event = |