Index: headless/app/headless_shell.cc |
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc |
index 530a7c5dc3498e2d3b19d99b12c8ce6da043d47a..38eebb00397df32d5b2bd59eb2c2cf37f6608fc9 100644 |
--- a/headless/app/headless_shell.cc |
+++ b/headless/app/headless_shell.cc |
@@ -104,17 +104,24 @@ class HeadlessShell : public HeadlessWebContents::Observer, |
base::CommandLine::StringVector args = |
base::CommandLine::ForCurrentProcess()->GetArgs(); |
- // 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"; |
+ if (!MultiTabsCheckPassed(args.size())) { |
Eric Seckler
2017/01/10 17:42:30
nit: Can we move this to HeadlessShellMain() befor
jzfeng
2017/01/11 12:00:27
Good point. Done.
|
browser_->Shutdown(); |
return; |
} |
+ // TODO(alexclarke): Should we navigate to about:blank first if using |
+ // virtual time? |
+ if (args.empty()) { |
+ args.push_back("about:blank"); |
+ } |
+ for (auto it = args.rbegin(); it != args.rend(); ++it) { |
+ url_ = GURL(*it); |
Eric Seckler
2017/01/10 17:42:30
Good spot, seems like we didn't set url_ correctly
jzfeng
2017/01/11 12:00:27
By experiment, I found the tab order on the Inspec
|
+ web_contents_ = builder.SetInitialURL(url_).Build(); |
+ if (!web_contents_) { |
+ LOG(ERROR) << "Navigation to " << url_ << " failed"; |
+ browser_->Shutdown(); |
+ return; |
+ } |
+ } |
web_contents_->AddObserver(this); |
Eric Seckler
2017/01/10 17:42:30
I think this is a rather temporary solution, since
|
} |
@@ -386,6 +393,28 @@ class HeadlessShell : public HeadlessWebContents::Observer, |
return command_line.HasSwitch(::switches::kRemoteDebuggingPort); |
} |
+ bool MultiTabsCheckPassed(const int tab_number) const { |
Sami
2017/01/11 11:32:37
nit: I'm not sure what the method name is saying.
jzfeng
2017/01/11 12:00:27
I moved this function to HeadlessShellMain and cha
alex clarke (OOO till 29th)
2017/01/11 12:03:39
One rule of thumb, any type of integer or floating
|
+ if (tab_number < 2 || RemoteDebuggingEnabled()) { |
+ return true; |
+ } |
+ const base::CommandLine& command_line = |
+ *base::CommandLine::ForCurrentProcess(); |
+ if (command_line.HasSwitch(switches::kDumpDom)) { |
Eric Seckler
2017/01/10 17:42:30
Actually, I think at the moment, we kinda require
jzfeng
2017/01/11 12:00:27
Done.
|
+ LOG(ERROR) << "Dump dom is not supported for multiple tabs."; |
Sami
2017/01/11 11:32:37
nit: s/dom/DOM/
jzfeng
2017/01/11 12:00:27
Done.
|
+ return false; |
+ } |
+ if (command_line.HasSwitch(switches::kRepl)) { |
+ LOG(ERROR) << "Evaluate Javascript is not supported for multiple tabs."; |
+ return false; |
+ } |
+ if (command_line.HasSwitch(switches::kScreenshot)) { |
+ // TODO(jzfeng): Add support for multiple tabs in the future. |
+ LOG(ERROR) << "Capture screenshot is not supported for multiple tabs."; |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
private: |
GURL url_; |
HeadlessBrowser* browser_; // Not owned. |