Index: chrome/test/chromedriver/capabilities.cc |
diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc |
index b30e871d4ba898f70603ca2b36c314b562375457..ad11603a46d540352b47c4b18e2fc64d467dcfbf 100644 |
--- a/chrome/test/chromedriver/capabilities.cc |
+++ b/chrome/test/chromedriver/capabilities.cc |
@@ -302,6 +302,48 @@ Status ParseLoggingPrefs(const base::Value& option, |
return Status(kOk); |
} |
+Status ParseInspectorDomainStatus( |
+ PerfLoggingPrefs::InspectorDomainStatus* to_set, |
+ const base::Value& option, |
+ Capabilities* capabilities) { |
+ bool desired_value; |
+ if (!option.GetAsBoolean(&desired_value)) |
+ return Status(kUnknownError, "must be a boolean"); |
+ if (desired_value) |
+ *to_set = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyEnabled; |
+ else |
+ *to_set = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyDisabled; |
+ return Status(kOk); |
+} |
+ |
+Status ParsePerfLoggingPrefs(const base::Value& option, |
+ Capabilities* capabilities) { |
+ const base::DictionaryValue* perf_logging_prefs = NULL; |
+ if (!option.GetAsDictionary(&perf_logging_prefs)) |
+ return Status(kUnknownError, "must be a dictionary"); |
+ |
+ std::map<std::string, Parser> parser_map; |
+ parser_map["enableNetwork"] = base::Bind( |
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.network); |
+ parser_map["enablePage"] = base::Bind( |
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.page); |
+ parser_map["enableTimeline"] = base::Bind( |
+ &ParseInspectorDomainStatus, &capabilities->perf_logging_prefs.timeline); |
+ parser_map["traceCategories"] = base::Bind( |
+ &ParseString, &capabilities->perf_logging_prefs.trace_categories); |
+ |
+ for (base::DictionaryValue::Iterator it(*perf_logging_prefs); !it.IsAtEnd(); |
+ it.Advance()) { |
+ if (parser_map.find(it.key()) == parser_map.end()) |
+ return Status(kUnknownError, "unrecognized performance logging " |
+ "option: " + it.key()); |
+ Status status = parser_map[it.key()].Run(it.value(), capabilities); |
+ if (status.IsError()) |
+ return Status(kUnknownError, "cannot parse " + it.key(), status); |
+ } |
+ return Status(kOk); |
+} |
+ |
Status ParseChromeOptions( |
const base::Value& capability, |
Capabilities* capabilities) { |
@@ -318,6 +360,9 @@ Status ParseChromeOptions( |
parser_map["args"] = base::Bind(&IgnoreCapability); |
parser_map["binary"] = base::Bind(&IgnoreCapability); |
parser_map["extensions"] = base::Bind(&IgnoreCapability); |
+ |
+ parser_map["perfLoggingPrefs"] = base::Bind(&ParsePerfLoggingPrefs); |
+ |
if (is_android) { |
parser_map["androidActivity"] = |
base::Bind(&ParseString, &capabilities->android_activity); |
@@ -473,6 +518,14 @@ std::string Switches::ToString() const { |
return str; |
} |
+PerfLoggingPrefs::PerfLoggingPrefs() |
+ : network(InspectorDomainStatus::kDefaultEnabled), |
+ page(InspectorDomainStatus::kDefaultEnabled), |
+ timeline(InspectorDomainStatus::kDefaultEnabled), |
+ trace_categories() {} |
+ |
+PerfLoggingPrefs::~PerfLoggingPrefs() {} |
+ |
Capabilities::Capabilities() |
: android_use_running_app(false), |
detach(false), |
@@ -504,5 +557,16 @@ Status Capabilities::Parse(const base::DictionaryValue& desired_caps) { |
} |
} |
} |
+ // Perf log must be enabled if perf log prefs are specified; otherwise, error. |
+ LoggingPrefs::const_iterator iter = logging_prefs.find( |
+ WebDriverLog::kPerformanceType); |
+ if (iter == logging_prefs.end() || iter->second == Log::kOff) { |
+ const base::DictionaryValue* chrome_options = NULL; |
+ if (desired_caps.GetDictionary("chromeOptions", &chrome_options) && |
+ chrome_options->HasKey("perfLoggingPrefs")) { |
+ return Status(kUnknownError, "perfLoggingPrefs specified, " |
+ "but performance logging was not enabled"); |
+ } |
+ } |
return Status(kOk); |
} |