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

Unified Diff: components/safe_browsing_db/v4_protocol_manager_util.cc

Issue 1703413002: Move common PVer4 code into a V4ProtocolManagerUtil class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sync and fix compile Created 4 years, 10 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: components/safe_browsing_db/v4_protocol_manager_util.cc
diff --git a/components/safe_browsing_db/v4_protocol_manager_util.cc b/components/safe_browsing_db/v4_protocol_manager_util.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5f91bfbaab0672c2a94b56fc9208ba54f76176bf
--- /dev/null
+++ b/components/safe_browsing_db/v4_protocol_manager_util.cc
@@ -0,0 +1,86 @@
+// 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/safe_browsing_db/v4_protocol_manager_util.h"
+
+#include "base/base64.h"
+#include "base/metrics/sparse_histogram.h"
+#include "base/rand_util.h"
+#include "base/strings/stringprintf.h"
+#include "net/base/escape.h"
+
+using base::Time;
+using base::TimeDelta;
+
+namespace safe_browsing {
+
+// The Safe Browsing V4 server URL prefix.
+const char kSbV4UrlPrefix[] = "https://safebrowsing.googleapis.com/v4";
+
+// static
+// Backoff interval is MIN(((2^(n-1))*15 minutes) * (RAND + 1), 24 hours) where
+// n is the number of consecutive errors.
+base::TimeDelta V4ProtocolManagerUtil::GetNextBackOffInterval(
+ size_t* error_count,
+ size_t* multiplier) {
+ DCHECK(multiplier && error_count);
+ (*error_count)++;
+ if (*error_count > 1 && *error_count < 9) {
+ // With error count 9 and above we will hit the 24 hour max interval.
+ // Cap the multiplier here to prevent integer overflow errors.
+ *multiplier *= 2;
+ }
+ base::TimeDelta next =
+ base::TimeDelta::FromMinutes(*multiplier * (1 + base::RandDouble()) * 15);
+
+ base::TimeDelta day = base::TimeDelta::FromHours(24);
+
+ if (next < day)
+ return next;
+ else
+ return day;
+}
+
+// static
+void V4ProtocolManagerUtil::RecordHttpResponseOrErrorCode(
+ const char* metric_name,
+ const net::URLRequestStatus& status,
+ int response_code) {
+ UMA_HISTOGRAM_SPARSE_SLOWLY(
+ metric_name, status.is_success() ? response_code : status.error());
+}
+
+// static
+// The API hash call uses the pver4 Safe Browsing server.
+GURL V4ProtocolManagerUtil::GetRequestUrl(
+ const std::string& request_base64, const std::string& method_name,
+ const V4ProtocolConfig& config) {
+ std::string url =
+ ComposeUrl(kSbV4UrlPrefix, method_name, request_base64,
+ config.client_name, config.version, config.key_param);
+ return GURL(url);
+}
+
+// static
+std::string V4ProtocolManagerUtil::ComposeUrl(
+ const std::string& prefix,
+ const std::string& method,
+ const std::string& request_base64,
+ const std::string& client_id,
+ const std::string& version,
+ const std::string& key_param) {
+ DCHECK(!prefix.empty() && !method.empty() && !client_id.empty() &&
+ !version.empty());
+ std::string url =
+ base::StringPrintf("%s/%s/%s?alt=proto&client_id=%s&client_version=%s",
+ prefix.c_str(), method.c_str(), request_base64.c_str(),
+ client_id.c_str(), version.c_str());
+ if (!key_param.empty()) {
+ base::StringAppendF(&url, "&key=%s",
+ net::EscapeQueryParamValue(key_param, true).c_str());
+ }
+ return url;
+}
+
+} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698