Index: chrome/test/chromedriver/chrome/browser_info.cc |
diff --git a/chrome/test/chromedriver/chrome/browser_info.cc b/chrome/test/chromedriver/chrome/browser_info.cc |
index d62e90db49c09f995222275bcfe666133bbb8f28..bd7f3094dc38dd12fd506d943128c12a7505f6fa 100644 |
--- a/chrome/test/chromedriver/chrome/browser_info.cc |
+++ b/chrome/test/chromedriver/chrome/browser_info.cc |
@@ -37,54 +37,53 @@ Status ParseBrowserInfo(const std::string& data, BrowserInfo* browser_info) { |
if (!value->GetAsDictionary(&dict)) |
return Status(kUnknownError, "version info not a dictionary"); |
- std::string browser; |
- if (!dict->GetString("Browser", &browser)) { |
- return Status(kUnknownError, |
- "version info doesn't include string 'Browser'"); |
- } |
- |
- std::string blink_version; |
- if (!dict->GetString("WebKit-Version", &blink_version)) { |
- return Status(kUnknownError, |
- "version info doesn't include string 'WebKit-Version'"); |
- } |
- |
- Status status = ParseBrowserString(browser, &browser_info->browser_name, |
- &browser_info->browser_version, &browser_info->build_no); |
+ bool is_android = dict->HasKey("Android-Package"); |
+ std::string browser_string; |
+ if (!dict->GetString("Browser", &browser_string)) |
+ return Status(kUnknownError, "version doesn't include 'Browser'"); |
+ Status status = ParseBrowserString(is_android, browser_string, browser_info); |
if (status.IsError()) |
return status; |
+ std::string blink_version; |
+ if (!dict->GetString("WebKit-Version", &blink_version)) |
+ return Status(kUnknownError, "version doesn't include 'WebKit-Version'"); |
+ |
return ParseBlinkVersionString(blink_version, &browser_info->blink_revision); |
} |
-Status ParseBrowserString(const std::string& browser_string, |
- std::string* browser_name, |
- std::string* browser_version, |
- int* build_no) { |
+Status ParseBrowserString(bool is_android, |
+ const std::string& browser_string, |
+ BrowserInfo* browser_info) { |
if (browser_string.empty()) { |
- *browser_name = "content shell"; |
- return Status(kOk); |
- } |
- |
- if (browser_string.find("Version/") == 0u) { |
- *browser_name = "webview"; |
+ browser_info->browser_name = "content shell"; |
return Status(kOk); |
} |
std::string prefix = "Chrome/"; |
+ int build_no = 0; |
if (browser_string.find(prefix) == 0u) { |
- *browser_name = "chrome"; |
- *browser_version = browser_string.substr(prefix.length()); |
- |
+ std::string version = browser_string.substr(prefix.length()); |
std::vector<std::string> version_parts; |
- base::SplitString(*browser_version, '.', &version_parts); |
+ base::SplitString(version, '.', &version_parts); |
+ |
if (version_parts.size() != 4 || |
- !base::StringToInt(version_parts[2], build_no)) { |
- return Status(kUnknownError, |
- "unrecognized Chrome version: " + *browser_version); |
+ !base::StringToInt(version_parts[2], &build_no)) { |
+ return Status(kUnknownError, "unrecognized Chrome version: " + version); |
+ } |
+ |
+ if (build_no != 0) { |
+ browser_info->browser_name = "chrome"; |
+ browser_info->browser_version = browser_string.substr(prefix.length()); |
+ browser_info->build_no = build_no; |
+ return Status(kOk); |
} |
+ } |
+ if (browser_string.find("Version/") == 0u || // KitKat |
+ (is_android && build_no == 0)) { // Lollipop |
+ browser_info->browser_name = "webview"; |
return Status(kOk); |
} |