summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkolczyk <kolczyk@opera.com>2015-01-28 00:22:46 -0800
committerCommit bot <commit-bot@chromium.org>2015-01-28 08:23:38 +0000
commitd0f1f7659d4aee2aba2123d2c9a3db66cf8023ff (patch)
tree73c1bb432c90b9fca7ad5da50295eb1f651c0b89
parentc602d557bbeea92157066a7b34c56aec3348a30e (diff)
downloadchromium_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.cc26
-rw-r--r--content/browser/renderer_host/render_process_host_impl.h3
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;