| Index: content/browser/renderer_host/render_widget_host_unittest.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
|
| index d043d3116858884211e91339b8b28014705facdc..8e35e21caf7de0e509d5e35cfe7ad2e18cae9355 100644
|
| --- a/content/browser/renderer_host/render_widget_host_unittest.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
|
| @@ -512,15 +512,44 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
|
| render_view_host_delegate_view_;
|
| };
|
|
|
| +enum WheelScrollingMode {
|
| + kWheelScrollingModeNone,
|
| + kWheelScrollLatching,
|
| + kAsyncWheelEvents,
|
| +};
|
| +
|
| // RenderWidgetHostTest --------------------------------------------------------
|
|
|
| class RenderWidgetHostTest : public testing::Test {
|
| public:
|
| - RenderWidgetHostTest()
|
| + RenderWidgetHostTest(
|
| + WheelScrollingMode wheel_scrolling_mode = kWheelScrollLatching)
|
| : process_(NULL),
|
| handle_key_press_event_(false),
|
| handle_mouse_event_(false),
|
| - simulated_event_time_delta_seconds_(0) {
|
| + simulated_event_time_delta_seconds_(0),
|
| + wheel_scroll_latching_enabled_(wheel_scrolling_mode !=
|
| + kWheelScrollingModeNone) {
|
| + switch (wheel_scrolling_mode) {
|
| + case kWheelScrollingModeNone:
|
| + feature_list_.InitWithFeatures(
|
| + {features::kRafAlignedTouchInputEvents},
|
| + {features::kTouchpadAndWheelScrollLatching,
|
| + features::kAsyncWheelEvents});
|
| + break;
|
| + case kWheelScrollLatching:
|
| + feature_list_.InitWithFeatures(
|
| + {features::kRafAlignedTouchInputEvents,
|
| + features::kTouchpadAndWheelScrollLatching},
|
| + {features::kAsyncWheelEvents});
|
| + break;
|
| + case kAsyncWheelEvents:
|
| + feature_list_.InitWithFeatures(
|
| + {features::kRafAlignedTouchInputEvents,
|
| + features::kTouchpadAndWheelScrollLatching,
|
| + features::kAsyncWheelEvents},
|
| + {});
|
| + }
|
| last_simulated_event_time_seconds_ =
|
| ui::EventTimeStampToSeconds(ui::EventTimeForNow());
|
| }
|
| @@ -538,9 +567,6 @@ class RenderWidgetHostTest : public testing::Test {
|
| void SetUp() override {
|
| base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
| command_line->AppendSwitch(switches::kValidateInputEventStream);
|
| - feature_list_.InitFromCommandLine(
|
| - features::kRafAlignedTouchInputEvents.name, "");
|
| -
|
| browser_context_.reset(new TestBrowserContext());
|
| delegate_.reset(new MockRenderWidgetHostDelegate());
|
| process_ = new RenderWidgetHostProcess(browser_context_.get());
|
| @@ -659,6 +685,19 @@ class RenderWidgetHostTest : public testing::Test {
|
| 0, 0, dX, dY, modifiers, precise));
|
| }
|
|
|
| + void SimulateWheelEventPossiblyIncludingPhase(
|
| + float dX,
|
| + float dY,
|
| + int modifiers,
|
| + bool precise,
|
| + WebMouseWheelEvent::Phase phase) {
|
| + WebMouseWheelEvent wheel_event = SyntheticWebMouseWheelEventBuilder::Build(
|
| + 0, 0, dX, dY, modifiers, precise);
|
| + if (wheel_scroll_latching_enabled_)
|
| + wheel_event.phase = phase;
|
| + host_->ForwardWheelEvent(wheel_event);
|
| + }
|
| +
|
| void SimulateWheelEventWithLatencyInfo(float dX,
|
| float dY,
|
| int modifiers,
|
| @@ -670,6 +709,20 @@ class RenderWidgetHostTest : public testing::Test {
|
| ui_latency);
|
| }
|
|
|
| + void SimulateWheelEventWithLatencyInfoAndPossiblyPhase(
|
| + float dX,
|
| + float dY,
|
| + int modifiers,
|
| + bool precise,
|
| + const ui::LatencyInfo& ui_latency,
|
| + WebMouseWheelEvent::Phase phase) {
|
| + WebMouseWheelEvent wheel_event = SyntheticWebMouseWheelEventBuilder::Build(
|
| + 0, 0, dX, dY, modifiers, precise);
|
| + if (wheel_scroll_latching_enabled_)
|
| + wheel_event.phase = phase;
|
| + host_->ForwardWheelEventWithLatencyInfo(wheel_event, ui_latency);
|
| + }
|
| +
|
| void SimulateMouseMove(int x, int y, int modifiers) {
|
| SimulateMouseEvent(WebInputEvent::kMouseMove, x, y, modifiers, false);
|
| }
|
| @@ -735,6 +788,10 @@ class RenderWidgetHostTest : public testing::Test {
|
| return reinterpret_cast<const WebInputEvent*>(data);
|
| }
|
|
|
| + void UnhandledWheelEvent();
|
| + void HandleWheelEvent();
|
| + void InputEventRWHLatencyComponent();
|
| +
|
| std::unique_ptr<TestBrowserContext> browser_context_;
|
| RenderWidgetHostProcess* process_; // Deleted automatically by the widget.
|
| std::unique_ptr<MockRenderWidgetHostDelegate> delegate_;
|
| @@ -748,6 +805,7 @@ class RenderWidgetHostTest : public testing::Test {
|
| IPC::TestSink* sink_;
|
| std::unique_ptr<FakeRendererCompositorFrameSink>
|
| renderer_compositor_frame_sink_;
|
| + bool wheel_scroll_latching_enabled_;
|
|
|
| private:
|
| SyntheticWebTouchEvent touch_event_;
|
| @@ -760,6 +818,20 @@ class RenderWidgetHostTest : public testing::Test {
|
| DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest);
|
| };
|
|
|
| +class RenderWidgetHostWheelScrollLatchingDisabledTest
|
| + : public RenderWidgetHostTest {
|
| + public:
|
| + RenderWidgetHostWheelScrollLatchingDisabledTest()
|
| + : RenderWidgetHostTest(kWheelScrollingModeNone) {}
|
| +};
|
| +
|
| +class RenderWidgetHostAsyncWheelEventsEnabledTest
|
| + : public RenderWidgetHostTest {
|
| + public:
|
| + RenderWidgetHostAsyncWheelEventsEnabledTest()
|
| + : RenderWidgetHostTest(kAsyncWheelEvents) {}
|
| +};
|
| +
|
| #if GTEST_HAS_PARAM_TEST
|
| // RenderWidgetHostWithSourceTest ----------------------------------------------
|
|
|
| @@ -1154,12 +1226,13 @@ TEST_F(RenderWidgetHostTest, RawKeyDownShortcutEvent) {
|
| EXPECT_EQ(WebInputEvent::kKeyUp, delegate_->unhandled_keyboard_event_type());
|
| }
|
|
|
| -TEST_F(RenderWidgetHostTest, UnhandledWheelEvent) {
|
| - SimulateWheelEvent(-5, 0, 0, true);
|
| +void RenderWidgetHostTest::UnhandledWheelEvent() {
|
| + SimulateWheelEventPossiblyIncludingPhase(-5, 0, 0, true,
|
| + WebMouseWheelEvent::kPhaseBegan);
|
|
|
| // Make sure we sent the input event to the renderer.
|
| - EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| - InputMsg_HandleInputEvent::ID));
|
| + EXPECT_TRUE(
|
| + process_->sink().GetUniqueMessageMatching(InputMsg_HandleInputEvent::ID));
|
| process_->sink().ClearMessages();
|
|
|
| // Send the simulated response from the renderer back.
|
| @@ -1169,16 +1242,26 @@ TEST_F(RenderWidgetHostTest, UnhandledWheelEvent) {
|
| EXPECT_EQ(1, view_->unhandled_wheel_event_count());
|
| EXPECT_EQ(-5, view_->unhandled_wheel_event().delta_x);
|
| }
|
| +TEST_F(RenderWidgetHostTest, UnhandledWheelEvent) {
|
| + UnhandledWheelEvent();
|
| +}
|
| +TEST_F(RenderWidgetHostWheelScrollLatchingDisabledTest, UnhandledWheelEvent) {
|
| + UnhandledWheelEvent();
|
| +}
|
| +TEST_F(RenderWidgetHostAsyncWheelEventsEnabledTest, UnhandledWheelEvent) {
|
| + UnhandledWheelEvent();
|
| +}
|
|
|
| -TEST_F(RenderWidgetHostTest, HandleWheelEvent) {
|
| +void RenderWidgetHostTest::HandleWheelEvent() {
|
| // Indicate that we're going to handle this wheel event
|
| delegate_->set_handle_wheel_event(true);
|
|
|
| - SimulateWheelEvent(-5, 0, 0, true);
|
| + SimulateWheelEventPossiblyIncludingPhase(-5, 0, 0, true,
|
| + WebMouseWheelEvent::kPhaseBegan);
|
|
|
| // Make sure we sent the input event to the renderer.
|
| - EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| - InputMsg_HandleInputEvent::ID));
|
| + EXPECT_TRUE(
|
| + process_->sink().GetUniqueMessageMatching(InputMsg_HandleInputEvent::ID));
|
| process_->sink().ClearMessages();
|
|
|
| // Send the simulated response from the renderer back.
|
| @@ -1191,6 +1274,15 @@ TEST_F(RenderWidgetHostTest, HandleWheelEvent) {
|
| // and that it suppressed the unhandled wheel event handler.
|
| EXPECT_EQ(0, view_->unhandled_wheel_event_count());
|
| }
|
| +TEST_F(RenderWidgetHostTest, HandleWheelEvent) {
|
| + HandleWheelEvent();
|
| +}
|
| +TEST_F(RenderWidgetHostWheelScrollLatchingDisabledTest, HandleWheelEvent) {
|
| + HandleWheelEvent();
|
| +}
|
| +TEST_F(RenderWidgetHostAsyncWheelEventsEnabledTest, HandleWheelEvent) {
|
| + HandleWheelEvent();
|
| +}
|
|
|
| TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) {
|
| SimulateGestureEvent(WebInputEvent::kGestureTwoFingerTap,
|
| @@ -1794,18 +1886,20 @@ void CheckLatencyInfoComponentInGestureScrollUpdate(
|
| // or ForwardXXXEventWithLatencyInfo(), LatencyInfo component
|
| // ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT will always present in the
|
| // event's LatencyInfo.
|
| -TEST_F(RenderWidgetHostTest, InputEventRWHLatencyComponent) {
|
| +void RenderWidgetHostTest::InputEventRWHLatencyComponent() {
|
| host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
|
| process_->sink().ClearMessages();
|
|
|
| // Tests RWHI::ForwardWheelEvent().
|
| - SimulateWheelEvent(-5, 0, 0, true);
|
| + SimulateWheelEventPossiblyIncludingPhase(-5, 0, 0, true,
|
| + WebMouseWheelEvent::kPhaseBegan);
|
| CheckLatencyInfoComponentInMessage(process_, GetLatencyComponentId(),
|
| WebInputEvent::kMouseWheel);
|
| SendInputEventACK(WebInputEvent::kMouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED);
|
|
|
| // Tests RWHI::ForwardWheelEventWithLatencyInfo().
|
| - SimulateWheelEventWithLatencyInfo(-5, 0, 0, true, ui::LatencyInfo());
|
| + SimulateWheelEventWithLatencyInfoAndPossiblyPhase(
|
| + -5, 0, 0, true, ui::LatencyInfo(), WebMouseWheelEvent::kPhaseChanged);
|
| CheckLatencyInfoComponentInMessage(process_, GetLatencyComponentId(),
|
| WebInputEvent::kMouseWheel);
|
| SendInputEventACK(WebInputEvent::kMouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED);
|
| @@ -1848,6 +1942,17 @@ TEST_F(RenderWidgetHostTest, InputEventRWHLatencyComponent) {
|
| CheckLatencyInfoComponentInMessage(process_, GetLatencyComponentId(),
|
| WebInputEvent::kTouchStart);
|
| }
|
| +TEST_F(RenderWidgetHostTest, InputEventRWHLatencyComponent) {
|
| + InputEventRWHLatencyComponent();
|
| +}
|
| +TEST_F(RenderWidgetHostWheelScrollLatchingDisabledTest,
|
| + InputEventRWHLatencyComponent) {
|
| + InputEventRWHLatencyComponent();
|
| +}
|
| +TEST_F(RenderWidgetHostAsyncWheelEventsEnabledTest,
|
| + InputEventRWHLatencyComponent) {
|
| + InputEventRWHLatencyComponent();
|
| +}
|
|
|
| TEST_F(RenderWidgetHostTest, RendererExitedResetsInputRouter) {
|
| // RendererExited will delete the view.
|
|
|