Commit 871f9311 authored by Tricia Crichton's avatar Tricia Crichton Committed by Commit Bot

[ChromeDriver] Apply Mobile Emulation in SwitchToWindow

When running in mobile emulation mode, SwitchToWindow will apply
mobile emulation mode the the new window or tab. Wrap setup of
headless_download_dir in a check that the browser is in headless mode,
so that headless_download_dir is only set for headless mode. Add
is_headless flag for browser_info to enable simpler checking for
headless state.

Bug: chromedriver:2126
Change-Id: I2134a824c58f1017ab30f2d034e53b7c6d59a7bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1774902
Commit-Queue: Tricia Crichton <triciac@chromium.org>
Reviewed-by: default avatarJohn Chen <johnchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691777}
parent 9ab9ab5c
...@@ -28,8 +28,8 @@ BrowserInfo::BrowserInfo() ...@@ -28,8 +28,8 @@ BrowserInfo::BrowserInfo()
: major_version(0), : major_version(0),
build_no(kToTBuildNo), build_no(kToTBuildNo),
blink_revision(kToTBlinkRevision), blink_revision(kToTBlinkRevision),
is_android(false) { is_android(false),
} is_headless(false) {}
BrowserInfo::~BrowserInfo() {} BrowserInfo::~BrowserInfo() {}
...@@ -98,10 +98,12 @@ Status ParseBrowserString(bool has_android_package, ...@@ -98,10 +98,12 @@ Status ParseBrowserString(bool has_android_package,
return status; return status;
if (build_no != 0) { if (build_no != 0) {
if (headless) if (headless) {
browser_info->browser_name = "headless chrome"; browser_info->browser_name = "headless chrome";
else browser_info->is_headless = true;
} else {
browser_info->browser_name = "chrome"; browser_info->browser_name = "chrome";
}
browser_info->browser_version = version; browser_info->browser_version = version;
browser_info->build_no = build_no; browser_info->build_no = build_no;
return Status(kOk); return Status(kOk);
......
...@@ -29,6 +29,7 @@ struct BrowserInfo { ...@@ -29,6 +29,7 @@ struct BrowserInfo {
int build_no; int build_no;
int blink_revision; int blink_revision;
bool is_android; bool is_android;
bool is_headless;
}; };
Status ParseBrowserInfo(const std::string& data, Status ParseBrowserInfo(const std::string& data,
......
...@@ -39,6 +39,7 @@ TEST(ParseBrowserInfo, BlinkVersionContainsSvnRevision) { ...@@ -39,6 +39,7 @@ TEST(ParseBrowserInfo, BlinkVersionContainsSvnRevision) {
ASSERT_EQ(37, browser_info.major_version); ASSERT_EQ(37, browser_info.major_version);
ASSERT_EQ(2062, browser_info.build_no); ASSERT_EQ(2062, browser_info.build_no);
ASSERT_EQ(181352, browser_info.blink_revision); ASSERT_EQ(181352, browser_info.blink_revision);
ASSERT_FALSE(browser_info.is_headless);
} }
TEST(ParseBrowserInfo, BlinkVersionContainsGitHash) { TEST(ParseBrowserInfo, BlinkVersionContainsGitHash) {
...@@ -66,6 +67,7 @@ TEST(ParseBrowserString, KitKatWebView) { ...@@ -66,6 +67,7 @@ TEST(ParseBrowserString, KitKatWebView) {
ASSERT_EQ(30, browser_info.major_version); ASSERT_EQ(30, browser_info.major_version);
ASSERT_EQ(kToTBuildNo, browser_info.build_no); ASSERT_EQ(kToTBuildNo, browser_info.build_no);
ASSERT_TRUE(browser_info.is_android); ASSERT_TRUE(browser_info.is_android);
ASSERT_FALSE(browser_info.is_headless);
} }
TEST(ParseBrowserString, LollipopWebView) { TEST(ParseBrowserString, LollipopWebView) {
...@@ -77,6 +79,7 @@ TEST(ParseBrowserString, LollipopWebView) { ...@@ -77,6 +79,7 @@ TEST(ParseBrowserString, LollipopWebView) {
ASSERT_EQ(37, browser_info.major_version); ASSERT_EQ(37, browser_info.major_version);
ASSERT_EQ(kToTBuildNo, browser_info.build_no); ASSERT_EQ(kToTBuildNo, browser_info.build_no);
ASSERT_TRUE(browser_info.is_android); ASSERT_TRUE(browser_info.is_android);
ASSERT_FALSE(browser_info.is_headless);
} }
TEST(ParseBrowserString, AndroidChrome) { TEST(ParseBrowserString, AndroidChrome) {
...@@ -89,6 +92,7 @@ TEST(ParseBrowserString, AndroidChrome) { ...@@ -89,6 +92,7 @@ TEST(ParseBrowserString, AndroidChrome) {
ASSERT_EQ(39, browser_info.major_version); ASSERT_EQ(39, browser_info.major_version);
ASSERT_EQ(2171, browser_info.build_no); ASSERT_EQ(2171, browser_info.build_no);
ASSERT_TRUE(browser_info.is_android); ASSERT_TRUE(browser_info.is_android);
ASSERT_FALSE(browser_info.is_headless);
} }
TEST(ParseBrowserString, DesktopChrome) { TEST(ParseBrowserString, DesktopChrome) {
...@@ -101,6 +105,7 @@ TEST(ParseBrowserString, DesktopChrome) { ...@@ -101,6 +105,7 @@ TEST(ParseBrowserString, DesktopChrome) {
ASSERT_EQ(39, browser_info.major_version); ASSERT_EQ(39, browser_info.major_version);
ASSERT_EQ(2171, browser_info.build_no); ASSERT_EQ(2171, browser_info.build_no);
ASSERT_FALSE(browser_info.is_android); ASSERT_FALSE(browser_info.is_android);
ASSERT_FALSE(browser_info.is_headless);
} }
TEST(ParseBrowserString, HeadlessChrome) { TEST(ParseBrowserString, HeadlessChrome) {
...@@ -113,6 +118,7 @@ TEST(ParseBrowserString, HeadlessChrome) { ...@@ -113,6 +118,7 @@ TEST(ParseBrowserString, HeadlessChrome) {
ASSERT_EQ(39, browser_info.major_version); ASSERT_EQ(39, browser_info.major_version);
ASSERT_EQ(2171, browser_info.build_no); ASSERT_EQ(2171, browser_info.build_no);
ASSERT_FALSE(browser_info.is_android); ASSERT_FALSE(browser_info.is_android);
ASSERT_TRUE(browser_info.is_headless);
} }
TEST(ParseBlinkVersionString, GitHash) { TEST(ParseBlinkVersionString, GitHash) {
......
...@@ -172,7 +172,7 @@ WebViewImpl::WebViewImpl(const std::string& id, ...@@ -172,7 +172,7 @@ WebViewImpl::WebViewImpl(const std::string& id,
// Page.setDownloadBehavior. This is handled by the // Page.setDownloadBehavior. This is handled by the
// DownloadDirectoryOverrideManager, which is only instantiated // DownloadDirectoryOverrideManager, which is only instantiated
// in headless chrome. // in headless chrome.
if (browser_info->browser_name == "headless chrome") if (browser_info->is_headless)
download_directory_override_manager_ = download_directory_override_manager_ =
std::make_unique<DownloadDirectoryOverrideManager>(client_.get()); std::make_unique<DownloadDirectoryOverrideManager>(client_.get());
client_->SetOwner(this); client_->SetOwner(this);
......
...@@ -314,20 +314,22 @@ Status InitSessionHelper(const InitSessionParams& bound_params, ...@@ -314,20 +314,22 @@ Status InitSessionHelper(const InitSessionParams& bound_params,
session->capabilities = session->capabilities =
CreateCapabilities(session, capabilities, *desired_caps); CreateCapabilities(session, capabilities, *desired_caps);
std::string download_directory; if (session->chrome->GetBrowserInfo()->is_headless) {
if (capabilities.prefs && std::string download_directory;
capabilities.prefs->GetString("download.default_directory", if (capabilities.prefs &&
&download_directory)) capabilities.prefs->GetString("download.default_directory",
session->headless_download_directory = &download_directory))
std::make_unique<std::string>(download_directory); session->headless_download_directory =
else std::make_unique<std::string>(download_directory);
session->headless_download_directory = std::make_unique<std::string>("."); else
WebView* first_view; session->headless_download_directory = std::make_unique<std::string>(".");
session->chrome->GetWebViewById(session->window, &first_view); WebView* first_view;
status = first_view->OverrideDownloadDirectoryIfNeeded( session->chrome->GetWebViewById(session->window, &first_view);
*session->headless_download_directory); status = first_view->OverrideDownloadDirectoryIfNeeded(
if (status.IsError()) *session->headless_download_directory);
return status; if (status.IsError())
return status;
}
if (session->w3c_compliant) { if (session->w3c_compliant) {
std::unique_ptr<base::DictionaryValue> capabilities = std::unique_ptr<base::DictionaryValue> capabilities =
...@@ -769,6 +771,16 @@ Status ExecuteSwitchToWindow(Session* session, ...@@ -769,6 +771,16 @@ Status ExecuteSwitchToWindow(Session* session,
return status; return status;
} }
if (session->chrome->IsMobileEmulationEnabled()) {
WebView* web_view;
Status status = session->chrome->GetWebViewById(web_view_id, &web_view);
if (status.IsError())
return status;
status = web_view->ConnectIfNecessary();
if (status.IsError())
return status;
}
status = session->chrome->ActivateWebView(web_view_id); status = session->chrome->ActivateWebView(web_view_id);
if (status.IsError()) if (status.IsError())
return status; return status;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment