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( |