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

Unified Diff: chrome/browser/safe_browsing/protocol_manager.cc

Issue 1543153002: Add a GetFullHashWithApis method to Protocol Manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typo Created 5 years 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/browser/safe_browsing/protocol_manager.cc
diff --git a/chrome/browser/safe_browsing/protocol_manager.cc b/chrome/browser/safe_browsing/protocol_manager.cc
index e746763c7b99f505bc0fe58d20cf5e651e4ab2ed..fa39ba9c8ec61f42d9649e90810a1dfc9ff3861b 100644
--- a/chrome/browser/safe_browsing/protocol_manager.cc
+++ b/chrome/browser/safe_browsing/protocol_manager.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/safe_browsing/protocol_manager.h"
+#include "base/base64.h"
#include "base/environment.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
@@ -17,6 +18,7 @@
#include "base/timer/timer.h"
#include "chrome/browser/safe_browsing/protocol_parser.h"
#include "chrome/common/env_vars.h"
+#include "components/safe_browsing_db/safebrowsing.pb.h"
#include "components/safe_browsing_db/util.h"
#include "components/variations/variations_associated_data.h"
#include "google_apis/google_api_keys.h"
@@ -193,6 +195,10 @@ SafeBrowsingProtocolManager::~SafeBrowsingProtocolManager() {
STLDeleteContainerPairFirstPointers(hash_requests_.begin(),
hash_requests_.end());
hash_requests_.clear();
+
+ STLDeleteContainerPairFirstPointers(hash_api_requests_.begin(),
+ hash_api_requests_.end());
+ hash_api_requests_.clear();
}
// We can only have one update or chunk request outstanding, but there may be
@@ -228,6 +234,50 @@ void SafeBrowsingProtocolManager::GetFullHash(
fetcher->Start();
}
+std::string SafeBrowsingProtocolManager::GetHashWithApisRequest(
Nathan Parker 2015/12/27 01:10:17 This could be non-"Apis -specific by passing the t
kcarattini 2015/12/28 00:05:46 Done.
+ const std::vector<SBPrefix>& prefixes) {
+ // Build the request. Client info and client states are not added to the
+ // request protocol buffer. Client info is passed as params in the url.
+ FindFullHashesRequest req;
+ ThreatInfo* info = req.mutable_threat_info();
+ info->add_threat_types(API_ABUSE);
+ info->add_platform_types(CHROME_PLATFORM);
+ info->add_threat_entry_types(URL_EXPRESSION);
+ for (const SBPrefix& prefix : prefixes) {
+ std::string hash;
+ hash.append(reinterpret_cast<const char*>(&prefix), sizeof(SBPrefix));
+ info->add_threat_entries()->set_hash(hash);
+ }
+
+ // Serialize and Base64 encode.
+ std::string req_data, req_base64;
+ req.SerializeToString(&req_data);
+ base::Base64Encode(req_data, &req_base64);
+
+ return req_base64;
+}
+
+void SafeBrowsingProtocolManager::GetFullHashWithApis(
Nathan Parker 2015/12/27 01:10:17 Same here. This function could call a generic Pve
kcarattini 2015/12/28 00:05:46 Done.
+ const std::vector<SBPrefix>& prefixes,
+ FullHashCallback callback) {
+ DCHECK(CalledOnValidThread());
+ // TODO(kcarattini): Implement backoff behavior.
+
+ std::string req_base64 = GetHashWithApisRequest(prefixes);
+ GURL gethash_url = GetHashWithApisUrl(req_base64);
+
+ net::URLFetcher* fetcher =
+ net::URLFetcher::Create(url_fetcher_id_++, gethash_url,
+ net::URLFetcher::POST, this)
+ .release();
+ hash_api_requests_[fetcher] = FullHashDetails(callback,
+ false /* is_download */);
+
+ fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE);
+ fetcher->SetRequestContext(request_context_getter_.get());
+ fetcher->Start();
+}
+
void SafeBrowsingProtocolManager::GetNextUpdate() {
DCHECK(CalledOnValidThread());
if (request_.get() || request_type_ != NO_REQUEST)
@@ -758,6 +808,15 @@ GURL SafeBrowsingProtocolManager::GetHashUrl(bool is_extended_reporting) const {
return GURL(url);
}
+// The API hash call uses the pver4 Safe Browsing server.
+GURL SafeBrowsingProtocolManager::GetHashWithApisUrl(
Nathan Parker 2015/12/27 01:10:17 This is not "Apis" specific -- we could call it Ge
kcarattini 2015/12/28 00:05:46 Done.
+ const std::string& request_base64) const {
+ std::string url = SafeBrowsingProtocolManagerHelper::ComposePver4Url(
+ "https://safebrowsing.googleapis.com/v4", "encodedFullHashes",
+ request_base64, client_name_, version_);
+ return GURL(url);
+}
+
GURL SafeBrowsingProtocolManager::NextChunkUrl(const std::string& url) const {
DCHECK(CalledOnValidThread());
std::string next_url;
« no previous file with comments | « chrome/browser/safe_browsing/protocol_manager.h ('k') | chrome/browser/safe_browsing/protocol_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698