| 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 e0193efe8cd26545e8682bfb41c0caa9b3e2c041..e3f26fe1e41b502f06c0cded5b2277831d8e2674 100644
|
| --- a/content/browser/renderer_host/render_widget_host_unittest.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
|
| @@ -495,6 +495,7 @@ class RenderWidgetHostTest : public testing::Test {
|
| browser_context_.reset(new TestBrowserContext());
|
| delegate_.reset(new MockRenderWidgetHostDelegate());
|
| process_ = new RenderWidgetHostProcess(browser_context_.get());
|
| + sink_ = &process_->sink();
|
| #if defined(USE_AURA) || defined(OS_MACOSX)
|
| ImageTransportFactory::InitializeForUnitTests(
|
| std::unique_ptr<ImageTransportFactory>(
|
| @@ -682,6 +683,7 @@ class RenderWidgetHostTest : public testing::Test {
|
| bool handle_mouse_event_;
|
| double last_simulated_event_time_seconds_;
|
| double simulated_event_time_delta_seconds_;
|
| + IPC::TestSink* sink_;
|
|
|
| private:
|
| SyntheticWebTouchEvent touch_event_;
|
| @@ -1272,8 +1274,7 @@ TEST_F(RenderWidgetHostTest, NewContentRenderingTimeout) {
|
| host_->StartNewContentRenderingTimeout(5);
|
| cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.content_source_id = 5;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
|
| TimeDelta::FromMicroseconds(20));
|
| @@ -1287,8 +1288,7 @@ TEST_F(RenderWidgetHostTest, NewContentRenderingTimeout) {
|
| host_->StartNewContentRenderingTimeout(10);
|
| frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.content_source_id = 9;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
|
| TimeDelta::FromMicroseconds(20));
|
| @@ -1301,8 +1301,7 @@ TEST_F(RenderWidgetHostTest, NewContentRenderingTimeout) {
|
| // attempt to start the timer. The timer shouldn't fire.
|
| frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.content_source_id = 7;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| host_->StartNewContentRenderingTimeout(7);
|
| base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
|
| @@ -1338,8 +1337,7 @@ TEST_F(RenderWidgetHostTest, SwapCompositorFrameWithBadSourceId) {
|
| cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.begin_frame_ack = cc::BeginFrameAck(0, 1, 1, true);
|
| frame.metadata.content_source_id = 99;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| EXPECT_FALSE(
|
| static_cast<TestView*>(host_->GetView())->did_swap_compositor_frame());
|
| static_cast<TestView*>(host_->GetView())->reset_did_swap_compositor_frame();
|
| @@ -1349,8 +1347,7 @@ TEST_F(RenderWidgetHostTest, SwapCompositorFrameWithBadSourceId) {
|
| // Test with a valid content ID as a control.
|
| cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.content_source_id = 100;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| EXPECT_TRUE(
|
| static_cast<TestView*>(host_->GetView())->did_swap_compositor_frame());
|
| static_cast<TestView*>(host_->GetView())->reset_did_swap_compositor_frame();
|
| @@ -1362,8 +1359,7 @@ TEST_F(RenderWidgetHostTest, SwapCompositorFrameWithBadSourceId) {
|
| // the corresponding DidCommitProvisionalLoad (it's a race).
|
| cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
|
| frame.metadata.content_source_id = 101;
|
| - host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| - 0, 0, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
|
| EXPECT_TRUE(
|
| static_cast<TestView*>(host_->GetView())->did_swap_compositor_frame());
|
| }
|
| @@ -1867,4 +1863,54 @@ TEST_F(RenderWidgetHostTest, EventDispatchPostDetach) {
|
| ASSERT_FALSE(host_->input_router()->HasPendingEvents());
|
| }
|
|
|
| +// Checks whether RWHI properly keeps track of the last compositor_frame_sink_id
|
| +// and notifies the view_ when it changes.
|
| +TEST_F(RenderWidgetHostTest, CompositorFrameSinkIdChanges) {
|
| + const gfx::Size frame_size(50, 50);
|
| + const cc::LocalSurfaceId local_surface_id(1,
|
| + base::UnguessableToken::Create());
|
| +
|
| + // Ignore any IPC message sent so far.
|
| + sink_->ClearMessages();
|
| +
|
| + // Submit a frame with compositor_frame_sink_id=1
|
| + cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
|
| + host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| + 0, 1, local_surface_id, frame, std::vector<IPC::Message>()));
|
| +
|
| + // Send an ack. The right compositor_frame_sink_id must be sent.
|
| + host_->SendReclaimCompositorResources(true /* is_swap_ack */,
|
| + cc::ReturnedResourceArray());
|
| + ASSERT_EQ(1u, sink_->message_count());
|
| + {
|
| + const IPC::Message* msg = sink_->GetMessageAt(0);
|
| + EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type());
|
| + ViewMsg_ReclaimCompositorResources::Param params;
|
| + ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms);
|
| + EXPECT_EQ(1u, std::get<0>(params)); // compositor_frame_sink_id
|
| + }
|
| + sink_->ClearMessages();
|
| +
|
| + // Submit a frame with compositor_frame_sink_id=2. Verify that view_ is
|
| + // notified of the change in id.
|
| + view_->reset_did_change_compositor_frame_sink();
|
| + frame = MakeCompositorFrame(1.f, frame_size);
|
| + host_->OnMessageReceived(ViewHostMsg_SwapCompositorFrame(
|
| + 2, 2, local_surface_id, frame, std::vector<IPC::Message>()));
|
| + EXPECT_TRUE(view_->did_change_compositor_frame_sink());
|
| +
|
| + // Send an ack. The right compositor_frame_sink_id must be sent.
|
| + host_->SendReclaimCompositorResources(true /* is_swap_ack */,
|
| + cc::ReturnedResourceArray());
|
| + ASSERT_EQ(1u, sink_->message_count());
|
| + {
|
| + const IPC::Message* msg = sink_->GetMessageAt(0);
|
| + EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type());
|
| + ViewMsg_ReclaimCompositorResources::Param params;
|
| + ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms);
|
| + EXPECT_EQ(2u, std::get<0>(params)); // compositor_frame_sink_id
|
| + }
|
| + sink_->ClearMessages();
|
| +}
|
| +
|
| } // namespace content
|
|
|