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

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

Issue 6025005: Consolidate some safe-browsing histograms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tweaking Created 9 years, 12 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
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/safe_browsing_service.h" 5 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 17 matching lines...) Expand all
28 #include "chrome/common/url_constants.h" 28 #include "chrome/common/url_constants.h"
29 #include "net/base/registry_controlled_domain.h" 29 #include "net/base/registry_controlled_domain.h"
30 30
31 #if defined(OS_WIN) 31 #if defined(OS_WIN)
32 #include "chrome/installer/util/browser_distribution.h" 32 #include "chrome/installer/util/browser_distribution.h"
33 #endif 33 #endif
34 34
35 using base::Time; 35 using base::Time;
36 using base::TimeDelta; 36 using base::TimeDelta;
37 37
38 namespace {
39
38 // The default URL prefix where browser fetches chunk updates, hashes, 40 // The default URL prefix where browser fetches chunk updates, hashes,
39 // and reports safe browsing hits. 41 // and reports safe browsing hits.
40 static const char* const kSbDefaultInfoURLPrefix = 42 const char* const kSbDefaultInfoURLPrefix =
41 "http://safebrowsing.clients.google.com/safebrowsing"; 43 "http://safebrowsing.clients.google.com/safebrowsing";
42 44
43 // The default URL prefix where browser fetches MAC client key and reports 45 // The default URL prefix where browser fetches MAC client key and reports
44 // malware details. 46 // malware details.
45 static const char* const kSbDefaultMacKeyURLPrefix = 47 const char* const kSbDefaultMacKeyURLPrefix =
46 "https://sb-ssl.google.com/safebrowsing"; 48 "https://sb-ssl.google.com/safebrowsing";
47 49
48 static Profile* GetDefaultProfile() { 50 Profile* GetDefaultProfile() {
49 FilePath user_data_dir; 51 FilePath user_data_dir;
50 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); 52 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
51 ProfileManager* profile_manager = g_browser_process->profile_manager(); 53 ProfileManager* profile_manager = g_browser_process->profile_manager();
52 return profile_manager->GetDefaultProfile(user_data_dir); 54 return profile_manager->GetDefaultProfile(user_data_dir);
53 } 55 }
54 56
57 // Records disposition information about the check. |hit| should be
58 // |true| if there were any prefix hits in |full_hashes|.
59 void RecordGetHashCheckStatus(
60 bool hit, const std::vector<SBFullHashResult>& full_hashes) {
61 SafeBrowsingProtocolManager::ResultType result;
62 if (full_hashes.empty()) {
63 result = SafeBrowsingProtocolManager::GET_HASH_FULL_HASH_EMPTY;
64 } else if (hit) {
65 result = SafeBrowsingProtocolManager::GET_HASH_FULL_HASH_HIT;
66 } else {
67 result = SafeBrowsingProtocolManager::GET_HASH_FULL_HASH_MISS;
68 }
69 SafeBrowsingProtocolManager::RecordGetHashResult(result);
70 }
71
72 } // namespace
73
55 // static 74 // static
56 SafeBrowsingServiceFactory* SafeBrowsingService::factory_ = NULL; 75 SafeBrowsingServiceFactory* SafeBrowsingService::factory_ = NULL;
57 76
58 // The default SafeBrowsingServiceFactory. Global, made a singleton so we 77 // The default SafeBrowsingServiceFactory. Global, made a singleton so we
59 // don't leak it. 78 // don't leak it.
60 class SafeBrowsingServiceFactoryImpl : public SafeBrowsingServiceFactory { 79 class SafeBrowsingServiceFactoryImpl : public SafeBrowsingServiceFactory {
61 public: 80 public:
62 virtual SafeBrowsingService* CreateSafeBrowsingService() { 81 virtual SafeBrowsingService* CreateSafeBrowsingService() {
63 return new SafeBrowsingService(); 82 return new SafeBrowsingService();
64 } 83 }
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 GetHashRequestors requestors; 652 GetHashRequestors requestors;
634 requestors.push_back(check); 653 requestors.push_back(check);
635 gethash_requests_[prefix] = requestors; 654 gethash_requests_[prefix] = requestors;
636 } 655 }
637 656
638 // Reset the start time so that we can measure the network time without the 657 // Reset the start time so that we can measure the network time without the
639 // database time. 658 // database time.
640 check->start = Time::Now(); 659 check->start = Time::Now();
641 protocol_manager_->GetFullHash(check, check->prefix_hits); 660 protocol_manager_->GetFullHash(check, check->prefix_hits);
642 } else { 661 } else {
643 // We may have cached results for previous GetHash queries. 662 // We may have cached results for previous GetHash queries. Since
663 // this data comes from cache, don't histogram hits.
644 HandleOneCheck(check, check->full_hits); 664 HandleOneCheck(check, check->full_hits);
645 } 665 }
646 } 666 }
647 667
648 void SafeBrowsingService::GetAllChunksFromDatabase() { 668 void SafeBrowsingService::GetAllChunksFromDatabase() {
649 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop()); 669 DCHECK_EQ(MessageLoop::current(), safe_browsing_thread_->message_loop());
650 670
651 bool database_error = true; 671 bool database_error = true;
652 std::vector<SBListChunkRanges> lists; 672 std::vector<SBListChunkRanges> lists;
653 DCHECK(!database_update_in_progress_); 673 DCHECK(!database_update_in_progress_);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 GetDatabase()->CacheHashResults(prefixes, full_hashes); 830 GetDatabase()->CacheHashResults(prefixes, full_hashes);
811 } 831 }
812 832
813 void SafeBrowsingService::OnHandleGetHashResults( 833 void SafeBrowsingService::OnHandleGetHashResults(
814 SafeBrowsingCheck* check, 834 SafeBrowsingCheck* check,
815 const std::vector<SBFullHashResult>& full_hashes) { 835 const std::vector<SBFullHashResult>& full_hashes) {
816 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 836 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
817 SBPrefix prefix = check->prefix_hits[0]; 837 SBPrefix prefix = check->prefix_hits[0];
818 GetHashRequests::iterator it = gethash_requests_.find(prefix); 838 GetHashRequests::iterator it = gethash_requests_.find(prefix);
819 if (check->prefix_hits.size() > 1 || it == gethash_requests_.end()) { 839 if (check->prefix_hits.size() > 1 || it == gethash_requests_.end()) {
820 HandleOneCheck(check, full_hashes); 840 const bool hit = HandleOneCheck(check, full_hashes);
841 RecordGetHashCheckStatus(hit, full_hashes);
821 return; 842 return;
822 } 843 }
823 844
824 // Call back all interested parties. 845 // Call back all interested parties, noting if any has a hit.
825 GetHashRequestors& requestors = it->second; 846 GetHashRequestors& requestors = it->second;
847 bool hit = false;
826 for (GetHashRequestors::iterator r = requestors.begin(); 848 for (GetHashRequestors::iterator r = requestors.begin();
827 r != requestors.end(); ++r) { 849 r != requestors.end(); ++r) {
828 HandleOneCheck(*r, full_hashes); 850 if (HandleOneCheck(*r, full_hashes))
851 hit = true;
829 } 852 }
853 RecordGetHashCheckStatus(hit, full_hashes);
830 854
831 gethash_requests_.erase(it); 855 gethash_requests_.erase(it);
832 } 856 }
833 857
834 void SafeBrowsingService::HandleOneCheck( 858 bool SafeBrowsingService::HandleOneCheck(
835 SafeBrowsingCheck* check, 859 SafeBrowsingCheck* check,
836 const std::vector<SBFullHashResult>& full_hashes) { 860 const std::vector<SBFullHashResult>& full_hashes) {
837 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 861 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
862
863 // Always calculate the index, for recording hits.
864 int index = safe_browsing_util::CompareFullHashes(check->url, full_hashes);
865
866 // |client| is NULL if the request was cancelled.
838 if (check->client) { 867 if (check->client) {
839 UrlCheckResult result = URL_SAFE; 868 UrlCheckResult result = URL_SAFE;
840 int index = safe_browsing_util::CompareFullHashes(check->url, full_hashes); 869 if (index != -1)
841 if (index != -1) {
842 result = GetResultFromListname(full_hashes[index].list_name); 870 result = GetResultFromListname(full_hashes[index].list_name);
843 } else {
844 // Log the case where the SafeBrowsing servers return full hashes in the
845 // GetHash response that match the prefix we're looking up, but don't
846 // match the full hash of the URL.
847 if (!full_hashes.empty())
848 UMA_HISTOGRAM_COUNTS("SB2.GetHashServerMiss", 1);
849 }
850 871
851 // Let the client continue handling the original request. 872 // Let the client continue handling the original request.
852 check->client->OnSafeBrowsingResult(check->url, result); 873 check->client->OnSafeBrowsingResult(check->url, result);
853 } 874 }
854 875
855 checks_.erase(check); 876 checks_.erase(check);
856 delete check; 877 delete check;
878
879 return (index != -1);
857 } 880 }
858 881
859 void SafeBrowsingService::DoDisplayBlockingPage( 882 void SafeBrowsingService::DoDisplayBlockingPage(
860 const UnsafeResource& resource) { 883 const UnsafeResource& resource) {
861 // The tab might have been closed. 884 // The tab might have been closed.
862 TabContents* wc = 885 TabContents* wc =
863 tab_util::GetTabContentsByID(resource.render_process_host_id, 886 tab_util::GetTabContentsByID(resource.render_process_host_id,
864 resource.render_view_id); 887 resource.render_view_id);
865 888
866 if (!wc) { 889 if (!wc) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 // checkbox on the blocking page. 965 // checkbox on the blocking page.
943 void SafeBrowsingService::ReportMalwareDetails( 966 void SafeBrowsingService::ReportMalwareDetails(
944 scoped_refptr<MalwareDetails> details) { 967 scoped_refptr<MalwareDetails> details) {
945 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 968 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
946 scoped_ptr<const std::string> serialized(details->GetSerializedReport()); 969 scoped_ptr<const std::string> serialized(details->GetSerializedReport());
947 if (!serialized->empty()) { 970 if (!serialized->empty()) {
948 DVLOG(1) << "Sending serialized malware details."; 971 DVLOG(1) << "Sending serialized malware details.";
949 protocol_manager_->ReportMalwareDetails(*serialized); 972 protocol_manager_->ReportMalwareDetails(*serialized);
950 } 973 }
951 } 974 }
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698