| Index: cc/layers/delegated_renderer_layer_impl_unittest.cc
|
| diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc
|
| index 401ac3cd67b54a10ea5d798be224feaa6000648b..400a44225c886f9971e7fa500c7111e370fcd06d 100644
|
| --- a/cc/layers/delegated_renderer_layer_impl_unittest.cc
|
| +++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc
|
| @@ -1245,5 +1245,58 @@ TEST_F(DelegatedRendererLayerImplTestClip, QuadsClipped_LayerClipped_Surface) {
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| +TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) {
|
| + scoped_ptr<LayerImpl> root_layer = LayerImpl::Create(
|
| + host_impl_->active_tree(), 1).PassAs<LayerImpl>();
|
| + scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer =
|
| + FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4);
|
| +
|
| + host_impl_->SetViewportSize(gfx::Size(100, 100));
|
| +
|
| + delegated_renderer_layer->SetPosition(gfx::Point(3, 3));
|
| + delegated_renderer_layer->SetBounds(gfx::Size(10, 10));
|
| + delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10));
|
| + delegated_renderer_layer->SetDrawsContent(true);
|
| +
|
| + ScopedPtrVector<RenderPass> delegated_render_passes;
|
| + TestRenderPass* pass1 = AddRenderPass(
|
| + &delegated_render_passes,
|
| + RenderPass::Id(9, 6),
|
| + gfx::Rect(0, 0, 10, 10),
|
| + gfx::Transform());
|
| + AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u);
|
| +
|
| + // This render pass isn't part of the frame.
|
| + scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create());
|
| + missing_pass->SetNew(RenderPass::Id(9, 7),
|
| + gfx::Rect(7, 7, 7, 7),
|
| + gfx::Rect(7, 7, 7, 7),
|
| + gfx::Transform());
|
| +
|
| + // But a render pass quad refers to it.
|
| + AddRenderPassQuad(pass1, missing_pass.get());
|
| +
|
| + delegated_renderer_layer->SetFrameDataForRenderPasses(
|
| + &delegated_render_passes);
|
| +
|
| + // The RenderPasses should be taken by the layer.
|
| + EXPECT_EQ(0u, delegated_render_passes.size());
|
| +
|
| + root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>());
|
| + host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
|
| +
|
| + LayerTreeHostImpl::FrameData frame;
|
| + EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
|
| +
|
| + // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad.
|
| + ASSERT_EQ(1u, frame.render_passes.size());
|
| + ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
|
| + EXPECT_EQ(DrawQuad::SOLID_COLOR,
|
| + frame.render_passes[0]->quad_list[0]->material);
|
| +
|
| + host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
|
| + host_impl_->DidDrawAllLayers(frame);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|