| 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;
|
| }
|
|
|