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

Side by Side Diff: components/safe_browsing_db/v4_get_hash_protocol_manager.cc

Issue 1719883003: Ignore: v4_update_protocol_manager: Basic implementation with TODOs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v4_01_prot_mgr
Patch Set: Basic implementation of the update protocol manager with histograms and TODOs. No tests yet. 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/safe_browsing_db/v4_get_hash_protocol_manager.h" 5 #include "components/safe_browsing_db/v4_get_hash_protocol_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 const V4ProtocolConfig& config) 102 const V4ProtocolConfig& config)
103 : gethash_error_count_(0), 103 : gethash_error_count_(0),
104 gethash_back_off_mult_(1), 104 gethash_back_off_mult_(1),
105 next_gethash_time_(Time::FromDoubleT(0)), 105 next_gethash_time_(Time::FromDoubleT(0)),
106 config_(config), 106 config_(config),
107 request_context_getter_(request_context_getter), 107 request_context_getter_(request_context_getter),
108 url_fetcher_id_(0) { 108 url_fetcher_id_(0) {
109 } 109 }
110 110
111 // static 111 // static
112 void V4GetHashProtocolManager::RecordGetHashResult(ResultType result_type) { 112 void V4GetHashProtocolManager::RecordGetHashResult(
113 OperationResultType result_type) {
113 UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.GetV4HashResult", result_type, 114 UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.GetV4HashResult", result_type,
114 GET_HASH_RESULT_MAX); 115 OPERATION_RESULT_TYPE_MAX);
115 } 116 }
116 117
117 V4GetHashProtocolManager::~V4GetHashProtocolManager() { 118 V4GetHashProtocolManager::~V4GetHashProtocolManager() {
118 // Delete in-progress SafeBrowsing requests. 119 // Delete in-progress SafeBrowsing requests.
119 STLDeleteContainerPairFirstPointers(hash_requests_.begin(), 120 STLDeleteContainerPairFirstPointers(hash_requests_.begin(),
120 hash_requests_.end()); 121 hash_requests_.end());
121 hash_requests_.clear(); 122 hash_requests_.clear();
122 } 123 }
123 124
124 std::string V4GetHashProtocolManager::GetHashRequest( 125 std::string V4GetHashProtocolManager::GetHashRequest(
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 const std::vector<PlatformType>& platforms, 242 const std::vector<PlatformType>& platforms,
242 ThreatType threat_type, 243 ThreatType threat_type,
243 FullHashCallback callback) { 244 FullHashCallback callback) {
244 DCHECK(CalledOnValidThread()); 245 DCHECK(CalledOnValidThread());
245 // We need to wait the minimum waiting duration, and if we are in backoff, 246 // We need to wait the minimum waiting duration, and if we are in backoff,
246 // we need to check if we're past the next allowed time. If we are, we can 247 // we need to check if we're past the next allowed time. If we are, we can
247 // proceed with the request. If not, we are required to return empty results 248 // proceed with the request. If not, we are required to return empty results
248 // (i.e. treat the page as safe). 249 // (i.e. treat the page as safe).
249 if (Time::Now() <= next_gethash_time_) { 250 if (Time::Now() <= next_gethash_time_) {
250 if (gethash_error_count_) { 251 if (gethash_error_count_) {
251 RecordGetHashResult(GET_HASH_BACKOFF_ERROR); 252 RecordGetHashResult(ORT_BACKOFF_ERROR);
Nathan Parker 2016/02/23 18:47:06 What's ORT? An idea: You could make these a "class
vakh (use Gerrit instead) 2016/02/23 23:58:20 Done. ORT was short for OperationResultType. I gav
252 } else { 253 } else {
253 RecordGetHashResult(GET_HASH_MIN_WAIT_DURATION_ERROR); 254 RecordGetHashResult(ORT_MIN_WAIT_DURATION_ERROR);
254 } 255 }
255 std::vector<SBFullHashResult> full_hashes; 256 std::vector<SBFullHashResult> full_hashes;
256 callback.Run(full_hashes, base::TimeDelta()); 257 callback.Run(full_hashes, base::TimeDelta());
257 return; 258 return;
258 } 259 }
259 260
260 std::string req_base64 = GetHashRequest(prefixes, platforms, threat_type); 261 std::string req_base64 = GetHashRequest(prefixes, platforms, threat_type);
261 GURL gethash_url = GetHashUrl(req_base64); 262 GURL gethash_url = GetHashUrl(req_base64);
262 263
263 net::URLFetcher* fetcher = 264 net::URLFetcher* fetcher =
(...skipping 30 matching lines...) Expand all
294 295
295 int response_code = source->GetResponseCode(); 296 int response_code = source->GetResponseCode();
296 net::URLRequestStatus status = source->GetStatus(); 297 net::URLRequestStatus status = source->GetStatus();
297 V4ProtocolManagerUtil::RecordHttpResponseOrErrorCode( 298 V4ProtocolManagerUtil::RecordHttpResponseOrErrorCode(
298 kUmaV4HashResponseMetricName, status, response_code); 299 kUmaV4HashResponseMetricName, status, response_code);
299 300
300 const FullHashCallback& callback = it->second; 301 const FullHashCallback& callback = it->second;
301 std::vector<SBFullHashResult> full_hashes; 302 std::vector<SBFullHashResult> full_hashes;
302 base::TimeDelta negative_cache_duration; 303 base::TimeDelta negative_cache_duration;
303 if (status.is_success() && response_code == net::HTTP_OK) { 304 if (status.is_success() && response_code == net::HTTP_OK) {
304 RecordGetHashResult(GET_HASH_STATUS_200); 305 RecordGetHashResult(ORT_STATUS_200);
305 ResetGetHashErrors(); 306 ResetGetHashErrors();
306 std::string data; 307 std::string data;
307 source->GetResponseAsString(&data); 308 source->GetResponseAsString(&data);
308 if (!ParseHashResponse(data, &full_hashes, &negative_cache_duration)) { 309 if (!ParseHashResponse(data, &full_hashes, &negative_cache_duration)) {
309 full_hashes.clear(); 310 full_hashes.clear();
310 RecordGetHashResult(GET_HASH_PARSE_ERROR); 311 RecordGetHashResult(ORT_PARSE_ERROR);
311 } 312 }
312 } else { 313 } else {
313 HandleGetHashError(Time::Now()); 314 HandleGetHashError(Time::Now());
314 315
315 DVLOG(1) << "SafeBrowsing GetEncodedFullHashes request for: " 316 DVLOG(1) << "SafeBrowsing GetEncodedFullHashes request for: "
316 << source->GetURL() << " failed with error: " << status.error() 317 << source->GetURL() << " failed with error: " << status.error()
317 << " and response code: " << response_code; 318 << " and response code: " << response_code;
318 319
319 if (status.status() == net::URLRequestStatus::FAILED) { 320 if (status.status() == net::URLRequestStatus::FAILED) {
320 RecordGetHashResult(GET_HASH_NETWORK_ERROR); 321 RecordGetHashResult(ORT_NETWORK_ERROR);
321 } else { 322 } else {
322 RecordGetHashResult(GET_HASH_HTTP_ERROR); 323 RecordGetHashResult(ORT_HTTP_ERROR);
323 } 324 }
324 } 325 }
325 326
326 // Invoke the callback with full_hashes, even if there was a parse error or 327 // Invoke the callback with full_hashes, even if there was a parse error or
327 // an error response code (in which case full_hashes will be empty). The 328 // an error response code (in which case full_hashes will be empty). The
328 // caller can't be blocked indefinitely. 329 // caller can't be blocked indefinitely.
329 callback.Run(full_hashes, negative_cache_duration); 330 callback.Run(full_hashes, negative_cache_duration);
330 331
331 hash_requests_.erase(it); 332 hash_requests_.erase(it);
332 } 333 }
333 334
334 void V4GetHashProtocolManager::HandleGetHashError(const Time& now) { 335 void V4GetHashProtocolManager::HandleGetHashError(const Time& now) {
335 DCHECK(CalledOnValidThread()); 336 DCHECK(CalledOnValidThread());
336 base::TimeDelta next = V4ProtocolManagerUtil::GetNextBackOffInterval( 337 base::TimeDelta next = V4ProtocolManagerUtil::GetNextBackOffInterval(
337 &gethash_error_count_, &gethash_back_off_mult_); 338 &gethash_error_count_, &gethash_back_off_mult_);
338 next_gethash_time_ = now + next; 339 next_gethash_time_ = now + next;
339 } 340 }
340 341
341 GURL V4GetHashProtocolManager::GetHashUrl(const std::string& req_base64) const { 342 GURL V4GetHashProtocolManager::GetHashUrl(const std::string& req_base64) const {
342 return V4ProtocolManagerUtil::GetRequestUrl(req_base64, "encodedFullHashes", 343 return V4ProtocolManagerUtil::GetRequestUrl(req_base64, "encodedFullHashes",
343 config_); 344 config_);
344 } 345 }
345 346
346 347
347 } // namespace safe_browsing 348 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698