aura: Don't allow empty delegated frames.
Drop them in the IPC layer. And DCHECK in RenderWidgetHostViewAura
that frames have at last one render pass. Renderer will always
produce frames with a render pass.
R=piman
BUG=263069
Review URL: https://codereview.chromium.org/25624002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226671 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index 6d7c0c7..31cb997 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -724,6 +724,7 @@
void ParamTraits<cc::DelegatedFrameData>::Write(Message* m,
const param_type& p) {
+ DCHECK_NE(0u, p.render_pass_list.size());
WriteParam(m, p.resource_list);
WriteParam(m, p.render_pass_list.size());
for (size_t i = 0; i < p.render_pass_list.size(); ++i)
@@ -738,7 +739,7 @@
size_t num_render_passes;
if (!ReadParam(m, iter, &p->resource_list) ||
!ReadParam(m, iter, &num_render_passes) ||
- num_render_passes > kMaxRenderPasses)
+ num_render_passes > kMaxRenderPasses || num_render_passes == 0)
return false;
for (size_t i = 0; i < num_render_passes; ++i) {
scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc
index 678eca15..ab3798cb 100644
--- a/content/common/cc_messages_unittest.cc
+++ b/content/common/cc_messages_unittest.cc
@@ -528,9 +528,14 @@
arbitrary_resource2.size = gfx::Size(89123, 23789);
arbitrary_resource2.mailbox.SetName(arbitrary_mailbox2);
+ scoped_ptr<RenderPass> renderpass_in = RenderPass::Create();
+ renderpass_in->SetNew(
+ RenderPass::Id(1, 1), gfx::Rect(), gfx::Rect(), gfx::Transform());
+
DelegatedFrameData frame_in;
frame_in.resource_list.push_back(arbitrary_resource1);
frame_in.resource_list.push_back(arbitrary_resource2);
+ frame_in.render_pass_list.push_back(renderpass_in.Pass());
IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);