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

Unified Diff: headless/app/headless_shell.cc

Issue 2609843002: open multple tabs from CLI (Closed)
Patch Set: remove brackets Created 3 years, 11 months 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 | « no previous file | no next file » | 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 530a7c5dc3498e2d3b19d99b12c8ce6da043d47a..10a30dc56572bad433348d79bf54764b5e7d0a5a 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -106,16 +106,23 @@ class HeadlessShell : public HeadlessWebContents::Observer,
// TODO(alexclarke): Should we navigate to about:blank first if using
// virtual time?
- if (!args.empty() && !args[0].empty())
- builder.SetInitialURL(GURL(args[0]));
-
- web_contents_ = builder.Build();
- if (!web_contents_) {
- LOG(ERROR) << "Navigation failed";
- browser_->Shutdown();
- return;
+ if (args.empty())
+ args.push_back("about:blank");
+ for (auto it = args.rbegin(); it != args.rend(); ++it) {
+ GURL url(*it);
+ HeadlessWebContents* web_contents = builder.SetInitialURL(url).Build();
+ if (!web_contents) {
+ LOG(ERROR) << "Navigation to " << url << " failed";
+ browser_->Shutdown();
+ return;
+ }
+ if (!web_contents_ && !RemoteDebuggingEnabled()) {
+ // TODO(jzfeng): Support observing multiple targets.
+ url_ = url;
+ web_contents_ = web_contents;
+ web_contents_->AddObserver(this);
+ }
}
- web_contents_->AddObserver(this);
}
void Shutdown() {
@@ -138,8 +145,6 @@ class HeadlessShell : public HeadlessWebContents::Observer,
// HeadlessWebContents::Observer implementation:
void DevToolsTargetReady() override {
- if (RemoteDebuggingEnabled())
- return;
web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
devtools_client_->GetInspector()->GetExperimental()->AddObserver(this);
devtools_client_->GetPage()->AddObserver(this);
@@ -400,6 +405,41 @@ class HeadlessShell : public HeadlessWebContents::Observer,
DISALLOW_COPY_AND_ASSIGN(HeadlessShell);
};
+bool ValidateCommandLine(const base::CommandLine& command_line) {
+ if (!command_line.HasSwitch(::switches::kRemoteDebuggingPort)) {
+ if (command_line.GetArgs().size() <= 1)
+ return true;
+ LOG(ERROR) << "Open multiple tabs is only supported when the "
+ << "remote debug port is set.";
+ return false;
+ }
+ if (command_line.HasSwitch(switches::kDumpDom)) {
+ LOG(ERROR) << "Dump DOM is disabled when remote debugging is enabled.";
+ return false;
+ }
+ if (command_line.HasSwitch(switches::kRepl)) {
+ LOG(ERROR) << "Evaluate Javascript is disabled "
+ << "when remote debugging is enabled.";
+ return false;
+ }
+ if (command_line.HasSwitch(switches::kScreenshot)) {
+ LOG(ERROR) << "Capture screenshot is disabled "
+ << "when remote debugging is enabled.";
+ return false;
+ }
+ if (command_line.HasSwitch(switches::kTimeout)) {
+ LOG(ERROR) << "Navigation timeout is disabled "
+ << "when remote debugging is enabled.";
+ return false;
+ }
+ if (command_line.HasSwitch(switches::kVirtualTimeBudget)) {
+ LOG(ERROR) << "Virtual time budget is disabled "
+ << "when remote debugging is enabled.";
+ return false;
+ }
+ return true;
+}
+
int HeadlessShellMain(int argc, const char** argv) {
RunChildProcessIfNeeded(argc, argv);
HeadlessShell shell;
@@ -407,6 +447,9 @@ int HeadlessShellMain(int argc, const char** argv) {
// Enable devtools if requested.
base::CommandLine command_line(argc, argv);
+ if (!ValidateCommandLine(command_line))
+ return EXIT_FAILURE;
+
if (command_line.HasSwitch(::switches::kRemoteDebuggingPort)) {
std::string address = kDevToolsHttpServerAddress;
if (command_line.HasSwitch(switches::kRemoteDebuggingAddress)) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698