Chromium Code Reviews| Index: content/browser/renderer_host/render_process_host_impl.cc |
| diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc |
| index c1dffde8e379acdfdbd7d7ca21ac446018c28314..78b91bf62ffd0b34aefcc90e7f29da9496d16c87 100644 |
| --- a/content/browser/renderer_host/render_process_host_impl.cc |
| +++ b/content/browser/renderer_host/render_process_host_impl.cc |
| @@ -531,6 +531,7 @@ RenderProcessHostImpl::RenderProcessHostImpl( |
| pending_valuebuffer_state_(new gpu::ValueStateMap()), |
| subscribe_uniform_enabled_(false), |
| channel_connected_(false), |
| + mojo_ready_(false), |
|
Fady Samuel
2015/11/24 04:42:38
Revert this.
|
| sent_render_process_ready_(false), |
| #if defined(OS_ANDROID) |
| never_signaled_(true, false), |
| @@ -1534,7 +1535,7 @@ base::ProcessHandle RenderProcessHostImpl::GetHandle() const { |
| bool RenderProcessHostImpl::IsReady() const { |
| // The process launch result (that sets GetHandle()) and the channel |
| // connection (that sets channel_connected_) can happen in either order. |
| - return GetHandle() && channel_connected_; |
| + return GetHandle() && channel_connected_ && mojo_ready_; |
| } |
| bool RenderProcessHostImpl::Shutdown(int exit_code, bool wait) { |
| @@ -1626,6 +1627,7 @@ bool RenderProcessHostImpl::OnMessageReceived(const IPC::Message& msg) { |
| OnUserMetricsRecordAction) |
| IPC_MESSAGE_HANDLER(ViewHostMsg_SavedPageAsMHTML, OnSavedPageAsMHTML) |
| IPC_MESSAGE_HANDLER(ViewHostMsg_Close_ACK, OnCloseACK) |
| + IPC_MESSAGE_HANDLER(MojoHostMsg_MojoReady, OnMojoReady) |
| #if defined(ENABLE_WEBRTC) |
| IPC_MESSAGE_HANDLER(AecDumpMsg_RegisterAecDumpConsumer, |
| OnRegisterAecDumpConsumer) |
| @@ -2501,6 +2503,17 @@ void RenderProcessHostImpl::OnCloseACK(int old_route_id) { |
| holder->Release(old_route_id); |
| } |
| +void RenderProcessHostImpl::OnMojoReady() { |
| + mojo_ready_ = true; |
| + if (IsReady()) { |
| + DCHECK(!sent_render_process_ready_); |
| + sent_render_process_ready_ = true; |
| + // Send RenderProcessReady only if we already received the process handle. |
| + FOR_EACH_OBSERVER(RenderProcessHostObserver, observers_, |
| + RenderProcessReady(this)); |
| + } |
| +} |
| + |
| void RenderProcessHostImpl::OnSavedPageAsMHTML(int job_id, int64 data_size) { |
| bool mhtml_generation_in_renderer_succeeded = data_size >= 0; |
| MHTMLGenerationManager::GetInstance()->OnSavedPageAsMHTML( |