Notify observers if a running browser child process is shut down by deleting the BrowserChildProcessHostImpl.
BUG=598775
Review URL: https://codereview.chromium.org/1843663003
Cr-Commit-Position: refs/heads/master@{#384454}
diff --git a/content/browser/browser_child_process_host_impl.cc b/content/browser/browser_child_process_host_impl.cc
index cde59de5..c47a32d 100644
--- a/content/browser/browser_child_process_host_impl.cc
+++ b/content/browser/browser_child_process_host_impl.cc
@@ -126,7 +126,8 @@
: data_(process_type),
delegate_(delegate),
power_monitor_message_broadcaster_(this),
- is_channel_connected_(false) {
+ is_channel_connected_(false),
+ notify_child_disconnected_(false) {
data_.id = ChildProcessHostImpl::GenerateChildProcessUniqueId();
#if USE_ATTACHMENT_BROKER
@@ -156,6 +157,11 @@
BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl() {
g_child_process_list.Get().remove(this);
+
+ if (notify_child_disconnected_) {
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&NotifyProcessHostDisconnected, data_));
+ }
}
// static
@@ -193,6 +199,7 @@
cmd_line->CopySwitchesFrom(browser_command_line, kForwardSwitches,
arraysize(kForwardSwitches));
+ notify_child_disconnected_ = true;
child_process_.reset(new ChildProcessLauncher(
delegate,
cmd_line,
@@ -280,6 +287,7 @@
DCHECK_CURRENTLY_ON(BrowserThread::IO);
is_channel_connected_ = true;
+ notify_child_disconnected_ = true;
#if defined(OS_WIN)
// From this point onward, the exit of the child process is detected by an
@@ -387,8 +395,6 @@
}
#endif
}
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(&NotifyProcessHostDisconnected, data_));
delete delegate_; // Will delete us
}
@@ -398,6 +404,7 @@
void BrowserChildProcessHostImpl::OnProcessLaunchFailed() {
delegate_->OnProcessLaunchFailed();
+ notify_child_disconnected_ = false;
delete delegate_; // Will delete us
}