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

Unified Diff: chrome/test/chromedriver/capabilities.cc

Issue 288193004: [Chromedriver] Add Device Metrics override support to ChromeDriver via Capabilities (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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
Index: chrome/test/chromedriver/capabilities.cc
diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc
index 518af52734a45f9c3537650db4f25ebdcaa5986d..b6fb0a500f67b86c99d89a6b650bcdc7d1baafcb 100644
--- a/chrome/test/chromedriver/capabilities.cc
+++ b/chrome/test/chromedriver/capabilities.cc
@@ -17,6 +17,7 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/mobile_device.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/logging.h"
#include "net/base/net_util.h"
@@ -84,6 +85,70 @@ Status ParseLogPath(const base::Value& option, Capabilities* capabilities) {
return Status(kOk);
}
+Status ParseDeviceName(std::string device_name, Capabilities* capabilities) {
+ scoped_ptr<MobileDevice> device;
+ Status status = FindMobileDevice(device_name, &device);
+
+ if (status.IsError()) {
+ return Status(kUnknownError,
+ "'" + device_name + "' must be a valid device",
+ status);
+ }
+
+ capabilities->device_metrics.reset(device->device_metrics.release());
+ capabilities->switches.SetSwitch("user-agent", device->user_agent);
+
+ return Status(kOk);
+}
+
+Status ParseMobileEmulation(const base::Value& option,
+ Capabilities* capabilities) {
+ const base::DictionaryValue* mobile_emulation;
+ if (!option.GetAsDictionary(&mobile_emulation))
+ return Status(kUnknownError, "'mobileEmulation' must be a dictionary");
+
+ if (mobile_emulation->HasKey("deviceName")) {
+ // Cannot use any other options with deviceName.
+ if (mobile_emulation->size() > 1)
+ return Status(kUnknownError, "'deviceName' must be used alone");
+
+ std::string device_name;
+ if (!mobile_emulation->GetString("deviceName", &device_name))
+ return Status(kUnknownError, "'deviceName' must be a string");
+
+ return ParseDeviceName(device_name, capabilities);
+ }
+
+ if (mobile_emulation->HasKey("deviceMetrics")) {
+ const base::DictionaryValue* metrics;
+ if (!mobile_emulation->GetDictionary("deviceMetrics", &metrics))
+ return Status(kUnknownError, "'deviceMetrics' must be a dictionary");
+
+ int width;
+ int height;
+ double device_scale_factor;
+ if (!metrics->GetInteger("width", &width) ||
+ !metrics->GetInteger("height", &height) ||
+ !metrics->GetDouble("pixelRatio", &device_scale_factor))
+ return Status(kUnknownError, "invalid 'deviceMetrics'");
+
+ DeviceMetrics* device_metrics =
+ new DeviceMetrics(width, height, device_scale_factor);
+ capabilities->device_metrics =
+ scoped_ptr<DeviceMetrics>(device_metrics);
+ }
+
+ if (mobile_emulation->HasKey("userAgent")) {
+ std::string user_agent;
+ if (!mobile_emulation->GetString("userAgent", &user_agent))
+ return Status(kUnknownError, "'userAgent' must be a string");
+
+ capabilities->switches.SetSwitch("user-agent", user_agent);
+ }
+
+ return Status(kOk);
+}
+
Status ParseSwitches(const base::Value& option,
Capabilities* capabilities) {
const base::ListValue* switches_list = NULL;
@@ -272,6 +337,7 @@ Status ParseChromeOptions(
parser_map["args"] = base::Bind(&ParseSwitches);
parser_map["binary"] = base::Bind(&ParseFilePath, &capabilities->binary);
parser_map["detach"] = base::Bind(&ParseBoolean, &capabilities->detach);
+ parser_map["mobileEmulation"] = base::Bind(&ParseMobileEmulation);
parser_map["excludeSwitches"] = base::Bind(&ParseExcludeSwitches);
parser_map["extensions"] = base::Bind(&ParseExtensions);
parser_map["forceDevToolsScreenshot"] = base::Bind(

Powered by Google App Engine
This is Rietveld 408576698