OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 DownloadProtectionService* service, | 333 DownloadProtectionService* service, |
334 SafeBrowsingService* sb_service, | 334 SafeBrowsingService* sb_service, |
335 SignatureUtil* signature_util) | 335 SignatureUtil* signature_util) |
336 : info_(info), | 336 : info_(info), |
337 callback_(callback), | 337 callback_(callback), |
338 service_(service), | 338 service_(service), |
339 signature_util_(signature_util), | 339 signature_util_(signature_util), |
340 sb_service_(sb_service), | 340 sb_service_(sb_service), |
341 pingback_enabled_(service_->enabled()), | 341 pingback_enabled_(service_->enabled()), |
342 finished_(false), | 342 finished_(false), |
343 ALLOW_THIS_IN_INITIALIZER_LIST(timeout_weakptr_factory_(this)) { | 343 ALLOW_THIS_IN_INITIALIZER_LIST(timeout_weakptr_factory_(this)), |
| 344 start_time_(base::TimeTicks::Now()) { |
344 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
345 } | 346 } |
346 | 347 |
347 void Start() { | 348 void Start() { |
348 VLOG(2) << "Starting SafeBrowsing download check for: " | 349 VLOG(2) << "Starting SafeBrowsing download check for: " |
349 << info_.DebugString(); | 350 << info_.DebugString(); |
350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
351 // TODO(noelutz): implement some cache to make sure we don't issue the same | 352 // TODO(noelutz): implement some cache to make sure we don't issue the same |
352 // request over and over again if a user downloads the same binary multiple | 353 // request over and over again if a user downloads the same binary multiple |
353 // times. | 354 // times. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 } else if (response.verdict() == ClientDownloadResponse::DANGEROUS) { | 434 } else if (response.verdict() == ClientDownloadResponse::DANGEROUS) { |
434 reason = REASON_DOWNLOAD_DANGEROUS; | 435 reason = REASON_DOWNLOAD_DANGEROUS; |
435 result = DANGEROUS; | 436 result = DANGEROUS; |
436 } else { | 437 } else { |
437 reason = REASON_DOWNLOAD_SAFE; | 438 reason = REASON_DOWNLOAD_SAFE; |
438 } | 439 } |
439 } | 440 } |
440 // We don't need the fetcher anymore. | 441 // We don't need the fetcher anymore. |
441 fetcher_.reset(); | 442 fetcher_.reset(); |
442 RecordImprovedProtectionStats(reason); | 443 RecordImprovedProtectionStats(reason); |
| 444 UMA_HISTOGRAM_TIMES("SBClientDownload.DownloadRequestDuration", |
| 445 base::TimeTicks::Now() - start_time_); |
443 FinishRequest(result); | 446 FinishRequest(result); |
444 } | 447 } |
445 | 448 |
446 private: | 449 private: |
447 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; | 450 friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; |
448 friend class DeleteTask<CheckClientDownloadRequest>; | 451 friend class DeleteTask<CheckClientDownloadRequest>; |
449 | 452 |
450 virtual ~CheckClientDownloadRequest() { | 453 virtual ~CheckClientDownloadRequest() { |
451 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 454 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
452 } | 455 } |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 ClientDownloadRequest_SignatureInfo signature_info_; | 613 ClientDownloadRequest_SignatureInfo signature_info_; |
611 CheckDownloadCallback callback_; | 614 CheckDownloadCallback callback_; |
612 // Will be NULL if the request has been canceled. | 615 // Will be NULL if the request has been canceled. |
613 DownloadProtectionService* service_; | 616 DownloadProtectionService* service_; |
614 scoped_refptr<SignatureUtil> signature_util_; | 617 scoped_refptr<SignatureUtil> signature_util_; |
615 scoped_refptr<SafeBrowsingService> sb_service_; | 618 scoped_refptr<SafeBrowsingService> sb_service_; |
616 const bool pingback_enabled_; | 619 const bool pingback_enabled_; |
617 scoped_ptr<content::URLFetcher> fetcher_; | 620 scoped_ptr<content::URLFetcher> fetcher_; |
618 bool finished_; | 621 bool finished_; |
619 base::WeakPtrFactory<CheckClientDownloadRequest> timeout_weakptr_factory_; | 622 base::WeakPtrFactory<CheckClientDownloadRequest> timeout_weakptr_factory_; |
| 623 base::TimeTicks start_time_; // Used for stats. |
620 | 624 |
621 DISALLOW_COPY_AND_ASSIGN(CheckClientDownloadRequest); | 625 DISALLOW_COPY_AND_ASSIGN(CheckClientDownloadRequest); |
622 }; | 626 }; |
623 | 627 |
624 DownloadProtectionService::DownloadProtectionService( | 628 DownloadProtectionService::DownloadProtectionService( |
625 SafeBrowsingService* sb_service, | 629 SafeBrowsingService* sb_service, |
626 net::URLRequestContextGetter* request_context_getter) | 630 net::URLRequestContextGetter* request_context_getter) |
627 : sb_service_(sb_service), | 631 : sb_service_(sb_service), |
628 request_context_getter_(request_context_getter), | 632 request_context_getter_(request_context_getter), |
629 enabled_(false), | 633 enabled_(false), |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 693 |
690 void DownloadProtectionService::RequestFinished( | 694 void DownloadProtectionService::RequestFinished( |
691 CheckClientDownloadRequest* request) { | 695 CheckClientDownloadRequest* request) { |
692 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 696 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
693 std::set<scoped_refptr<CheckClientDownloadRequest> >::iterator it = | 697 std::set<scoped_refptr<CheckClientDownloadRequest> >::iterator it = |
694 download_requests_.find(request); | 698 download_requests_.find(request); |
695 DCHECK(it != download_requests_.end()); | 699 DCHECK(it != download_requests_.end()); |
696 download_requests_.erase(*it); | 700 download_requests_.erase(*it); |
697 } | 701 } |
698 } // namespace safe_browsing | 702 } // namespace safe_browsing |
OLD | NEW |