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

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

Issue 303123006: Add SBClientDownload.DownloadRequestNetworkDuration and DownloadRequestTimeoutDuration histograms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review changes Created 6 years, 6 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 | Annotate | Revision Log
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/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 } 348 }
349 349
350 // Start a timeout to cancel the request if it takes too long. 350 // Start a timeout to cancel the request if it takes too long.
351 // This should only be called after we have finished accessing the file. 351 // This should only be called after we have finished accessing the file.
352 void StartTimeout() { 352 void StartTimeout() {
353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
354 if (!service_) { 354 if (!service_) {
355 // Request has already been cancelled. 355 // Request has already been cancelled.
356 return; 356 return;
357 } 357 }
358 timeout_start_time_ = base::TimeTicks::Now();
358 BrowserThread::PostDelayedTask( 359 BrowserThread::PostDelayedTask(
359 BrowserThread::UI, 360 BrowserThread::UI,
360 FROM_HERE, 361 FROM_HERE,
361 base::Bind(&CheckClientDownloadRequest::Cancel, 362 base::Bind(&CheckClientDownloadRequest::Cancel,
362 weakptr_factory_.GetWeakPtr()), 363 weakptr_factory_.GetWeakPtr()),
363 base::TimeDelta::FromMilliseconds( 364 base::TimeDelta::FromMilliseconds(
364 service_->download_request_timeout_ms())); 365 service_->download_request_timeout_ms()));
365 } 366 }
366 367
367 // Canceling a request will cause us to always report the result as SAFE 368 // Canceling a request will cause us to always report the result as SAFE
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 << response.verdict(); 444 << response.verdict();
444 reason = REASON_INVALID_RESPONSE_VERDICT; 445 reason = REASON_INVALID_RESPONSE_VERDICT;
445 } 446 }
446 DownloadFeedbackService::MaybeStorePingsForDownload( 447 DownloadFeedbackService::MaybeStorePingsForDownload(
447 result, item_, client_download_request_data_, data); 448 result, item_, client_download_request_data_, data);
448 } 449 }
449 // We don't need the fetcher anymore. 450 // We don't need the fetcher anymore.
450 fetcher_.reset(); 451 fetcher_.reset();
451 UMA_HISTOGRAM_TIMES("SBClientDownload.DownloadRequestDuration", 452 UMA_HISTOGRAM_TIMES("SBClientDownload.DownloadRequestDuration",
452 base::TimeTicks::Now() - start_time_); 453 base::TimeTicks::Now() - start_time_);
454 UMA_HISTOGRAM_TIMES("SBClientDownload.DownloadRequestNetworkDuration",
455 base::TimeTicks::Now() - request_start_time_);
453 FinishRequest(result, reason); 456 FinishRequest(result, reason);
454 } 457 }
455 458
456 static bool IsSupportedDownload(const content::DownloadItem& item, 459 static bool IsSupportedDownload(const content::DownloadItem& item,
457 const base::FilePath& target_path, 460 const base::FilePath& target_path,
458 DownloadCheckResultReason* reason, 461 DownloadCheckResultReason* reason,
459 ClientDownloadRequest::DownloadType* type) { 462 ClientDownloadRequest::DownloadType* type) {
460 if (item.GetUrlChain().empty()) { 463 if (item.GetUrlChain().empty()) {
461 *reason = REASON_EMPTY_URL_CHAIN; 464 *reason = REASON_EMPTY_URL_CHAIN;
462 return false; 465 return false;
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 << item_->GetUrlChain().back(); 729 << item_->GetUrlChain().back();
727 fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */, 730 fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
728 GetDownloadRequestUrl(), 731 GetDownloadRequestUrl(),
729 net::URLFetcher::POST, 732 net::URLFetcher::POST,
730 this)); 733 this));
731 fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE); 734 fetcher_->SetLoadFlags(net::LOAD_DISABLE_CACHE);
732 fetcher_->SetAutomaticallyRetryOn5xx(false); // Don't retry on error. 735 fetcher_->SetAutomaticallyRetryOn5xx(false); // Don't retry on error.
733 fetcher_->SetRequestContext(service_->request_context_getter_.get()); 736 fetcher_->SetRequestContext(service_->request_context_getter_.get());
734 fetcher_->SetUploadData("application/octet-stream", 737 fetcher_->SetUploadData("application/octet-stream",
735 client_download_request_data_); 738 client_download_request_data_);
739 request_start_time_ = base::TimeTicks::Now();
736 UMA_HISTOGRAM_COUNTS("SBClientDownload.DownloadRequestPayloadSize", 740 UMA_HISTOGRAM_COUNTS("SBClientDownload.DownloadRequestPayloadSize",
737 client_download_request_data_.size()); 741 client_download_request_data_.size());
738 fetcher_->Start(); 742 fetcher_->Start();
739 } 743 }
740 744
741 void PostFinishTask(DownloadCheckResult result, 745 void PostFinishTask(DownloadCheckResult result,
742 DownloadCheckResultReason reason) { 746 DownloadCheckResultReason reason) {
743 BrowserThread::PostTask( 747 BrowserThread::PostTask(
744 BrowserThread::UI, 748 BrowserThread::UI,
745 FROM_HERE, 749 FROM_HERE,
746 base::Bind(&CheckClientDownloadRequest::FinishRequest, this, result, 750 base::Bind(&CheckClientDownloadRequest::FinishRequest, this, result,
747 reason)); 751 reason));
748 } 752 }
749 753
750 void FinishRequest(DownloadCheckResult result, 754 void FinishRequest(DownloadCheckResult result,
751 DownloadCheckResultReason reason) { 755 DownloadCheckResultReason reason) {
752 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 756 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
753 if (finished_) { 757 if (finished_) {
754 return; 758 return;
755 } 759 }
756 finished_ = true; 760 finished_ = true;
757 // Ensure the timeout task is cancelled while we still have a non-zero 761 // Ensure the timeout task is cancelled while we still have a non-zero
758 // refcount. (crbug.com/240449) 762 // refcount. (crbug.com/240449)
759 weakptr_factory_.InvalidateWeakPtrs(); 763 weakptr_factory_.InvalidateWeakPtrs();
764 if (!request_start_time_.is_null()) {
765 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadRequestNetworkStats",
766 reason,
767 REASON_MAX);
768 }
769 if (!timeout_start_time_.is_null()) {
770 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadRequestTimeoutStats",
771 reason,
772 REASON_MAX);
773 if (reason != REASON_REQUEST_CANCELED) {
774 UMA_HISTOGRAM_TIMES("SBClientDownload.DownloadRequestTimeoutDuration",
775 base::TimeTicks::Now() - timeout_start_time_);
776 }
777 }
760 if (service_) { 778 if (service_) {
761 VLOG(2) << "SafeBrowsing download verdict for: " 779 VLOG(2) << "SafeBrowsing download verdict for: "
762 << item_->DebugString(true) << " verdict:" << reason; 780 << item_->DebugString(true) << " verdict:" << reason;
763 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.CheckDownloadStats", 781 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.CheckDownloadStats",
764 reason, 782 reason,
765 REASON_MAX); 783 REASON_MAX);
766 callback_.Run(result); 784 callback_.Run(result);
767 item_->RemoveObserver(this); 785 item_->RemoveObserver(this);
768 item_ = NULL; 786 item_ = NULL;
769 DownloadProtectionService* service = service_; 787 DownloadProtectionService* service = service_;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 const bool pingback_enabled_; 858 const bool pingback_enabled_;
841 scoped_ptr<net::URLFetcher> fetcher_; 859 scoped_ptr<net::URLFetcher> fetcher_;
842 scoped_refptr<SandboxedZipAnalyzer> analyzer_; 860 scoped_refptr<SandboxedZipAnalyzer> analyzer_;
843 base::TimeTicks zip_analysis_start_time_; 861 base::TimeTicks zip_analysis_start_time_;
844 bool finished_; 862 bool finished_;
845 ClientDownloadRequest::DownloadType type_; 863 ClientDownloadRequest::DownloadType type_;
846 std::string client_download_request_data_; 864 std::string client_download_request_data_;
847 CancelableRequestConsumer request_consumer_; // For HistoryService lookup. 865 CancelableRequestConsumer request_consumer_; // For HistoryService lookup.
848 base::WeakPtrFactory<CheckClientDownloadRequest> weakptr_factory_; 866 base::WeakPtrFactory<CheckClientDownloadRequest> weakptr_factory_;
849 base::TimeTicks start_time_; // Used for stats. 867 base::TimeTicks start_time_; // Used for stats.
868 base::TimeTicks timeout_start_time_;
869 base::TimeTicks request_start_time_;
850 870
851 DISALLOW_COPY_AND_ASSIGN(CheckClientDownloadRequest); 871 DISALLOW_COPY_AND_ASSIGN(CheckClientDownloadRequest);
852 }; 872 };
853 873
854 DownloadProtectionService::DownloadProtectionService( 874 DownloadProtectionService::DownloadProtectionService(
855 SafeBrowsingService* sb_service, 875 SafeBrowsingService* sb_service,
856 net::URLRequestContextGetter* request_context_getter) 876 net::URLRequestContextGetter* request_context_getter)
857 : request_context_getter_(request_context_getter), 877 : request_context_getter_(request_context_getter),
858 enabled_(false), 878 enabled_(false),
859 binary_feature_extractor_(new BinaryFeatureExtractor()), 879 binary_feature_extractor_(new BinaryFeatureExtractor()),
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 GURL DownloadProtectionService::GetDownloadRequestUrl() { 1060 GURL DownloadProtectionService::GetDownloadRequestUrl() {
1041 GURL url(kDownloadRequestUrl); 1061 GURL url(kDownloadRequestUrl);
1042 std::string api_key = google_apis::GetAPIKey(); 1062 std::string api_key = google_apis::GetAPIKey();
1043 if (!api_key.empty()) 1063 if (!api_key.empty())
1044 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1064 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1045 1065
1046 return url; 1066 return url;
1047 } 1067 }
1048 1068
1049 } // namespace safe_browsing 1069 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698