| 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 fafd773952f52b74baab4d052d8c229f64407e8b..4493e28a39557ff20a5af9874f11caf60dcfc9ce 100644
|
| --- a/content/browser/renderer_host/render_process_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_process_host_impl.cc
|
| @@ -1438,7 +1438,7 @@ bool RenderProcessHostImpl::FastShutdownIfPossible() {
|
| // died due to fast shutdown versus another cause.
|
| fast_shutdown_started_ = true;
|
|
|
| - ProcessDied(false /* already_dead */);
|
| + ProcessDied(false /* already_dead */, nullptr);
|
| return true;
|
| }
|
|
|
| @@ -1532,7 +1532,7 @@ void RenderProcessHostImpl::OnChannelConnected(int32 peer_pid) {
|
| }
|
|
|
| void RenderProcessHostImpl::OnChannelError() {
|
| - ProcessDied(true /* already_dead */);
|
| + ProcessDied(true /* already_dead */, nullptr);
|
| }
|
|
|
| void RenderProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) {
|
| @@ -2003,7 +2003,8 @@ void RenderProcessHostImpl::RegisterProcessHostForSite(
|
| map->RegisterProcess(site, process);
|
| }
|
|
|
| -void RenderProcessHostImpl::ProcessDied(bool already_dead) {
|
| +void RenderProcessHostImpl::ProcessDied(bool already_dead,
|
| + RendererClosedDetails* known_details) {
|
| // Our child process has died. If we didn't expect it, it's a crash.
|
| // In any case, we need to let everyone know it's gone.
|
| // The OnChannelError notification can fire multiple times due to nested sync
|
| @@ -2019,12 +2020,15 @@ void RenderProcessHostImpl::ProcessDied(bool already_dead) {
|
|
|
| // child_process_launcher_ can be NULL in single process mode or if fast
|
| // termination happened.
|
| + base::TerminationStatus status = base::TERMINATION_STATUS_NORMAL_TERMINATION;
|
| int exit_code = 0;
|
| - base::TerminationStatus status =
|
| - child_process_launcher_.get() ?
|
| - child_process_launcher_->GetChildTerminationStatus(already_dead,
|
| - &exit_code) :
|
| - base::TERMINATION_STATUS_NORMAL_TERMINATION;
|
| + if (known_details) {
|
| + status = known_details->status;
|
| + exit_code = known_details->exit_code;
|
| + } else if (child_process_launcher_.get()) {
|
| + status = child_process_launcher_->GetChildTerminationStatus(already_dead,
|
| + &exit_code);
|
| + }
|
|
|
| RendererClosedDetails details(status, exit_code);
|
| mojo_application_host_->WillDestroySoon();
|
| @@ -2237,6 +2241,12 @@ void RenderProcessHostImpl::OnProcessLaunched() {
|
| #endif
|
| }
|
|
|
| +void RenderProcessHostImpl::OnProcessLaunchFailed() {
|
| + RendererClosedDetails details { base::TERMINATION_STATUS_PROCESS_WAS_KILLED,
|
| + -1 };
|
| + ProcessDied(true, &details);
|
| +}
|
| +
|
| scoped_refptr<AudioRendererHost>
|
| RenderProcessHostImpl::audio_renderer_host() const {
|
| return audio_renderer_host_;
|
|
|