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

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

Issue 605143002: [chromedriver] Accept git hashes in blink version strings from devtools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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/chrome/devtools_http_client.cc
diff --git a/chrome/test/chromedriver/chrome/devtools_http_client.cc b/chrome/test/chromedriver/chrome/devtools_http_client.cc
index 9397872852f2c52be9c78fd6fb46a4586b4074fd..952924baac003453cb4a341cfbd665d3af88c124 100644
--- a/chrome/test/chromedriver/chrome/devtools_http_client.cc
+++ b/chrome/test/chromedriver/chrome/devtools_http_client.cc
@@ -9,6 +9,7 @@
#include "base/json/json_reader.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/threading/platform_thread.h"
#include "base/time/time.h"
@@ -73,68 +74,16 @@ DevToolsHttpClient::~DevToolsHttpClient() {}
Status DevToolsHttpClient::Init(const base::TimeDelta& timeout) {
base::TimeTicks deadline = base::TimeTicks::Now() + timeout;
- std::string browser_version;
- std::string blink_version;
+ std::string version_url = server_url_ + "/json/version";
+ std::string data;
- while (true) {
- Status status = GetVersion(&browser_version, &blink_version);
- if (status.IsOk())
- break;
- if (status.code() != kChromeNotReachable ||
- base::TimeTicks::Now() > deadline) {
- return status;
- }
+ while (!FetchUrlAndLog(version_url, context_getter_.get(), &data)) {
stgao 2014/09/29 23:09:54 I see once the returned data is empty. Add "|| dat
samuong 2014/09/30 04:03:49 Done.
+ if (base::TimeTicks::Now() > deadline)
+ return Status(kChromeNotReachable);
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50));
}
- // |blink_version| is should look something like "537.36 (@159105)", and for
- // this example |blink_revision| should be 159105
- size_t before = blink_version.find('@');
- size_t after = blink_version.find(')');
- if (before == std::string::npos || after == std::string::npos) {
- return Status(kUnknownError,
- "unrecognized Blink version: " + blink_version);
- }
-
- std::string blink_revision_string = blink_version.substr(before + 1,
- after - before - 1);
- int blink_revision_int;
- if (!base::StringToInt(blink_revision_string, &blink_revision_int)) {
- return Status(kUnknownError,
- "unrecognized Blink revision: " + blink_revision_string);
- }
-
- browser_info_.blink_revision = blink_revision_int;
-
- if (browser_version.empty()) {
- browser_info_.browser_name = "content shell";
- return Status(kOk);
- }
- if (browser_version.find("Version/") == 0u) {
- browser_info_.browser_name = "webview";
- return Status(kOk);
- }
- std::string prefix = "Chrome/";
- if (browser_version.find(prefix) != 0u) {
- return Status(kUnknownError,
- "unrecognized Chrome version: " + browser_version);
- }
-
- std::string stripped_version = browser_version.substr(prefix.length());
- int temp_build_no;
- std::vector<std::string> version_parts;
- base::SplitString(stripped_version, '.', &version_parts);
- if (version_parts.size() != 4 ||
- !base::StringToInt(version_parts[2], &temp_build_no)) {
- return Status(kUnknownError,
- "unrecognized Chrome version: " + browser_version);
- }
-
- browser_info_.browser_name = "chrome";
- browser_info_.browser_version = stripped_version;
- browser_info_.build_no = temp_build_no;
-
- return Status(kOk);
+ return internal::ParseBrowserInfo(data, &browser_info_);
}
Status DevToolsHttpClient::GetWebViewsInfo(WebViewsInfo* views_info) {
@@ -195,16 +144,6 @@ const DeviceMetrics* DevToolsHttpClient::device_metrics() {
return device_metrics_.get();
}
-Status DevToolsHttpClient::GetVersion(std::string* browser_version,
- std::string* blink_version) {
- std::string data;
- if (!FetchUrlAndLog(
- server_url_ + "/json/version", context_getter_.get(), &data))
- return Status(kChromeNotReachable);
-
- return internal::ParseVersionInfo(data, browser_version, blink_version);
-}
-
Status DevToolsHttpClient::CloseFrontends(const std::string& for_client_id) {
WebViewsInfo views_info;
Status status = GetWebViewsInfo(&views_info);
@@ -343,26 +282,97 @@ Status ParseWebViewsInfo(const std::string& data,
return Status(kOk);
}
-Status ParseVersionInfo(const std::string& data,
- std::string* browser_version,
- std::string* blink_version) {
+Status ParseBrowserInfo(const std::string& data, BrowserInfo* browser_info) {
scoped_ptr<base::Value> value(base::JSONReader::Read(data));
if (!value.get())
return Status(kUnknownError, "version info not in JSON");
+
base::DictionaryValue* dict;
if (!value->GetAsDictionary(&dict))
return Status(kUnknownError, "version info not a dictionary");
- if (!dict->GetString("Browser", browser_version)) {
- return Status(
- kUnknownError,
- "Chrome version must be >= " + GetMinimumSupportedChromeVersion(),
- Status(kUnknownError, "version info doesn't include string 'Browser'"));
+
+ std::string browser;
+ if (!dict->GetString("Browser", &browser)) {
+ return Status(kUnknownError,
+ "version info doesn't include string 'Browser'");
}
- if (!dict->GetString("WebKit-Version", blink_version)) {
+
+ std::string blink_version;
+ if (!dict->GetString("WebKit-Version", &blink_version)) {
return Status(kUnknownError,
"version info doesn't include string 'WebKit-Version'");
}
+
+ Status status = internal::ParseBrowserString(browser,
+ &browser_info->browser_name,
+ &browser_info->browser_version,
+ &browser_info->build_no);
+
+ if (status.IsError())
+ return status;
+
+ return internal::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) {
+ if (browser_string.empty()) {
+ *browser_name = "content shell";
+ return Status(kOk);
+ }
+
+ if (browser_string.find("Version/") == 0u) {
+ *browser_name = "webview";
+ return Status(kOk);
+ }
+
+ std::string prefix = "Chrome/";
+ if (browser_string.find(prefix) == 0u) {
+ *browser_name = std::string("chrome");
stgao 2014/09/29 23:09:54 remove std::string?
samuong 2014/09/30 04:03:49 Done.
+ *browser_version = browser_string.substr(prefix.length());
+
+ std::vector<std::string> version_parts;
+ base::SplitString(*browser_version, '.', &version_parts);
+ if (version_parts.size() != 4 ||
+ !base::StringToInt(version_parts[2], build_no)) {
+ return Status(kUnknownError,
+ "unrecognized Chrome version: " + *browser_version);
+ }
+
+ return Status(kOk);
+ }
+
+ return Status(kUnknownError,
+ "unrecognized Chrome version: " + browser_string);
+}
+
+Status ParseBlinkVersionString(const std::string& blink_version,
+ int* blink_revision) {
+ size_t before = blink_version.find('@');
+ size_t after = blink_version.find(')');
+ if (before == std::string::npos || after == std::string::npos) {
+ return Status(kUnknownError,
+ "unrecognized Blink version string: " + blink_version);
+ }
+
+ // Chrome OS reports its Blink revision as a (non-abbreviated) git hash. In
+ // this case, ignore it and use the default blink revision, otherwise convert
stgao 2014/09/29 23:09:54 Will using the default blink revision support back
samuong 2014/09/30 04:03:48 This is just the code to parse the version json an
+ // the svn revision number to an int.
+ std::string revision = blink_version.substr(before + 1, after - before - 1);
+ if (!IsGitHash(revision) && !base::StringToInt(revision, blink_revision)) {
+ return Status(kUnknownError, "unrecognized Blink revision: " + revision);
+ }
+
return Status(kOk);
}
+bool IsGitHash(const std::string& revision) {
+ const int kGitHashLength = 40;
stgao 2014/09/29 23:09:54 Constant variable could be defined outside of meth
samuong 2014/09/30 04:03:48 Is there any reason you prefer this? Defining it i
stgao 2014/09/30 18:13:37 The style guide says it is optional, not required.
+ return revision.size() == kGitHashLength
+ && base::ContainsOnlyChars(revision, "0123456789abcdef");
stgao 2014/09/29 23:09:54 Does the function test with uppercase and lowercas
samuong 2014/09/30 04:03:48 Done.
+}
+
} // namespace internal

Powered by Google App Engine
This is Rietveld 408576698