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

Side by Side Diff: chrome/browser/safe_browsing/protocol_manager.cc

Issue 2276933003: Add data usage tracking for safe browsing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 2 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/safe_browsing/protocol_manager.h" 5 #include "chrome/browser/safe_browsing/protocol_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/environment.h" 9 #include "base/environment.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
14 #include "base/metrics/sparse_histogram.h" 14 #include "base/metrics/sparse_histogram.h"
15 #include "base/profiler/scoped_tracker.h" 15 #include "base/profiler/scoped_tracker.h"
16 #include "base/rand_util.h" 16 #include "base/rand_util.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/string_util.h" 18 #include "base/strings/string_util.h"
19 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
20 #include "base/timer/timer.h" 20 #include "base/timer/timer.h"
21 #include "chrome/browser/safe_browsing/protocol_parser.h" 21 #include "chrome/browser/safe_browsing/protocol_parser.h"
22 #include "chrome/common/env_vars.h" 22 #include "chrome/common/env_vars.h"
23 #include "components/data_use_measurement/core/data_use_user_data.h"
23 #include "components/safe_browsing_db/util.h" 24 #include "components/safe_browsing_db/util.h"
24 #include "components/variations/variations_associated_data.h" 25 #include "components/variations/variations_associated_data.h"
25 #include "content/public/browser/browser_thread.h" 26 #include "content/public/browser/browser_thread.h"
26 #include "google_apis/google_api_keys.h" 27 #include "google_apis/google_api_keys.h"
27 #include "net/base/escape.h" 28 #include "net/base/escape.h"
28 #include "net/base/load_flags.h" 29 #include "net/base/load_flags.h"
29 #include "net/base/net_errors.h" 30 #include "net/base/net_errors.h"
30 #include "net/http/http_response_headers.h" 31 #include "net/http/http_response_headers.h"
31 #include "net/http/http_status_code.h" 32 #include "net/http/http_status_code.h"
32 #include "net/url_request/url_fetcher.h" 33 #include "net/url_request/url_fetcher.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 if (gethash_error_count_ && Time::Now() <= next_gethash_time_) { 208 if (gethash_error_count_ && Time::Now() <= next_gethash_time_) {
208 RecordGetHashResult(is_download, GET_HASH_BACKOFF_ERROR); 209 RecordGetHashResult(is_download, GET_HASH_BACKOFF_ERROR);
209 std::vector<SBFullHashResult> full_hashes; 210 std::vector<SBFullHashResult> full_hashes;
210 callback.Run(full_hashes, base::TimeDelta()); 211 callback.Run(full_hashes, base::TimeDelta());
211 return; 212 return;
212 } 213 }
213 GURL gethash_url = GetHashUrl(is_extended_reporting); 214 GURL gethash_url = GetHashUrl(is_extended_reporting);
214 std::unique_ptr<net::URLFetcher> fetcher_ptr = net::URLFetcher::Create( 215 std::unique_ptr<net::URLFetcher> fetcher_ptr = net::URLFetcher::Create(
215 url_fetcher_id_++, gethash_url, net::URLFetcher::POST, this); 216 url_fetcher_id_++, gethash_url, net::URLFetcher::POST, this);
216 net::URLFetcher* fetcher = fetcher_ptr.get(); 217 net::URLFetcher* fetcher = fetcher_ptr.get();
218 data_use_measurement::DataUseUserData::AttachToFetcher(
219 fetcher, data_use_measurement::DataUseUserData::SAFE_BROWSING);
217 hash_requests_[fetcher] = {std::move(fetcher_ptr), 220 hash_requests_[fetcher] = {std::move(fetcher_ptr),
218 FullHashDetails(callback, is_download)}; 221 FullHashDetails(callback, is_download)};
219 222
220 const std::string get_hash = FormatGetHash(prefixes); 223 const std::string get_hash = FormatGetHash(prefixes);
221 224
222 fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE); 225 fetcher->SetLoadFlags(net::LOAD_DISABLE_CACHE);
223 fetcher->SetRequestContext(request_context_getter_.get()); 226 fetcher->SetRequestContext(request_context_getter_.get());
224 fetcher->SetUploadData("text/plain", get_hash); 227 fetcher->SetUploadData("text/plain", get_hash);
225 fetcher->Start(); 228 fetcher->Start();
226 } 229 }
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 DCHECK(backup_update_reason >= 0 && 576 DCHECK(backup_update_reason >= 0 &&
574 backup_update_reason < BACKUP_UPDATE_REASON_MAX); 577 backup_update_reason < BACKUP_UPDATE_REASON_MAX);
575 if (backup_url_prefixes_[backup_update_reason].empty()) 578 if (backup_url_prefixes_[backup_update_reason].empty())
576 return false; 579 return false;
577 request_type_ = BACKUP_UPDATE_REQUEST; 580 request_type_ = BACKUP_UPDATE_REQUEST;
578 backup_update_reason_ = backup_update_reason; 581 backup_update_reason_ = backup_update_reason;
579 582
580 GURL backup_update_url = BackupUpdateUrl(backup_update_reason); 583 GURL backup_update_url = BackupUpdateUrl(backup_update_reason);
581 request_ = net::URLFetcher::Create(url_fetcher_id_++, backup_update_url, 584 request_ = net::URLFetcher::Create(url_fetcher_id_++, backup_update_url,
582 net::URLFetcher::POST, this); 585 net::URLFetcher::POST, this);
586 data_use_measurement::DataUseUserData::AttachToFetcher(
587 request_.get(), data_use_measurement::DataUseUserData::SAFE_BROWSING);
583 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE); 588 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
584 request_->SetRequestContext(request_context_getter_.get()); 589 request_->SetRequestContext(request_context_getter_.get());
585 request_->SetUploadData("text/plain", update_list_data_); 590 request_->SetUploadData("text/plain", update_list_data_);
586 request_->Start(); 591 request_->Start();
587 592
588 // Begin the update request timeout. 593 // Begin the update request timeout.
589 timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec), 594 timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec),
590 this, 595 this,
591 &SafeBrowsingProtocolManager::UpdateResponseTimeout); 596 &SafeBrowsingProtocolManager::UpdateResponseTimeout);
592 597
593 return true; 598 return true;
594 } 599 }
595 600
596 void SafeBrowsingProtocolManager::IssueChunkRequest() { 601 void SafeBrowsingProtocolManager::IssueChunkRequest() {
597 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 602 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
598 // We are only allowed to have one request outstanding at any time. Also, 603 // We are only allowed to have one request outstanding at any time. Also,
599 // don't get the next url until the previous one has been written to disk so 604 // don't get the next url until the previous one has been written to disk so
600 // that we don't use too much memory. 605 // that we don't use too much memory.
601 if (request_.get() || chunk_request_urls_.empty() || chunk_pending_to_write_) 606 if (request_.get() || chunk_request_urls_.empty() || chunk_pending_to_write_)
602 return; 607 return;
603 608
604 ChunkUrl next_chunk = chunk_request_urls_.front(); 609 ChunkUrl next_chunk = chunk_request_urls_.front();
605 DCHECK(!next_chunk.url.empty()); 610 DCHECK(!next_chunk.url.empty());
606 GURL chunk_url = NextChunkUrl(next_chunk.url); 611 GURL chunk_url = NextChunkUrl(next_chunk.url);
607 request_type_ = CHUNK_REQUEST; 612 request_type_ = CHUNK_REQUEST;
608 request_ = net::URLFetcher::Create(url_fetcher_id_++, chunk_url, 613 request_ = net::URLFetcher::Create(url_fetcher_id_++, chunk_url,
609 net::URLFetcher::GET, this); 614 net::URLFetcher::GET, this);
615 data_use_measurement::DataUseUserData::AttachToFetcher(
616 request_.get(), data_use_measurement::DataUseUserData::SAFE_BROWSING);
610 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE); 617 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
611 request_->SetRequestContext(request_context_getter_.get()); 618 request_->SetRequestContext(request_context_getter_.get());
612 chunk_request_start_ = base::Time::Now(); 619 chunk_request_start_ = base::Time::Now();
613 request_->Start(); 620 request_->Start();
614 } 621 }
615 622
616 void SafeBrowsingProtocolManager::OnGetChunksComplete( 623 void SafeBrowsingProtocolManager::OnGetChunksComplete(
617 const std::vector<SBListChunkRanges>& lists, 624 const std::vector<SBListChunkRanges>& lists,
618 bool database_error, 625 bool database_error,
619 bool is_extended_reporting) { 626 bool is_extended_reporting) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 } 658 }
652 659
653 // Large requests are (probably) a sign of database corruption. 660 // Large requests are (probably) a sign of database corruption.
654 // Record stats to inform decisions about whether to automate 661 // Record stats to inform decisions about whether to automate
655 // deletion of such databases. http://crbug.com/120219 662 // deletion of such databases. http://crbug.com/120219
656 UMA_HISTOGRAM_COUNTS("SB2.UpdateRequestSize", update_list_data_.size()); 663 UMA_HISTOGRAM_COUNTS("SB2.UpdateRequestSize", update_list_data_.size());
657 664
658 GURL update_url = UpdateUrl(is_extended_reporting); 665 GURL update_url = UpdateUrl(is_extended_reporting);
659 request_ = net::URLFetcher::Create(url_fetcher_id_++, update_url, 666 request_ = net::URLFetcher::Create(url_fetcher_id_++, update_url,
660 net::URLFetcher::POST, this); 667 net::URLFetcher::POST, this);
668 data_use_measurement::DataUseUserData::AttachToFetcher(
669 request_.get(), data_use_measurement::DataUseUserData::SAFE_BROWSING);
661 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE); 670 request_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
662 request_->SetRequestContext(request_context_getter_.get()); 671 request_->SetRequestContext(request_context_getter_.get());
663 request_->SetUploadData("text/plain", update_list_data_); 672 request_->SetUploadData("text/plain", update_list_data_);
664 request_->Start(); 673 request_->Start();
665 674
666 // Begin the update request timeout. 675 // Begin the update request timeout.
667 timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec), 676 timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kSbMaxUpdateWaitSec),
668 this, 677 this,
669 &SafeBrowsingProtocolManager::UpdateResponseTimeout); 678 &SafeBrowsingProtocolManager::UpdateResponseTimeout);
670 } 679 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 : callback(callback), is_download(is_download) {} 797 : callback(callback), is_download(is_download) {}
789 798
790 SafeBrowsingProtocolManager::FullHashDetails::FullHashDetails( 799 SafeBrowsingProtocolManager::FullHashDetails::FullHashDetails(
791 const FullHashDetails& other) = default; 800 const FullHashDetails& other) = default;
792 801
793 SafeBrowsingProtocolManager::FullHashDetails::~FullHashDetails() {} 802 SafeBrowsingProtocolManager::FullHashDetails::~FullHashDetails() {}
794 803
795 SafeBrowsingProtocolManagerDelegate::~SafeBrowsingProtocolManagerDelegate() {} 804 SafeBrowsingProtocolManagerDelegate::~SafeBrowsingProtocolManagerDelegate() {}
796 805
797 } // namespace safe_browsing 806 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/ping_manager.cc ('k') | chrome/browser/safe_browsing/srt_fetcher_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698