Chromium Code Reviews

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

Issue 1257233004: [SafeBrowsing] Consolidate extension lookup logic and extension lists. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@double-zip
Patch Set: Fix Windows unit test build. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | 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) 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 45 matching lines...)
56 namespace { 56 namespace {
57 static const int64 kDownloadRequestTimeoutMs = 7000; 57 static const int64 kDownloadRequestTimeoutMs = 7000;
58 } // namespace 58 } // namespace
59 59
60 namespace safe_browsing { 60 namespace safe_browsing {
61 61
62 const char DownloadProtectionService::kDownloadRequestUrl[] = 62 const char DownloadProtectionService::kDownloadRequestUrl[] =
63 "https://sb-ssl.google.com/safebrowsing/clientreport/download"; 63 "https://sb-ssl.google.com/safebrowsing/clientreport/download";
64 64
65 namespace { 65 namespace {
66 // List of extensions for which we track some UMA stats. The position of the
67 // extension in kDangerousFileTypes is considered to be the UMA enumeration
68 // value. Naturally, new values should only be added at the end.
69 const base::FilePath::CharType* const kDangerousFileTypes[] = {
70 FILE_PATH_LITERAL(".exe"),
71 FILE_PATH_LITERAL(".msi"),
72 FILE_PATH_LITERAL(".cab"),
73 FILE_PATH_LITERAL(".sys"),
74 FILE_PATH_LITERAL(".scr"),
75 FILE_PATH_LITERAL(".drv"),
76 FILE_PATH_LITERAL(".bat"),
77 FILE_PATH_LITERAL(".zip"),
78 FILE_PATH_LITERAL(".rar"),
79 FILE_PATH_LITERAL(".dll"),
80 FILE_PATH_LITERAL(".pif"),
81 FILE_PATH_LITERAL(".com"),
82 FILE_PATH_LITERAL(".jar"),
83 FILE_PATH_LITERAL(".class"),
84 FILE_PATH_LITERAL(".pdf"),
85 FILE_PATH_LITERAL(".vb"),
86 FILE_PATH_LITERAL(".reg"),
87 FILE_PATH_LITERAL(".grp"),
88 nullptr, // The "Other" bucket. This is in the middle of the array due to
89 // historical reasons.
90 FILE_PATH_LITERAL(".crx"),
91 FILE_PATH_LITERAL(".apk"),
92 FILE_PATH_LITERAL(".dmg"),
93 FILE_PATH_LITERAL(".pkg"),
94 FILE_PATH_LITERAL(".torrent"),
95 FILE_PATH_LITERAL(".website"),
96 FILE_PATH_LITERAL(".url"),
97 FILE_PATH_LITERAL(".vbe"),
98 FILE_PATH_LITERAL(".vbs"),
99 FILE_PATH_LITERAL(".js"),
100 FILE_PATH_LITERAL(".jse"),
101 FILE_PATH_LITERAL(".mht"),
102 FILE_PATH_LITERAL(".mhtml"),
103 FILE_PATH_LITERAL(".msc"),
104 FILE_PATH_LITERAL(".msp"),
105 FILE_PATH_LITERAL(".mst"),
106 FILE_PATH_LITERAL(".bas"),
107 FILE_PATH_LITERAL(".hta"),
108 FILE_PATH_LITERAL(".msh"),
109 FILE_PATH_LITERAL(".msh1"),
110 FILE_PATH_LITERAL(".msh1xml"),
111 FILE_PATH_LITERAL(".msh2"),
112 FILE_PATH_LITERAL(".msh2xml"),
113 FILE_PATH_LITERAL(".mshxml"),
114 FILE_PATH_LITERAL(".ps1"),
115 FILE_PATH_LITERAL(".ps1xml"),
116 FILE_PATH_LITERAL(".ps2"),
117 FILE_PATH_LITERAL(".ps2xml"),
118 FILE_PATH_LITERAL(".psc1"),
119 FILE_PATH_LITERAL(".psc2"),
120 FILE_PATH_LITERAL(".scf"),
121 FILE_PATH_LITERAL(".sct"),
122 FILE_PATH_LITERAL(".wsf"),
123 FILE_PATH_LITERAL(".7z"),
124 FILE_PATH_LITERAL(".xz"),
125 FILE_PATH_LITERAL(".gz"),
126 FILE_PATH_LITERAL(".tgz"),
127 FILE_PATH_LITERAL(".bz2"),
128 FILE_PATH_LITERAL(".tar"),
129 FILE_PATH_LITERAL(".arj"),
130 FILE_PATH_LITERAL(".lzh"),
131 FILE_PATH_LITERAL(".lha"),
132 FILE_PATH_LITERAL(".wim"),
133 FILE_PATH_LITERAL(".z"),
134 FILE_PATH_LITERAL(".lzma"),
135 FILE_PATH_LITERAL(".cpio"),
136 };
137
138 // UMA enumeration value for unrecognized file types. This is the array index of
139 // the "Other" bucket in kDangerousFileTypes.
140 const int EXTENSION_OTHER = 18;
141
142 // Maximum extension ID returned by GetExtensionTypeForUMA() + 1.
143 const int EXTENSION_MAX = arraysize(kDangerousFileTypes);
144
145 int GetExtensionTypeForUMA(const base::FilePath::StringType& extension) {
146 DCHECK_EQ(static_cast<base::FilePath::CharType*>(nullptr),
147 kDangerousFileTypes[EXTENSION_OTHER]);
148 DCHECK(extension.find(base::FilePath::kExtensionSeparator) == 0 ||
149 extension.empty());
150 DCHECK_EQ(extension, base::FilePath(extension).FinalExtension());
151
152 for (const auto& dangerous_extension : kDangerousFileTypes) {
153 if (dangerous_extension &&
154 base::FilePath::CompareEqualIgnoreCase(dangerous_extension, extension))
155 return &dangerous_extension - kDangerousFileTypes;
156 }
157 return EXTENSION_OTHER;
158 }
159
160 void RecordFileExtensionType(const base::FilePath& file) { 66 void RecordFileExtensionType(const base::FilePath& file) {
161 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions", 67 UMA_HISTOGRAM_ENUMERATION(
162 GetExtensionTypeForUMA(file.FinalExtension()), 68 "SBClientDownload.DownloadExtensions",
163 EXTENSION_MAX); 69 download_protection_util::GetSBClientDownloadExtensionValueForUMA(file),
70 download_protection_util::kSBClientDownloadExtensionsMax);
164 } 71 }
165 72
166 void RecordArchivedArchiveFileExtensionType( 73 void RecordArchivedArchiveFileExtensionType(
167 const base::FilePath::StringType& extension) { 74 const base::FilePath::StringType& extension) {
168 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.ArchivedArchiveExtensions", 75 UMA_HISTOGRAM_ENUMERATION(
169 GetExtensionTypeForUMA(extension), EXTENSION_MAX); 76 "SBClientDownload.ArchivedArchiveExtensions",
77 download_protection_util::GetSBClientDownloadExtensionValueForUMA(
78 base::FilePath(extension)),
79 download_protection_util::kSBClientDownloadExtensionsMax);
170 } 80 }
171 81
172 // Enumerate for histogramming purposes. 82 // Enumerate for histogramming purposes.
173 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will 83 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will
174 // be mixed together based on their values). 84 // be mixed together based on their values).
175 enum SBStatsType { 85 enum SBStatsType {
176 DOWNLOAD_URL_CHECKS_TOTAL, 86 DOWNLOAD_URL_CHECKS_TOTAL,
177 DOWNLOAD_URL_CHECKS_CANCELED, 87 DOWNLOAD_URL_CHECKS_CANCELED,
178 DOWNLOAD_URL_CHECKS_MALWARE, 88 DOWNLOAD_URL_CHECKS_MALWARE,
179 89
(...skipping 989 matching lines...)
1169 GURL DownloadProtectionService::GetDownloadRequestUrl() { 1079 GURL DownloadProtectionService::GetDownloadRequestUrl() {
1170 GURL url(kDownloadRequestUrl); 1080 GURL url(kDownloadRequestUrl);
1171 std::string api_key = google_apis::GetAPIKey(); 1081 std::string api_key = google_apis::GetAPIKey();
1172 if (!api_key.empty()) 1082 if (!api_key.empty())
1173 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1083 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1174 1084
1175 return url; 1085 return url;
1176 } 1086 }
1177 1087
1178 } // namespace safe_browsing 1088 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine