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

Unified Diff: headless/app/headless_shell.cc

Issue 2525903003: Add Page.stopLoading to devtools and --timeout switch to headless_shell (Closed)
Patch Set: FixPage.stopLoading command description. 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
« no previous file with comments | « content/browser/devtools/protocol/page_handler.cc ('k') | headless/app/headless_shell_switches.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: headless/app/headless_shell.cc
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index 8fc623abf91cd12c407398d651476430973552a6..8ae59f4fe7b0368e5e3c37568406b3b7b91c7c95 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -14,6 +14,7 @@
#include "base/json/json_writer.h"
#include "base/location.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
#include "base/numerics/safe_conversions.h"
#include "base/strings/string_number_conversions.h"
#include "content/public/common/content_switches.h"
@@ -64,7 +65,8 @@ class HeadlessShell : public HeadlessWebContents::Observer,
devtools_client_(HeadlessDevToolsClient::Create()),
web_contents_(nullptr),
processed_page_ready_(false),
- browser_context_(nullptr) {}
+ browser_context_(nullptr),
+ weak_factory_(this) {}
~HeadlessShell() override {}
void OnStart(HeadlessBrowser* browser) {
@@ -163,9 +165,29 @@ class HeadlessShell : public HeadlessWebContents::Observer,
} else {
PollReadyState();
}
+
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTimeout)) {
+ std::string timeout_ms_ascii =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kTimeout);
+ int timeout_ms;
+ CHECK(base::StringToInt(timeout_ms_ascii, &timeout_ms))
+ << "Expected an integer value for --timeout=";
+ browser_->BrowserMainThread()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&HeadlessShell::FetchTimeout, weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(timeout_ms));
+ }
+
// TODO(skyostil): Implement more features to demonstrate the devtools API.
}
+ void FetchTimeout() {
+ LOG(INFO) << "Timeout.";
+ devtools_client_->GetPage()->GetExperimental()->StopLoading(
+ page::StopLoadingParams::Builder().Build());
+ }
+
void OnTargetCrashed(const inspector::TargetCrashedParams& params) override {
LOG(ERROR) << "Abnormal renderer termination.";
// NB this never gets called if remote debugging is enabled.
@@ -177,7 +199,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
// be sure the expected page is ready.
devtools_client_->GetRuntime()->Evaluate(
"document.readyState + ' ' + document.location.href",
- base::Bind(&HeadlessShell::OnReadyState, base::Unretained(this)));
+ base::Bind(&HeadlessShell::OnReadyState, weak_factory_.GetWeakPtr()));
}
void OnReadyState(std::unique_ptr<runtime::EvaluateResult> result) {
@@ -236,7 +258,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
void FetchDom() {
devtools_client_->GetRuntime()->Evaluate(
"document.body.innerHTML",
- base::Bind(&HeadlessShell::OnDomFetched, base::Unretained(this)));
+ base::Bind(&HeadlessShell::OnDomFetched, weak_factory_.GetWeakPtr()));
}
void OnDomFetched(std::unique_ptr<runtime::EvaluateResult> result) {
@@ -263,8 +285,8 @@ class HeadlessShell : public HeadlessWebContents::Observer,
return;
}
devtools_client_->GetRuntime()->Evaluate(
- expression,
- base::Bind(&HeadlessShell::OnExpressionResult, base::Unretained(this)));
+ expression, base::Bind(&HeadlessShell::OnExpressionResult,
+ weak_factory_.GetWeakPtr()));
}
void OnExpressionResult(std::unique_ptr<runtime::EvaluateResult> result) {
@@ -279,7 +301,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
devtools_client_->GetPage()->GetExperimental()->CaptureScreenshot(
page::CaptureScreenshotParams::Builder().Build(),
base::Bind(&HeadlessShell::OnScreenshotCaptured,
- base::Unretained(this)));
+ weak_factory_.GetWeakPtr()));
}
void OnScreenshotCaptured(
@@ -297,7 +319,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
file_name, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
base::File::FLAG_ASYNC,
base::Bind(&HeadlessShell::OnScreenshotFileOpened,
- base::Unretained(this), base::Passed(std::move(result)),
+ weak_factory_.GetWeakPtr(), base::Passed(std::move(result)),
file_name));
if (open_result != net::ERR_IO_PENDING) {
// Operation could not be started.
@@ -324,7 +346,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
const int write_result = screenshot_file_stream_->Write(
buf.get(), buf->size(),
base::Bind(&HeadlessShell::OnScreenshotFileWritten,
- base::Unretained(this), file_name, buf->size()));
+ weak_factory_.GetWeakPtr(), file_name, buf->size()));
if (write_result != net::ERR_IO_PENDING) {
// Operation may have completed successfully or failed.
OnScreenshotFileWritten(file_name, buf->size(), write_result);
@@ -343,7 +365,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
<< std::endl;
}
int close_result = screenshot_file_stream_->Close(base::Bind(
- &HeadlessShell::OnScreenshotFileClosed, base::Unretained(this)));
+ &HeadlessShell::OnScreenshotFileClosed, weak_factory_.GetWeakPtr()));
if (close_result != net::ERR_IO_PENDING) {
// Operation could not be started.
OnScreenshotFileClosed(close_result);
@@ -367,6 +389,7 @@ class HeadlessShell : public HeadlessWebContents::Observer,
std::unique_ptr<net::FileStream> screenshot_file_stream_;
HeadlessBrowserContext* browser_context_;
std::unique_ptr<DeterministicDispatcher> deterministic_dispatcher_;
+ base::WeakPtrFactory<HeadlessShell> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(HeadlessShell);
};
« no previous file with comments | « content/browser/devtools/protocol/page_handler.cc ('k') | headless/app/headless_shell_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698