| Index: chrome/browser/renderer_host/browser_render_process_host.cc | 
| diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc | 
| index 3a46d65ce097d0125438bd8df446b434d1839c42..9df384105922cc6df7fa3ce76c19fe52046535a6 100644 | 
| --- a/chrome/browser/renderer_host/browser_render_process_host.cc | 
| +++ b/chrome/browser/renderer_host/browser_render_process_host.cc | 
| @@ -982,16 +982,26 @@ void BrowserRenderProcessHost::OnChannelError() { | 
| if (!channel_.get()) | 
| return; | 
|  | 
| -  // NULL in single process mode or if fast termination happened. | 
| -  bool did_crash = | 
| -      child_process_.get() ? child_process_->DidProcessCrash() : false; | 
| - | 
| -  if (did_crash) { | 
| +  // child_process_ can be NULL in single process mode or if fast | 
| +  // termination happened. | 
| +  int exit_code = 0; | 
| +  base::TerminationStatus status = | 
| +      child_process_.get() ? | 
| +      child_process_->GetChildTerminationStatus(&exit_code) : | 
| +      base::TERMINATION_STATUS_NORMAL_TERMINATION; | 
| + | 
| +  if (status == base::TERMINATION_STATUS_PROCESS_CRASHED || | 
| +      status == base::TERMINATION_STATUS_ABNORMAL_TERMINATION) { | 
| UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes", | 
| extension_process_ ? 2 : 1); | 
| } | 
|  | 
| -  RendererClosedDetails details(did_crash, extension_process_); | 
| +  if (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { | 
| +    UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildKills", | 
| +                             extension_process_ ? 2 : 1); | 
| +  } | 
| + | 
| +  RendererClosedDetails details(status, exit_code, extension_process_); | 
| NotificationService::current()->Notify( | 
| NotificationType::RENDERER_PROCESS_CLOSED, | 
| Source<RenderProcessHost>(this), | 
| @@ -1004,7 +1014,9 @@ void BrowserRenderProcessHost::OnChannelError() { | 
| IDMap<IPC::Channel::Listener>::iterator iter(&listeners_); | 
| while (!iter.IsAtEnd()) { | 
| iter.GetCurrentValue()->OnMessageReceived( | 
| -        ViewHostMsg_RenderViewGone(iter.GetCurrentKey())); | 
| +        ViewHostMsg_RenderViewGone(iter.GetCurrentKey(), | 
| +                                   static_cast<int>(status), | 
| +                                   exit_code)); | 
| iter.Advance(); | 
| } | 
|  | 
|  |