Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(319)

Unified Diff: headless/lib/browser/headless_web_contents_impl.cc

Issue 2509813006: HeadlessWebContents:Observer to observe render process exit status (Closed)
Patch Set: Make it safe to call Shutdown() Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698