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);