Index: headless/lib/browser/headless_web_contents_impl.cc |
diff --git a/headless/lib/browser/headless_web_contents_impl.cc b/headless/lib/browser/headless_web_contents_impl.cc |
index 2418c29644f46826d2bba29ad6ac1343ee618665..f3d91f51302d08d107cc4af91e84363ac61db58d 100644 |
--- a/headless/lib/browser/headless_web_contents_impl.cc |
+++ b/headless/lib/browser/headless_web_contents_impl.cc |
@@ -54,6 +54,8 @@ class WebContentsObserverAdapter : public content::WebContentsObserver { |
observer_->DevToolsTargetReady(); |
} |
+ HeadlessWebContents::Observer* observer() { return observer_; } |
+ |
private: |
HeadlessWebContents::Observer* observer_; // Not owned. |
@@ -139,12 +141,16 @@ HeadlessWebContentsImpl::HeadlessWebContentsImpl( |
new HeadlessWebContentsImpl::Delegate(browser_context)), |
web_contents_(web_contents), |
agent_host_(content::DevToolsAgentHost::GetOrCreateFor(web_contents)), |
- browser_context_(browser_context) { |
+ browser_context_(browser_context), |
+ render_process_host_(web_contents->GetRenderProcessHost()) { |
web_contents_->SetDelegate(web_contents_delegate_.get()); |
+ render_process_host_->AddObserver(this); |
} |
HeadlessWebContentsImpl::~HeadlessWebContentsImpl() { |
web_contents_->Close(); |
+ if (render_process_host_) |
+ render_process_host_->RemoveObserver(this); |
} |
void HeadlessWebContentsImpl::RenderFrameCreated( |
@@ -196,6 +202,22 @@ void HeadlessWebContentsImpl::RemoveObserver(Observer* observer) { |
observer_map_.erase(it); |
} |
+void HeadlessWebContentsImpl::RenderProcessExited( |
+ content::RenderProcessHost* host, |
+ base::TerminationStatus status, |
+ int exit_code) { |
+ DCHECK_EQ(render_process_host_, host); |
+ for (const auto& pair : observer_map_) { |
+ pair.second->observer()->RenderProcessExited(status, exit_code); |
+ } |
+} |
+ |
+void HeadlessWebContentsImpl::RenderProcessHostDestroyed( |
+ content::RenderProcessHost* host) { |
+ DCHECK_EQ(render_process_host_, host); |
+ render_process_host_ = nullptr; |
+} |
+ |
HeadlessDevToolsTarget* HeadlessWebContentsImpl::GetDevToolsTarget() { |
return web_contents()->GetMainFrame()->IsRenderFrameLive() ? this : nullptr; |
} |