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

Side by Side Diff: headless/app/headless_shell.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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <iostream> 5 #include <iostream>
6 #include <memory> 6 #include <memory>
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 112 }
113 web_contents_->AddObserver(this); 113 web_contents_->AddObserver(this);
114 } 114 }
115 115
116 void Shutdown() { 116 void Shutdown() {
117 if (!web_contents_) 117 if (!web_contents_)
118 return; 118 return;
119 if (!RemoteDebuggingEnabled()) { 119 if (!RemoteDebuggingEnabled()) {
120 devtools_client_->GetEmulation()->GetExperimental()->RemoveObserver(this); 120 devtools_client_->GetEmulation()->GetExperimental()->RemoveObserver(this);
121 devtools_client_->GetPage()->RemoveObserver(this); 121 devtools_client_->GetPage()->RemoveObserver(this);
122 web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get()); 122 if (web_contents_->GetDevToolsTarget()) {
123 web_contents_->GetDevToolsTarget()->DetachClient(
124 devtools_client_.get());
125 }
123 } 126 }
124 web_contents_->RemoveObserver(this); 127 web_contents_->RemoveObserver(this);
125 web_contents_ = nullptr; 128 web_contents_ = nullptr;
126 browser_context_->Close(); 129 browser_context_->Close();
127 browser_->Shutdown(); 130 browser_->Shutdown();
128 } 131 }
129 132
130 // HeadlessWebContents::Observer implementation: 133 // HeadlessWebContents::Observer implementation:
131 void DevToolsTargetReady() override { 134 void DevToolsTargetReady() override {
132 if (RemoteDebuggingEnabled()) 135 if (RemoteDebuggingEnabled())
(...skipping 19 matching lines...) Expand all
152 .SetPolicy(emulation::VirtualTimePolicy:: 155 .SetPolicy(emulation::VirtualTimePolicy::
153 PAUSE_IF_NETWORK_FETCHES_PENDING) 156 PAUSE_IF_NETWORK_FETCHES_PENDING)
154 .SetBudget(budget_ms) 157 .SetBudget(budget_ms)
155 .Build()); 158 .Build());
156 } else { 159 } else {
157 PollReadyState(); 160 PollReadyState();
158 } 161 }
159 // TODO(skyostil): Implement more features to demonstrate the devtools API. 162 // TODO(skyostil): Implement more features to demonstrate the devtools API.
160 } 163 }
161 164
165 void RenderProcessExited(base::TerminationStatus status,
166 int exit_code) override {
167 if (status == base::TERMINATION_STATUS_NORMAL_TERMINATION)
168 return;
169
170 LOG(ERROR) << "Abnormal renderer termination.";
171 Shutdown();
172 }
173
162 void PollReadyState() { 174 void PollReadyState() {
163 // We need to check the current location in addition to the ready state to 175 // We need to check the current location in addition to the ready state to
164 // be sure the expected page is ready. 176 // be sure the expected page is ready.
165 devtools_client_->GetRuntime()->Evaluate( 177 devtools_client_->GetRuntime()->Evaluate(
166 "document.readyState + ' ' + document.location.href", 178 "document.readyState + ' ' + document.location.href",
167 base::Bind(&HeadlessShell::OnReadyState, base::Unretained(this))); 179 base::Bind(&HeadlessShell::OnReadyState, base::Unretained(this)));
168 } 180 }
169 181
170 void OnReadyState(std::unique_ptr<runtime::EvaluateResult> result) { 182 void OnReadyState(std::unique_ptr<runtime::EvaluateResult> result) {
171 std::string ready_state_and_url; 183 std::string ready_state_and_url;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 } 441 }
430 builder.SetWindowSize(parsed_window_size); 442 builder.SetWindowSize(parsed_window_size);
431 } 443 }
432 444
433 return HeadlessBrowserMain( 445 return HeadlessBrowserMain(
434 builder.Build(), 446 builder.Build(),
435 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell))); 447 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell)));
436 } 448 }
437 449
438 } // namespace headless 450 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698