| Index: content/renderer/render_widget_unittest.cc
|
| diff --git a/content/renderer/render_widget_unittest.cc b/content/renderer/render_widget_unittest.cc
|
| index 508ebc181b21d5c933cd3b6d08053955f34d2bbf..9211acac8199e10ff50b97e7323c1d4b3d922ccd 100644
|
| --- a/content/renderer/render_widget_unittest.cc
|
| +++ b/content/renderer/render_widget_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include "content/common/input/synthetic_web_input_event_builders.h"
|
| #include "content/common/input_messages.h"
|
| #include "content/public/test/mock_render_thread.h"
|
| +#include "content/test/fake_compositor_dependencies.h"
|
| #include "content/test/mock_render_process.h"
|
| #include "ipc/ipc_test_sink.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -17,22 +18,11 @@
|
|
|
| namespace content {
|
|
|
| -class RenderWidgetUnittest : public testing::Test {
|
| - public:
|
| - RenderWidgetUnittest() {}
|
| - ~RenderWidgetUnittest() override {}
|
| -
|
| - private:
|
| - MockRenderProcess render_process_;
|
| - MockRenderThread render_thread_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RenderWidgetUnittest);
|
| -};
|
| -
|
| class InteractiveRenderWidget : public RenderWidget {
|
| public:
|
| - InteractiveRenderWidget()
|
| - : RenderWidget(blink::WebPopupTypeNone,
|
| + explicit InteractiveRenderWidget(CompositorDependencies* compositor_deps)
|
| + : RenderWidget(compositor_deps,
|
| + blink::WebPopupTypeNone,
|
| blink::WebScreenInfo(),
|
| false,
|
| false,
|
| @@ -96,89 +86,102 @@ class InteractiveRenderWidget : public RenderWidget {
|
| DISALLOW_COPY_AND_ASSIGN(InteractiveRenderWidget);
|
| };
|
|
|
| -TEST_F(RenderWidgetUnittest, TouchHitTestSinglePoint) {
|
| - scoped_refptr<InteractiveRenderWidget> widget = new InteractiveRenderWidget();
|
| +class RenderWidgetUnittest : public testing::Test {
|
| + public:
|
| + RenderWidgetUnittest()
|
| + : widget_(new InteractiveRenderWidget(&compositor_deps_)) {}
|
| + ~RenderWidgetUnittest() override {}
|
| +
|
| + InteractiveRenderWidget* widget() const { return widget_.get(); }
|
| +
|
| + private:
|
| + MockRenderProcess render_process_;
|
| + MockRenderThread render_thread_;
|
| + FakeCompositorDependencies compositor_deps_;
|
| + scoped_refptr<InteractiveRenderWidget> widget_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RenderWidgetUnittest);
|
| +};
|
|
|
| +TEST_F(RenderWidgetUnittest, TouchHitTestSinglePoint) {
|
| SyntheticWebTouchEvent touch;
|
| touch.PressPoint(10, 10);
|
|
|
| - widget->SendInputEvent(touch);
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| + widget()->SendInputEvent(touch);
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
|
|
| // Since there's currently no touch-event handling region, the response should
|
| // be 'no consumer exists'.
|
| - const IPC::Message* message = widget->sink()->GetMessageAt(0);
|
| + const IPC::Message* message = widget()->sink()->GetMessageAt(0);
|
| EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
|
| InputHostMsg_HandleInputEvent_ACK::Param params;
|
| InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms);
|
| InputEventAckState ack_state = base::get<0>(params).state;
|
| EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, ack_state);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
|
|
| std::vector<gfx::Rect> rects;
|
| rects.push_back(gfx::Rect(0, 0, 20, 20));
|
| rects.push_back(gfx::Rect(25, 0, 10, 10));
|
| - widget->SetTouchRegion(rects);
|
| + widget()->SetTouchRegion(rects);
|
|
|
| - widget->SendInputEvent(touch);
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| - message = widget->sink()->GetMessageAt(0);
|
| + widget()->SendInputEvent(touch);
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
| + message = widget()->sink()->GetMessageAt(0);
|
| EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
|
| InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms);
|
| ack_state = base::get<0>(params).state;
|
| EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_state);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
| }
|
|
|
| TEST_F(RenderWidgetUnittest, TouchHitTestMultiplePoints) {
|
| - scoped_refptr<InteractiveRenderWidget> widget = new InteractiveRenderWidget();
|
| std::vector<gfx::Rect> rects;
|
| rects.push_back(gfx::Rect(0, 0, 20, 20));
|
| rects.push_back(gfx::Rect(25, 0, 10, 10));
|
| - widget->SetTouchRegion(rects);
|
| + widget()->SetTouchRegion(rects);
|
|
|
| SyntheticWebTouchEvent touch;
|
| touch.PressPoint(25, 25);
|
|
|
| - widget->SendInputEvent(touch);
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| + widget()->SendInputEvent(touch);
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
|
|
| // Since there's currently no touch-event handling region, the response should
|
| // be 'no consumer exists'.
|
| - const IPC::Message* message = widget->sink()->GetMessageAt(0);
|
| + const IPC::Message* message = widget()->sink()->GetMessageAt(0);
|
| EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
|
| InputHostMsg_HandleInputEvent_ACK::Param params;
|
| InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms);
|
| InputEventAckState ack_state = base::get<0>(params).state;
|
| EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, ack_state);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
|
|
| // Press a second touch point. This time, on a touch-handling region.
|
| touch.PressPoint(10, 10);
|
| - widget->SendInputEvent(touch);
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| - message = widget->sink()->GetMessageAt(0);
|
| + widget()->SendInputEvent(touch);
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
| + message = widget()->sink()->GetMessageAt(0);
|
| EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
|
| InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms);
|
| ack_state = base::get<0>(params).state;
|
| EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_state);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
| }
|
|
|
| TEST_F(RenderWidgetUnittest, EventOverscroll) {
|
| - scoped_refptr<InteractiveRenderWidget> widget = new InteractiveRenderWidget();
|
| - widget->set_always_overscroll(true);
|
| + widget()->set_always_overscroll(true);
|
|
|
| blink::WebGestureEvent scroll;
|
| scroll.type = blink::WebInputEvent::GestureScrollUpdate;
|
| scroll.x = -10;
|
| scroll.data.scrollUpdate.deltaY = 10;
|
| - widget->SendInputEvent(scroll);
|
| + widget()->SendInputEvent(scroll);
|
|
|
| // Overscroll notifications received while handling an input event should
|
| // be bundled with the event ack IPC.
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| - const IPC::Message* message = widget->sink()->GetMessageAt(0);
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
| + const IPC::Message* message = widget()->sink()->GetMessageAt(0);
|
| ASSERT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
|
| InputHostMsg_HandleInputEvent_ACK::Param params;
|
| InputHostMsg_HandleInputEvent_ACK::Read(message, ¶ms);
|
| @@ -189,18 +192,17 @@ TEST_F(RenderWidgetUnittest, EventOverscroll) {
|
| EXPECT_EQ(gfx::Vector2dF(0, 10), ack.overscroll->latest_overscroll_delta);
|
| EXPECT_EQ(gfx::Vector2dF(), ack.overscroll->current_fling_velocity);
|
| EXPECT_EQ(gfx::PointF(-10, 0), ack.overscroll->causal_event_viewport_point);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
| }
|
|
|
| TEST_F(RenderWidgetUnittest, FlingOverscroll) {
|
| - scoped_refptr<InteractiveRenderWidget> widget = new InteractiveRenderWidget();
|
| -
|
| // Overscroll notifications received outside of handling an input event should
|
| // be sent as a separate IPC.
|
| - widget->didOverscroll(blink::WebFloatSize(10, 5), blink::WebFloatSize(5, 5),
|
| - blink::WebFloatPoint(1, 1), blink::WebFloatSize(10, 5));
|
| - ASSERT_EQ(1u, widget->sink()->message_count());
|
| - const IPC::Message* message = widget->sink()->GetMessageAt(0);
|
| + widget()->didOverscroll(blink::WebFloatSize(10, 5), blink::WebFloatSize(5, 5),
|
| + blink::WebFloatPoint(1, 1),
|
| + blink::WebFloatSize(10, 5));
|
| + ASSERT_EQ(1u, widget()->sink()->message_count());
|
| + const IPC::Message* message = widget()->sink()->GetMessageAt(0);
|
| ASSERT_EQ(InputHostMsg_DidOverscroll::ID, message->type());
|
| InputHostMsg_DidOverscroll::Param params;
|
| InputHostMsg_DidOverscroll::Read(message, ¶ms);
|
| @@ -209,7 +211,7 @@ TEST_F(RenderWidgetUnittest, FlingOverscroll) {
|
| EXPECT_EQ(gfx::Vector2dF(5, 5), overscroll.accumulated_overscroll);
|
| EXPECT_EQ(gfx::PointF(1, 1), overscroll.causal_event_viewport_point);
|
| EXPECT_EQ(gfx::Vector2dF(-10, -5), overscroll.current_fling_velocity);
|
| - widget->sink()->ClearMessages();
|
| + widget()->sink()->ClearMessages();
|
| }
|
|
|
| } // namespace content
|
|
|