Index: content/renderer/pepper/pepper_compositor_host.cc |
diff --git a/content/renderer/pepper/pepper_compositor_host.cc b/content/renderer/pepper/pepper_compositor_host.cc |
index baba5b89b16ee0d272f15ec4002b0d9be4860e49..f7e32b65f48de819fd60bb8961091c2eb7382b58 100644 |
--- a/content/renderer/pepper/pepper_compositor_host.cc |
+++ b/content/renderer/pepper/pepper_compositor_host.cc |
@@ -158,10 +158,35 @@ bool PepperCompositorHost::BindToInstance( |
if (bound_instance_ && new_instance) |
return false; // Can't change a bound device. |
bound_instance_ = new_instance; |
+ if (!bound_instance_) |
+ SendCommitLayersReplyIfNecessary(); |
+ |
return true; |
} |
void PepperCompositorHost::ViewInitiatedPaint() { |
+ SendCommitLayersReplyIfNecessary(); |
+} |
+ |
+void PepperCompositorHost::ViewFlushedPaint() {} |
+ |
+void PepperCompositorHost::ImageReleased( |
+ int32_t id, |
+ const scoped_ptr<base::SharedMemory>& shared_memory, |
+ uint32_t sync_point, |
+ bool is_lost) { |
+ ResourceReleased(id, sync_point, is_lost); |
+} |
+ |
+void PepperCompositorHost::ResourceReleased(int32_t id, |
+ uint32_t sync_point, |
+ bool is_lost) { |
+ host()->SendUnsolicitedReply( |
+ pp_resource(), |
+ PpapiPluginMsg_Compositor_ReleaseResource(id, sync_point, is_lost)); |
+} |
+ |
+void PepperCompositorHost::SendCommitLayersReplyIfNecessary() { |
if (!commit_layers_reply_context_.is_valid()) |
return; |
host()->SendReply(commit_layers_reply_context_, |
@@ -169,8 +194,6 @@ void PepperCompositorHost::ViewInitiatedPaint() { |
commit_layers_reply_context_ = ppapi::host::ReplyMessageContext(); |
} |
-void PepperCompositorHost::ViewFlushedPaint() {} |
- |
void PepperCompositorHost::UpdateLayer( |
const scoped_refptr<cc::Layer>& layer, |
const ppapi::CompositorLayerData* old_layer, |
@@ -277,22 +300,6 @@ void PepperCompositorHost::UpdateLayer( |
NOTREACHED(); |
} |
-void PepperCompositorHost::ResourceReleased(int32_t id, |
- uint32_t sync_point, |
- bool is_lost) { |
- host()->SendUnsolicitedReply( |
- pp_resource(), |
- PpapiPluginMsg_Compositor_ReleaseResource(id, sync_point, is_lost)); |
-} |
- |
-void PepperCompositorHost::ImageReleased( |
- int32_t id, |
- const scoped_ptr<base::SharedMemory>& shared_memory, |
- uint32_t sync_point, |
- bool is_lost) { |
- ResourceReleased(id, sync_point, is_lost); |
-} |
- |
int32_t PepperCompositorHost::OnResourceMessageReceived( |
const IPC::Message& msg, |
HostMessageContext* context) { |
@@ -311,15 +318,9 @@ int32_t PepperCompositorHost::OnHostMsgCommitLayers( |
HostMessageContext* context, |
const std::vector<ppapi::CompositorLayerData>& layers, |
bool reset) { |
- // Do not support CommitLayers() on an unbounded compositor. |
- if (!bound_instance_) |
- return PP_ERROR_FAILED; |
- |
if (commit_layers_reply_context_.is_valid()) |
return PP_ERROR_INPROGRESS; |
- commit_layers_reply_context_ = context->MakeReplyMessageContext(); |
- |
scoped_ptr<scoped_ptr<base::SharedMemory>[]> image_shms; |
if (layers.size() > 0) { |
image_shms.reset(new scoped_ptr<base::SharedMemory>[layers.size()]); |
@@ -373,6 +374,11 @@ int32_t PepperCompositorHost::OnHostMsgCommitLayers( |
if (layer_->layer_tree_host()) |
layer_->layer_tree_host()->SetNeedsCommit(); |
+ // If the host is not bound to the instance, return PP_OK immediately. |
+ if (!bound_instance_) |
+ return PP_OK; |
+ |
+ commit_layers_reply_context_ = context->MakeReplyMessageContext(); |
return PP_OK_COMPLETIONPENDING; |
} |