Index: components/data_reduction_proxy/core/common/data_reduction_proxy_util.cc |
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_util.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_util.cc |
index b691faf0b538ca80680385d7c864e1e4b942d37e..043664b7713b972702d5464835cdd0b9505e7e09 100644 |
--- a/components/data_reduction_proxy/core/common/data_reduction_proxy_util.cc |
+++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_util.cc |
@@ -1,37 +1,101 @@ |
// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/time/time.h" |
+#include "base/version.h" |
+#include "components/data_reduction_proxy/core/common/version.h" |
#include "net/base/url_util.h" |
#include "net/proxy/proxy_config.h" |
#include "net/proxy/proxy_info.h" |
#if defined(USE_GOOGLE_API_KEYS) |
#include "google_apis/google_api_keys.h" |
#endif |
namespace data_reduction_proxy { |
namespace { |
#if defined(USE_GOOGLE_API_KEYS) |
// Used in all Data Reduction Proxy URLs to specify API Key. |
const char kApiKeyName[] = "key"; |
#endif |
} // namespace |
namespace util { |
+const char* ChromiumVersion() { |
+ // Assert at compile time that the Chromium version is at least somewhat |
+ // properly formed, e.g. the version string is at least as long as "0.0.0.0", |
+ // and starts and ends with numeric digits. This is to prevent another |
+ // regression like http://crbug.com/595471. |
+ static_assert(arraysize(PRODUCT_VERSION) >= arraysize("0.0.0.0") && |
+ '0' <= PRODUCT_VERSION[0] && PRODUCT_VERSION[0] <= '9' && |
+ '0' <= PRODUCT_VERSION[arraysize(PRODUCT_VERSION) - 2] && |
+ PRODUCT_VERSION[arraysize(PRODUCT_VERSION) - 2] <= '9', |
+ "PRODUCT_VERSION must be a string of the form " |
+ "'MAJOR.MINOR.BUILD.PATCH', e.g. '1.2.3.4'. " |
+ "PRODUCT_VERSION='" PRODUCT_VERSION "' is badly formed."); |
+ |
+ return PRODUCT_VERSION; |
+} |
+ |
+void GetChromiumBuildAndPatch(const std::string& version_string, |
+ std::string* build, |
+ std::string* patch) { |
+ base::Version version(version_string); |
+ DCHECK(version.IsValid()); |
+ DCHECK_EQ(4U, version.components().size()); |
+ |
+ *build = base::Uint64ToString(version.components()[2]); |
+ *patch = base::Uint64ToString(version.components()[3]); |
+} |
+ |
+const char* GetStringForClient(Client client) { |
+ switch (client) { |
+ case Client::UNKNOWN: |
+ return ""; |
+ case Client::CRONET_ANDROID: |
+ return "cronet"; |
+ case Client::WEBVIEW_ANDROID: |
+ return "webview"; |
+ case Client::CHROME_ANDROID: |
+ return "android"; |
+ case Client::CHROME_IOS: |
+ return "ios"; |
+ case Client::CHROME_MAC: |
+ return "mac"; |
+ case Client::CHROME_CHROMEOS: |
+ return "chromeos"; |
+ case Client::CHROME_LINUX: |
+ return "linux"; |
+ case Client::CHROME_WINDOWS: |
+ return "win"; |
+ case Client::CHROME_FREEBSD: |
+ return "freebsd"; |
+ case Client::CHROME_OPENBSD: |
+ return "openbsd"; |
+ case Client::CHROME_SOLARIS: |
+ return "solaris"; |
+ case Client::CHROME_QNX: |
+ return "qnx"; |
+ default: |
+ NOTREACHED(); |
+ return ""; |
+ } |
+} |
+ |
bool IsMethodIdempotent(const std::string& method) { |
return method == "GET" || method == "OPTIONS" || method == "HEAD" || |
method == "PUT" || method == "DELETE" || method == "TRACE"; |
} |
GURL AddApiKeyToUrl(const GURL& url) { |
GURL new_url = url; |
#if defined(USE_GOOGLE_API_KEYS) |
std::string api_key = google_apis::GetAPIKey(); |
if (google_apis::HasKeysConfigured() && !api_key.empty()) { |