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

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

Issue 1236613003: [Merge to M44] [SafeBrowsing] Send pingbacks for additional file types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2403
Patch Set: Created 5 years, 5 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/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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 namespace { 55 namespace {
56 static const int64 kDownloadRequestTimeoutMs = 7000; 56 static const int64 kDownloadRequestTimeoutMs = 7000;
57 } // namespace 57 } // namespace
58 58
59 namespace safe_browsing { 59 namespace safe_browsing {
60 60
61 const char DownloadProtectionService::kDownloadRequestUrl[] = 61 const char DownloadProtectionService::kDownloadRequestUrl[] =
62 "https://sb-ssl.google.com/safebrowsing/clientreport/download"; 62 "https://sb-ssl.google.com/safebrowsing/clientreport/download";
63 63
64 namespace { 64 namespace {
65 // List of extensions for which we track some UMA stats. 65 // List of extensions for which we track some UMA stats. The position of the
66 enum MaliciousExtensionType { 66 // extension in kDangerousFileTypes is considered to be the UMA enumeration
67 EXTENSION_EXE, 67 // value. Naturally, new values should only be added at the end.
68 EXTENSION_MSI, 68 const base::FilePath::CharType* const kDangerousFileTypes[] = {
69 EXTENSION_CAB, 69 FILE_PATH_LITERAL(".exe"),
70 EXTENSION_SYS, 70 FILE_PATH_LITERAL(".msi"),
71 EXTENSION_SCR, 71 FILE_PATH_LITERAL(".cab"),
72 EXTENSION_DRV, 72 FILE_PATH_LITERAL(".sys"),
73 EXTENSION_BAT, 73 FILE_PATH_LITERAL(".scr"),
74 EXTENSION_ZIP, 74 FILE_PATH_LITERAL(".drv"),
75 EXTENSION_RAR, 75 FILE_PATH_LITERAL(".bat"),
76 EXTENSION_DLL, 76 FILE_PATH_LITERAL(".zip"),
77 EXTENSION_PIF, 77 FILE_PATH_LITERAL(".rar"),
78 EXTENSION_COM, 78 FILE_PATH_LITERAL(".dll"),
79 EXTENSION_JAR, 79 FILE_PATH_LITERAL(".pif"),
80 EXTENSION_CLASS, 80 FILE_PATH_LITERAL(".com"),
81 EXTENSION_PDF, 81 FILE_PATH_LITERAL(".jar"),
82 EXTENSION_VB, 82 FILE_PATH_LITERAL(".class"),
83 EXTENSION_REG, 83 FILE_PATH_LITERAL(".pdf"),
84 EXTENSION_GRP, 84 FILE_PATH_LITERAL(".vb"),
85 EXTENSION_OTHER, // Groups all other extensions into one bucket. 85 FILE_PATH_LITERAL(".reg"),
86 EXTENSION_CRX, 86 FILE_PATH_LITERAL(".grp"),
87 EXTENSION_APK, 87 nullptr, // The "Other" bucket. This is in the middle of the array due to
88 EXTENSION_DMG, 88 // historical reasons.
89 EXTENSION_PKG, 89 FILE_PATH_LITERAL(".crx"),
90 EXTENSION_TORRENT, 90 FILE_PATH_LITERAL(".apk"),
91 EXTENSION_WEBSITE, 91 FILE_PATH_LITERAL(".dmg"),
92 EXTENSION_URL, 92 FILE_PATH_LITERAL(".pkg"),
93 EXTENSION_MAX, 93 FILE_PATH_LITERAL(".torrent"),
94 FILE_PATH_LITERAL(".website"),
95 FILE_PATH_LITERAL(".url"),
96 FILE_PATH_LITERAL(".vbe"),
97 FILE_PATH_LITERAL(".vbs"),
98 FILE_PATH_LITERAL(".js"),
99 FILE_PATH_LITERAL(".jse"),
100 FILE_PATH_LITERAL(".mht"),
101 FILE_PATH_LITERAL(".mhtml"),
102 FILE_PATH_LITERAL(".msc"),
103 FILE_PATH_LITERAL(".msp"),
104 FILE_PATH_LITERAL(".mst"),
105 FILE_PATH_LITERAL(".bas"),
106 FILE_PATH_LITERAL(".hta"),
107 FILE_PATH_LITERAL(".msh"),
108 FILE_PATH_LITERAL(".msh1"),
109 FILE_PATH_LITERAL(".msh1xml"),
110 FILE_PATH_LITERAL(".msh2"),
111 FILE_PATH_LITERAL(".msh2xml"),
112 FILE_PATH_LITERAL(".mshxml"),
113 FILE_PATH_LITERAL(".ps1"),
114 FILE_PATH_LITERAL(".ps1xml"),
115 FILE_PATH_LITERAL(".ps2"),
116 FILE_PATH_LITERAL(".ps2xml"),
117 FILE_PATH_LITERAL(".psc1"),
118 FILE_PATH_LITERAL(".psc2"),
119 FILE_PATH_LITERAL(".scf"),
120 FILE_PATH_LITERAL(".sct"),
121 FILE_PATH_LITERAL(".wsf"),
94 }; 122 };
95 123
96 MaliciousExtensionType GetExtensionType(const base::FilePath& f) { 124 // UMA enumeration value for unrecognized file types. This is the array index of
97 if (f.MatchesExtension(FILE_PATH_LITERAL(".exe"))) return EXTENSION_EXE; 125 // the "Other" bucket in kDangerousFileTypes.
98 if (f.MatchesExtension(FILE_PATH_LITERAL(".msi"))) return EXTENSION_MSI; 126 const int EXTENSION_OTHER = 18;
99 if (f.MatchesExtension(FILE_PATH_LITERAL(".cab"))) return EXTENSION_CAB;
100 if (f.MatchesExtension(FILE_PATH_LITERAL(".sys"))) return EXTENSION_SYS;
101 if (f.MatchesExtension(FILE_PATH_LITERAL(".scr"))) return EXTENSION_SCR;
102 if (f.MatchesExtension(FILE_PATH_LITERAL(".drv"))) return EXTENSION_DRV;
103 if (f.MatchesExtension(FILE_PATH_LITERAL(".bat"))) return EXTENSION_BAT;
104 if (f.MatchesExtension(FILE_PATH_LITERAL(".zip"))) return EXTENSION_ZIP;
105 if (f.MatchesExtension(FILE_PATH_LITERAL(".rar"))) return EXTENSION_RAR;
106 if (f.MatchesExtension(FILE_PATH_LITERAL(".dll"))) return EXTENSION_DLL;
107 if (f.MatchesExtension(FILE_PATH_LITERAL(".pif"))) return EXTENSION_PIF;
108 if (f.MatchesExtension(FILE_PATH_LITERAL(".com"))) return EXTENSION_COM;
109 if (f.MatchesExtension(FILE_PATH_LITERAL(".jar"))) return EXTENSION_JAR;
110 if (f.MatchesExtension(FILE_PATH_LITERAL(".class"))) return EXTENSION_CLASS;
111 if (f.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) return EXTENSION_PDF;
112 if (f.MatchesExtension(FILE_PATH_LITERAL(".vb"))) return EXTENSION_VB;
113 if (f.MatchesExtension(FILE_PATH_LITERAL(".reg"))) return EXTENSION_REG;
114 if (f.MatchesExtension(FILE_PATH_LITERAL(".grp"))) return EXTENSION_GRP;
115 if (f.MatchesExtension(FILE_PATH_LITERAL(".crx"))) return EXTENSION_CRX;
116 if (f.MatchesExtension(FILE_PATH_LITERAL(".apk"))) return EXTENSION_APK;
117 if (f.MatchesExtension(FILE_PATH_LITERAL(".dmg"))) return EXTENSION_DMG;
118 if (f.MatchesExtension(FILE_PATH_LITERAL(".pkg"))) return EXTENSION_PKG;
119 if (f.MatchesExtension(FILE_PATH_LITERAL(".torrent")))
120 return EXTENSION_TORRENT;
121 if (f.MatchesExtension(FILE_PATH_LITERAL(".website")))
122 return EXTENSION_WEBSITE;
123 if (f.MatchesExtension(FILE_PATH_LITERAL(".url"))) return EXTENSION_URL;
124 return EXTENSION_OTHER;
125 }
126 127
127 void RecordFileExtensionType(const base::FilePath& file) { 128 void RecordFileExtensionType(const base::FilePath& file) {
129 DCHECK_EQ(static_cast<base::FilePath::CharType*>(nullptr),
130 kDangerousFileTypes[EXTENSION_OTHER]);
131
132 int extension_type = EXTENSION_OTHER;
133 for (const auto& extension : kDangerousFileTypes) {
134 if (extension && file.MatchesExtension(extension)) {
135 extension_type = &extension - kDangerousFileTypes;
136 break;
137 }
138 }
139
128 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions", 140 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions",
129 GetExtensionType(file), 141 extension_type, arraysize(kDangerousFileTypes));
130 EXTENSION_MAX);
131 } 142 }
132 143
133 // Enumerate for histogramming purposes. 144 // Enumerate for histogramming purposes.
134 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will 145 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will
135 // be mixed together based on their values). 146 // be mixed together based on their values).
136 enum SBStatsType { 147 enum SBStatsType {
137 DOWNLOAD_URL_CHECKS_TOTAL, 148 DOWNLOAD_URL_CHECKS_TOTAL,
138 DOWNLOAD_URL_CHECKS_CANCELED, 149 DOWNLOAD_URL_CHECKS_CANCELED,
139 DOWNLOAD_URL_CHECKS_MALWARE, 150 DOWNLOAD_URL_CHECKS_MALWARE,
140 151
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 631
621 void CheckWhitelists() { 632 void CheckWhitelists() {
622 DCHECK_CURRENTLY_ON(BrowserThread::IO); 633 DCHECK_CURRENTLY_ON(BrowserThread::IO);
623 634
624 if (!database_manager_.get()) { 635 if (!database_manager_.get()) {
625 PostFinishTask(UNKNOWN, REASON_SB_DISABLED); 636 PostFinishTask(UNKNOWN, REASON_SB_DISABLED);
626 return; 637 return;
627 } 638 }
628 639
629 const GURL& url = url_chain_.back(); 640 const GURL& url = url_chain_.back();
641 // TODO(asanka): This may acquire a lock on the SB DB on the IO thread.
630 if (url.is_valid() && database_manager_->MatchDownloadWhitelistUrl(url)) { 642 if (url.is_valid() && database_manager_->MatchDownloadWhitelistUrl(url)) {
631 DVLOG(2) << url << " is on the download whitelist."; 643 DVLOG(2) << url << " is on the download whitelist.";
632 RecordCountOfSignedOrWhitelistedDownload(); 644 RecordCountOfSignedOrWhitelistedDownload();
633 // TODO(grt): Continue processing without uploading so that 645 // TODO(grt): Continue processing without uploading so that
634 // ClientDownloadRequest callbacks can be run even for this type of safe 646 // ClientDownloadRequest callbacks can be run even for this type of safe
635 // download. 647 // download.
636 PostFinishTask(SAFE, REASON_WHITELISTED_URL); 648 PostFinishTask(SAFE, REASON_WHITELISTED_URL);
637 return; 649 return;
638 } 650 }
639 651
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 GURL DownloadProtectionService::GetDownloadRequestUrl() { 1141 GURL DownloadProtectionService::GetDownloadRequestUrl() {
1130 GURL url(kDownloadRequestUrl); 1142 GURL url(kDownloadRequestUrl);
1131 std::string api_key = google_apis::GetAPIKey(); 1143 std::string api_key = google_apis::GetAPIKey();
1132 if (!api_key.empty()) 1144 if (!api_key.empty())
1133 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1145 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1134 1146
1135 return url; 1147 return url;
1136 } 1148 }
1137 1149
1138 } // namespace safe_browsing 1150 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/download/download_extensions.cc ('k') | chrome/common/safe_browsing/download_protection_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698