diff options
| author | kolczyk <kolczyk@opera.com> | 2015-01-28 00:22:46 -0800 |
|---|---|---|
| committer | Commit bot <commit-bot@chromium.org> | 2015-01-28 08:23:38 +0000 |
| commit | d0f1f7659d4aee2aba2123d2c9a3db66cf8023ff (patch) | |
| tree | 73c1bb432c90b9fca7ad5da50295eb1f651c0b89 | |
| parent | c602d557bbeea92157066a7b34c56aec3348a30e (diff) | |
| download | chromium_src-d0f1f7659d4aee2aba2123d2c9a3db66cf8023ff.zip chromium_src-d0f1f7659d4aee2aba2123d2c9a3db66cf8023ff.tar.gz chromium_src-d0f1f7659d4aee2aba2123d2c9a3db66cf8023ff.tar.bz2 | |
Send notification when render process has failed to launch.
Before this patch, information about renderer that crashed
at startup (i.e. failed to start) was not forwarded to WebContents, etc...
BUG=452812
Review URL: https://codereview.chromium.org/879533006
Cr-Commit-Position: refs/heads/master@{#313461}
| -rw-r--r-- | content/browser/renderer_host/render_process_host_impl.cc | 26 | ||||
| -rw-r--r-- | content/browser/renderer_host/render_process_host_impl.h | 3 |
2 files changed, 20 insertions, 9 deletions
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 46d81c3..f8fc852 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc @@ -1446,7 +1446,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; } @@ -1540,7 +1540,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) { @@ -2019,7 +2019,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 @@ -2035,12 +2036,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(); @@ -2253,6 +2257,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_; diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 7be2c60..6232666 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h @@ -161,6 +161,7 @@ class CONTENT_EXPORT RenderProcessHostImpl // ChildProcessLauncher::Client implementation. void OnProcessLaunched() override; + void OnProcessLaunchFailed() override; scoped_refptr<AudioRendererHost> audio_renderer_host() const; @@ -331,7 +332,7 @@ class CONTENT_EXPORT RenderProcessHostImpl void SetBackgrounded(bool backgrounded); // Handle termination of our process. - void ProcessDied(bool already_dead); + void ProcessDied(bool already_dead, RendererClosedDetails* known_details); // GpuSwitchingObserver implementation. void OnGpuSwitched() override; |
