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

Side by Side Diff: chrome/common/safe_browsing/download_protection_util.cc

Issue 1979153002: Use FileTypePolicies for is_archive and is_supported classifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@split_by_platform
Patch Set: rebase Created 4 years, 7 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/common/safe_browsing/download_protection_util.h" 5 #include "chrome/common/safe_browsing/download_protection_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "chrome/common/safe_browsing/file_type_policies.h"
12 13
13 namespace safe_browsing { 14 namespace safe_browsing {
14 namespace download_protection_util { 15 namespace download_protection_util {
15 16
16 namespace {
17
18 // This enum matches the SBClientDownloadExtensions enum in histograms.xml. If
19 // you are adding a value here, you should also add to the enum definition in
20 // histograms.xml. Additions only at the end just in front of EXTENSION_MAX,
21 // natch.
22 enum SBClientDownloadExtensions {
23 EXTENSION_EXE,
24 EXTENSION_MSI,
25 EXTENSION_CAB,
26 EXTENSION_SYS,
27 EXTENSION_SCR,
28 EXTENSION_DRV,
29 EXTENSION_BAT,
30 EXTENSION_ZIP,
31 EXTENSION_RAR,
32 EXTENSION_DLL,
33 EXTENSION_PIF,
34 EXTENSION_COM,
35 EXTENSION_JAR,
36 EXTENSION_CLASS,
37 EXTENSION_PDF,
38 EXTENSION_VB,
39 EXTENSION_REG,
40 EXTENSION_GRP,
41 EXTENSION_OTHER, // The "other" bucket. This is in the middle of the enum
42 // due to historical reasons.
43 EXTENSION_CRX,
44 EXTENSION_APK,
45 EXTENSION_DMG,
46 EXTENSION_PKG,
47 EXTENSION_TORRENT,
48 EXTENSION_WEBSITE,
49 EXTENSION_URL,
50 EXTENSION_VBE,
51 EXTENSION_VBS,
52 EXTENSION_JS,
53 EXTENSION_JSE,
54 EXTENSION_MHT,
55 EXTENSION_MHTML,
56 EXTENSION_MSC,
57 EXTENSION_MSP,
58 EXTENSION_MST,
59 EXTENSION_BAS,
60 EXTENSION_HTA,
61 EXTENSION_MSH,
62 EXTENSION_MSH1,
63 EXTENSION_MSH1XML,
64 EXTENSION_MSH2,
65 EXTENSION_MSH2XML,
66 EXTENSION_MSHXML,
67 EXTENSION_PS1,
68 EXTENSION_PS1XML,
69 EXTENSION_PS2,
70 EXTENSION_PS2XML,
71 EXTENSION_PSC1,
72 EXTENSION_PSC2,
73 EXTENSION_SCF,
74 EXTENSION_SCT,
75 EXTENSION_WSF,
76 EXTENSION_7Z,
77 EXTENSION_XZ,
78 EXTENSION_GZ,
79 EXTENSION_TGZ,
80 EXTENSION_BZ2,
81 EXTENSION_TAR,
82 EXTENSION_ARJ,
83 EXTENSION_LZH,
84 EXTENSION_LHA,
85 EXTENSION_WIM,
86 EXTENSION_Z,
87 EXTENSION_LZMA,
88 EXTENSION_CPIO,
89 EXTENSION_CMD,
90 EXTENSION_APP,
91 EXTENSION_OSX,
92 EXTENSION_SWF,
93 EXTENSION_SPL,
94 EXTENSION_APPLICATION,
95 EXTENSION_ASP,
96 EXTENSION_ASX,
97 EXTENSION_CFG,
98 EXTENSION_CHI,
99 EXTENSION_CHM,
100 EXTENSION_CPL,
101 EXTENSION_FXP,
102 EXTENSION_HLP,
103 EXTENSION_HTT,
104 EXTENSION_INF,
105 EXTENSION_INI,
106 EXTENSION_INS,
107 EXTENSION_ISP,
108 EXTENSION_LNK,
109 EXTENSION_LOCAL,
110 EXTENSION_MANIFEST,
111 EXTENSION_MAU,
112 EXTENSION_MMC,
113 EXTENSION_MOF,
114 EXTENSION_OCX,
115 EXTENSION_OPS,
116 EXTENSION_PCD,
117 EXTENSION_PLG,
118 EXTENSION_PRF,
119 EXTENSION_PRG,
120 EXTENSION_PST,
121 EXTENSION_CRT,
122 EXTENSION_ADE,
123 EXTENSION_ADP,
124 EXTENSION_MAD,
125 EXTENSION_MAF,
126 EXTENSION_MAG,
127 EXTENSION_MAM,
128 EXTENSION_MAQ,
129 EXTENSION_MAR,
130 EXTENSION_MAS,
131 EXTENSION_MAT,
132 EXTENSION_MAV,
133 EXTENSION_MAW,
134 EXTENSION_MDA,
135 EXTENSION_MDB,
136 EXTENSION_MDE,
137 EXTENSION_MDT,
138 EXTENSION_MDW,
139 EXTENSION_MDZ,
140 EXTENSION_SHB,
141 EXTENSION_SHS,
142 EXTENSION_VSD,
143 EXTENSION_VSMACROS,
144 EXTENSION_VSS,
145 EXTENSION_VST,
146 EXTENSION_VSW,
147 EXTENSION_WS,
148 EXTENSION_WSC,
149 EXTENSION_WSH,
150 EXTENSION_XBAP,
151 EXTENSION_XNK,
152 EXTENSION_JNLP,
153 EXTENSION_PL,
154 EXTENSION_PY,
155 EXTENSION_PYC,
156 EXTENSION_PYW,
157 EXTENSION_RB,
158 EXTENSION_BASH,
159 EXTENSION_CSH,
160 EXTENSION_KSH,
161 EXTENSION_SH,
162 EXTENSION_SHAR,
163 EXTENSION_TCSH,
164 EXTENSION_COMMAND,
165 EXTENSION_DEB,
166 EXTENSION_RPM,
167 EXTENSION_DEX,
168 EXTENSION_APPREF_MS,
169 EXTENSION_GADGET,
170 EXTENSION_EFI,
171 EXTENSION_FON,
172 EXTENSION_BZIP2,
173 EXTENSION_GZIP,
174 EXTENSION_TAZ,
175 EXTENSION_TBZ,
176 EXTENSION_TBZ2,
177 EXTENSION_PARTIAL,
178 EXTENSION_SVG,
179 EXTENSION_XML,
180 EXTENSION_XRM_MS,
181 EXTENSION_XSL,
182 EXTENSION_ACTION,
183 EXTENSION_BIN,
184 EXTENSION_INX,
185 EXTENSION_IPA,
186 EXTENSION_ISU,
187 EXTENSION_JOB,
188 EXTENSION_OUT,
189 EXTENSION_PAD,
190 EXTENSION_PAF,
191 EXTENSION_RGS,
192 EXTENSION_U3P,
193 EXTENSION_VBSCRIPT,
194 EXTENSION_WORKFLOW,
195 EXTENSION_001,
196 EXTENSION_ACE,
197 EXTENSION_ARC,
198 EXTENSION_B64,
199 EXTENSION_BALZ,
200 EXTENSION_BHX,
201 EXTENSION_BZ,
202 EXTENSION_FAT,
203 EXTENSION_HFS,
204 EXTENSION_HQX,
205 EXTENSION_ISO,
206 EXTENSION_LPAQ1,
207 EXTENSION_LPAQ5,
208 EXTENSION_LPAQ8,
209 EXTENSION_MIM,
210 EXTENSION_NTFS,
211 EXTENSION_PAQ8F,
212 EXTENSION_PAQ8JD,
213 EXTENSION_PAQ8L,
214 EXTENSION_PAQ8O,
215 EXTENSION_PEA,
216 EXTENSION_PET,
217 EXTENSION_PUP,
218 EXTENSION_QUAD,
219 EXTENSION_R00,
220 EXTENSION_R01,
221 EXTENSION_R02,
222 EXTENSION_R03,
223 EXTENSION_R04,
224 EXTENSION_R05,
225 EXTENSION_R06,
226 EXTENSION_R07,
227 EXTENSION_R08,
228 EXTENSION_R09,
229 EXTENSION_R10,
230 EXTENSION_R11,
231 EXTENSION_R12,
232 EXTENSION_R13,
233 EXTENSION_R14,
234 EXTENSION_R15,
235 EXTENSION_R16,
236 EXTENSION_R17,
237 EXTENSION_R18,
238 EXTENSION_R19,
239 EXTENSION_R20,
240 EXTENSION_R21,
241 EXTENSION_R22,
242 EXTENSION_R23,
243 EXTENSION_R24,
244 EXTENSION_R25,
245 EXTENSION_R26,
246 EXTENSION_R27,
247 EXTENSION_R28,
248 EXTENSION_R29,
249 EXTENSION_SLP,
250 EXTENSION_SQUASHFS,
251 EXTENSION_SWM,
252 EXTENSION_TPZ,
253 EXTENSION_TXZ,
254 EXTENSION_TZ,
255 EXTENSION_UDF,
256 EXTENSION_UU,
257 EXTENSION_UUE,
258 EXTENSION_VHD,
259 EXTENSION_VMDK,
260 EXTENSION_WRC,
261 EXTENSION_XAR,
262 EXTENSION_XXE,
263 EXTENSION_ZIPX,
264 EXTENSION_ZPAQ,
265 EXTENSION_RELS,
266 EXTENSION_MSG,
267 EXTENSION_EML,
268 EXTENSION_RTF,
269 EXTENSION_VHDX,
270 EXTENSION_SEARCH_MS,
271 EXTENSION_IMG,
272 EXTENSION_SMI,
273 EXTENSION_SPARSEBUNDLE,
274 EXTENSION_SPARSEIMAGE,
275 EXTENSION_CDR,
276 EXTENSION_DMGPART,
277 EXTENSION_DVDR,
278 EXTENSION_DART,
279 EXTENSION_DC42,
280 EXTENSION_DISKCOPY42,
281 EXTENSION_IMGPART,
282 EXTENSION_NDIF,
283 EXTENSION_UDIF,
284 EXTENSION_TOAST,
285
286 // New values go above this one.
287 EXTENSION_MAX
288 };
289
290 static_assert(EXTENSION_TOAST + 1 == EXTENSION_MAX,
291 "You must add new types to download_file_types.asciipb as "
292 "well.");
293
294 struct SafeBrowsingFiletype {
295 const base::FilePath::CharType* const extension;
296 int uma_value;
297 bool is_supported_binary;
298 bool is_archive;
299 };
300
301 const SafeBrowsingFiletype kSafeBrowsingFileTypes[] = {
302 // KEEP THIS LIST SORTED!
303 {FILE_PATH_LITERAL(".001"), EXTENSION_001, true, true},
304 {FILE_PATH_LITERAL(".7z"), EXTENSION_7Z, true, true},
305 {FILE_PATH_LITERAL(".ace"), EXTENSION_ACE, true, true},
306 {FILE_PATH_LITERAL(".action"), EXTENSION_ACTION, false, false}, // UMA.
307 {FILE_PATH_LITERAL(".ade"), EXTENSION_ADE, true, false},
308 {FILE_PATH_LITERAL(".adp"), EXTENSION_ADP, true, false},
309 {FILE_PATH_LITERAL(".apk"), EXTENSION_APK, true, false},
310 {FILE_PATH_LITERAL(".app"), EXTENSION_APP, true, false},
311 {FILE_PATH_LITERAL(".application"), EXTENSION_APPLICATION, true, false},
312 {FILE_PATH_LITERAL(".appref-ms"), EXTENSION_APPREF_MS, true, false},
313 {FILE_PATH_LITERAL(".arc"), EXTENSION_ARC, true, true},
314 {FILE_PATH_LITERAL(".arj"), EXTENSION_ARJ, true, true},
315 {FILE_PATH_LITERAL(".asp"), EXTENSION_ASP, true, false},
316 {FILE_PATH_LITERAL(".asx"), EXTENSION_ASX, true, false},
317 {FILE_PATH_LITERAL(".b64"), EXTENSION_B64, true, true},
318 {FILE_PATH_LITERAL(".balz"), EXTENSION_BALZ, true, true},
319 {FILE_PATH_LITERAL(".bas"), EXTENSION_BAS, true, false},
320 {FILE_PATH_LITERAL(".bash"), EXTENSION_BASH, true, false},
321 {FILE_PATH_LITERAL(".bat"), EXTENSION_BAT, true, false},
322 {FILE_PATH_LITERAL(".bhx"), EXTENSION_BHX, true, true},
323 {FILE_PATH_LITERAL(".bin"), EXTENSION_BIN, false, false}, // UMA only.
324 {FILE_PATH_LITERAL(".bz"), EXTENSION_BZ, true, true},
325 {FILE_PATH_LITERAL(".bz2"), EXTENSION_BZ2, true, true},
326 {FILE_PATH_LITERAL(".bzip2"), EXTENSION_BZIP2, true, true},
327 {FILE_PATH_LITERAL(".cab"), EXTENSION_CAB, true, true},
328 {FILE_PATH_LITERAL(".cdr"), EXTENSION_CDR, true, false},
329 {FILE_PATH_LITERAL(".cfg"), EXTENSION_CFG, true, false},
330 {FILE_PATH_LITERAL(".chi"), EXTENSION_CHI, true, false},
331 {FILE_PATH_LITERAL(".chm"), EXTENSION_CHM, true, false},
332 {FILE_PATH_LITERAL(".class"), EXTENSION_CLASS, true, false},
333 {FILE_PATH_LITERAL(".cmd"), EXTENSION_CMD, true, false},
334 {FILE_PATH_LITERAL(".com"), EXTENSION_COM, true, false},
335 {FILE_PATH_LITERAL(".command"), EXTENSION_COMMAND, true, false},
336 {FILE_PATH_LITERAL(".cpio"), EXTENSION_CPIO, true, true},
337 {FILE_PATH_LITERAL(".cpl"), EXTENSION_CPL, true, false},
338 {FILE_PATH_LITERAL(".crt"), EXTENSION_CRT, true, false},
339 {FILE_PATH_LITERAL(".crx"), EXTENSION_CRX, true, false},
340 {FILE_PATH_LITERAL(".csh"), EXTENSION_CSH, true, false},
341 {FILE_PATH_LITERAL(".dart"), EXTENSION_DART, true, false},
342 {FILE_PATH_LITERAL(".dc42"), EXTENSION_DC42, true, false},
343 {FILE_PATH_LITERAL(".deb"), EXTENSION_DEB, true, false},
344 {FILE_PATH_LITERAL(".dex"), EXTENSION_DEX, true, false},
345 {FILE_PATH_LITERAL(".diskcopy42"), EXTENSION_DISKCOPY42, true, false},
346 {FILE_PATH_LITERAL(".dll"), EXTENSION_DLL, true, false},
347 {FILE_PATH_LITERAL(".dmg"), EXTENSION_DMG, true, false},
348 {FILE_PATH_LITERAL(".dmgpart"), EXTENSION_DMGPART, true, false},
349 {FILE_PATH_LITERAL(".drv"), EXTENSION_DRV, true, false},
350 {FILE_PATH_LITERAL(".dvdr"), EXTENSION_DVDR, true, false},
351 {FILE_PATH_LITERAL(".efi"), EXTENSION_EFI, true, false},
352 {FILE_PATH_LITERAL(".eml"), EXTENSION_EML, true, false},
353 {FILE_PATH_LITERAL(".exe"), EXTENSION_EXE, true, false},
354 {FILE_PATH_LITERAL(".fat"), EXTENSION_FAT, true, true},
355 {FILE_PATH_LITERAL(".fon"), EXTENSION_FON, true, false},
356 {FILE_PATH_LITERAL(".fxp"), EXTENSION_FXP, true, false},
357 {FILE_PATH_LITERAL(".gadget"), EXTENSION_GADGET, true, false},
358 {FILE_PATH_LITERAL(".grp"), EXTENSION_GRP, true, false},
359 {FILE_PATH_LITERAL(".gz"), EXTENSION_GZ, true, true},
360 {FILE_PATH_LITERAL(".gzip"), EXTENSION_GZIP, true, true},
361 {FILE_PATH_LITERAL(".hfs"), EXTENSION_HFS, true, true},
362 {FILE_PATH_LITERAL(".hlp"), EXTENSION_HLP, true, false},
363 {FILE_PATH_LITERAL(".hqx"), EXTENSION_HQX, true, true},
364 {FILE_PATH_LITERAL(".hta"), EXTENSION_HTA, true, false},
365 {FILE_PATH_LITERAL(".htt"), EXTENSION_HTT, true, false},
366 {FILE_PATH_LITERAL(".img"), EXTENSION_IMG, true, false},
367 {FILE_PATH_LITERAL(".imgpart"), EXTENSION_IMGPART, true, false},
368 {FILE_PATH_LITERAL(".inf"), EXTENSION_INF, true, false},
369 {FILE_PATH_LITERAL(".ini"), EXTENSION_INI, true, false},
370 {FILE_PATH_LITERAL(".ins"), EXTENSION_INS, true, false},
371 {FILE_PATH_LITERAL(".inx"), EXTENSION_INX, false, false}, // UMA only.
372 {FILE_PATH_LITERAL(".ipa"), EXTENSION_IPA, false, false}, // UMA only.
373 {FILE_PATH_LITERAL(".iso"), EXTENSION_ISO, true, true},
374 {FILE_PATH_LITERAL(".isp"), EXTENSION_ISP, true, false},
375 {FILE_PATH_LITERAL(".isu"), EXTENSION_ISU, false, false}, // UMA only.
376 {FILE_PATH_LITERAL(".jar"), EXTENSION_JAR, true, false},
377 {FILE_PATH_LITERAL(".jnlp"), EXTENSION_JNLP, true, false},
378 {FILE_PATH_LITERAL(".job"), EXTENSION_JOB, false, false}, // UMA only.
379 {FILE_PATH_LITERAL(".js"), EXTENSION_JS, true, false},
380 {FILE_PATH_LITERAL(".jse"), EXTENSION_JSE, true, false},
381 {FILE_PATH_LITERAL(".ksh"), EXTENSION_KSH, true, false},
382 {FILE_PATH_LITERAL(".lha"), EXTENSION_LHA, true, true},
383 {FILE_PATH_LITERAL(".lnk"), EXTENSION_LNK, true, false},
384 {FILE_PATH_LITERAL(".local"), EXTENSION_LOCAL, true, false},
385 {FILE_PATH_LITERAL(".lpaq1"), EXTENSION_LPAQ1, true, true},
386 {FILE_PATH_LITERAL(".lpaq5"), EXTENSION_LPAQ5, true, true},
387 {FILE_PATH_LITERAL(".lpaq8"), EXTENSION_LPAQ8, true, true},
388 {FILE_PATH_LITERAL(".lzh"), EXTENSION_LZH, true, true},
389 {FILE_PATH_LITERAL(".lzma"), EXTENSION_LZMA, true, true},
390 {FILE_PATH_LITERAL(".mad"), EXTENSION_MAD, true, false},
391 {FILE_PATH_LITERAL(".maf"), EXTENSION_MAF, true, false},
392 {FILE_PATH_LITERAL(".mag"), EXTENSION_MAG, true, false},
393 {FILE_PATH_LITERAL(".mam"), EXTENSION_MAM, true, false},
394 {FILE_PATH_LITERAL(".manifest"), EXTENSION_MANIFEST, true, false},
395 {FILE_PATH_LITERAL(".maq"), EXTENSION_MAQ, true, false},
396 {FILE_PATH_LITERAL(".mar"), EXTENSION_MAR, true, false},
397 {FILE_PATH_LITERAL(".mas"), EXTENSION_MAS, true, false},
398 {FILE_PATH_LITERAL(".mat"), EXTENSION_MAT, true, false},
399 {FILE_PATH_LITERAL(".mau"), EXTENSION_MAU, true, false},
400 {FILE_PATH_LITERAL(".mav"), EXTENSION_MAV, true, false},
401 {FILE_PATH_LITERAL(".maw"), EXTENSION_MAW, true, false},
402 {FILE_PATH_LITERAL(".mda"), EXTENSION_MDA, true, false},
403 {FILE_PATH_LITERAL(".mdb"), EXTENSION_MDB, true, false},
404 {FILE_PATH_LITERAL(".mde"), EXTENSION_MDE, true, false},
405 {FILE_PATH_LITERAL(".mdt"), EXTENSION_MDT, true, false},
406 {FILE_PATH_LITERAL(".mdw"), EXTENSION_MDW, true, false},
407 {FILE_PATH_LITERAL(".mdz"), EXTENSION_MDZ, true, false},
408 {FILE_PATH_LITERAL(".mht"), EXTENSION_MHT, true, false},
409 {FILE_PATH_LITERAL(".mhtml"), EXTENSION_MHTML, true, false},
410 {FILE_PATH_LITERAL(".mim"), EXTENSION_MIM, true, true},
411 {FILE_PATH_LITERAL(".mmc"), EXTENSION_MMC, true, false},
412 {FILE_PATH_LITERAL(".mof"), EXTENSION_MOF, true, false},
413 {FILE_PATH_LITERAL(".msc"), EXTENSION_MSC, true, false},
414 {FILE_PATH_LITERAL(".msg"), EXTENSION_MSG, true, false},
415 {FILE_PATH_LITERAL(".msh"), EXTENSION_MSH, true, false},
416 {FILE_PATH_LITERAL(".msh1"), EXTENSION_MSH1, true, false},
417 {FILE_PATH_LITERAL(".msh1xml"), EXTENSION_MSH1XML, true, false},
418 {FILE_PATH_LITERAL(".msh2"), EXTENSION_MSH2, true, false},
419 {FILE_PATH_LITERAL(".msh2xml"), EXTENSION_MSH2XML, true, false},
420 {FILE_PATH_LITERAL(".mshxml"), EXTENSION_MSHXML, true, false},
421 {FILE_PATH_LITERAL(".msi"), EXTENSION_MSI, true, false},
422 {FILE_PATH_LITERAL(".msp"), EXTENSION_MSP, true, false},
423 {FILE_PATH_LITERAL(".mst"), EXTENSION_MST, true, false},
424 {FILE_PATH_LITERAL(".ndif"), EXTENSION_NDIF, true, false},
425 {FILE_PATH_LITERAL(".ntfs"), EXTENSION_NTFS, true, true},
426 {FILE_PATH_LITERAL(".ocx"), EXTENSION_OCX, true, false},
427 {FILE_PATH_LITERAL(".ops"), EXTENSION_OPS, true, false},
428 {FILE_PATH_LITERAL(".osx"), EXTENSION_OSX, true, false},
429 {FILE_PATH_LITERAL(".out"), EXTENSION_OUT, false, false}, // UMA only.
430 {FILE_PATH_LITERAL(".pad"), EXTENSION_PAD, false, false}, // UMA only.
431 {FILE_PATH_LITERAL(".paf"), EXTENSION_PAF, false, false}, // UMA only.
432 {FILE_PATH_LITERAL(".paq8f"), EXTENSION_PAQ8F, true, true},
433 {FILE_PATH_LITERAL(".paq8jd"), EXTENSION_PAQ8JD, true, true},
434 {FILE_PATH_LITERAL(".paq8l"), EXTENSION_PAQ8L, true, true},
435 {FILE_PATH_LITERAL(".paq8o"), EXTENSION_PAQ8O, true, true},
436 {FILE_PATH_LITERAL(".partial"), EXTENSION_PARTIAL, true, false},
437 {FILE_PATH_LITERAL(".pcd"), EXTENSION_PCD, true, false},
438 {FILE_PATH_LITERAL(".pea"), EXTENSION_PEA, true, true},
439 {FILE_PATH_LITERAL(".pet"), EXTENSION_PET, true, true},
440 {FILE_PATH_LITERAL(".pif"), EXTENSION_PIF, true, false},
441 {FILE_PATH_LITERAL(".pkg"), EXTENSION_PKG, true, false},
442 {FILE_PATH_LITERAL(".pl"), EXTENSION_PL, true, false},
443 {FILE_PATH_LITERAL(".plg"), EXTENSION_PLG, true, false},
444 {FILE_PATH_LITERAL(".prf"), EXTENSION_PRF, true, false},
445 {FILE_PATH_LITERAL(".prg"), EXTENSION_PRG, true, false},
446 {FILE_PATH_LITERAL(".ps1"), EXTENSION_PS1, true, false},
447 {FILE_PATH_LITERAL(".ps1xml"), EXTENSION_PS1XML, true, false},
448 {FILE_PATH_LITERAL(".ps2"), EXTENSION_PS2, true, false},
449 {FILE_PATH_LITERAL(".ps2xml"), EXTENSION_PS2XML, true, false},
450 {FILE_PATH_LITERAL(".psc1"), EXTENSION_PSC1, true, false},
451 {FILE_PATH_LITERAL(".psc2"), EXTENSION_PSC2, true, false},
452 {FILE_PATH_LITERAL(".pst"), EXTENSION_PST, true, false},
453 {FILE_PATH_LITERAL(".pup"), EXTENSION_PUP, true, true},
454 {FILE_PATH_LITERAL(".py"), EXTENSION_PY, true, false},
455 {FILE_PATH_LITERAL(".pyc"), EXTENSION_PYC, true, false},
456 {FILE_PATH_LITERAL(".pyw"), EXTENSION_PYW, true, false},
457 {FILE_PATH_LITERAL(".quad"), EXTENSION_QUAD, true, true},
458 {FILE_PATH_LITERAL(".r00"), EXTENSION_R00, true, true},
459 {FILE_PATH_LITERAL(".r01"), EXTENSION_R01, true, true},
460 {FILE_PATH_LITERAL(".r02"), EXTENSION_R02, true, true},
461 {FILE_PATH_LITERAL(".r03"), EXTENSION_R03, true, true},
462 {FILE_PATH_LITERAL(".r04"), EXTENSION_R04, true, true},
463 {FILE_PATH_LITERAL(".r05"), EXTENSION_R05, true, true},
464 {FILE_PATH_LITERAL(".r06"), EXTENSION_R06, true, true},
465 {FILE_PATH_LITERAL(".r07"), EXTENSION_R07, true, true},
466 {FILE_PATH_LITERAL(".r08"), EXTENSION_R08, true, true},
467 {FILE_PATH_LITERAL(".r09"), EXTENSION_R09, true, true},
468 {FILE_PATH_LITERAL(".r10"), EXTENSION_R10, true, true},
469 {FILE_PATH_LITERAL(".r11"), EXTENSION_R11, true, true},
470 {FILE_PATH_LITERAL(".r12"), EXTENSION_R12, true, true},
471 {FILE_PATH_LITERAL(".r13"), EXTENSION_R13, true, true},
472 {FILE_PATH_LITERAL(".r14"), EXTENSION_R14, true, true},
473 {FILE_PATH_LITERAL(".r15"), EXTENSION_R15, true, true},
474 {FILE_PATH_LITERAL(".r16"), EXTENSION_R16, true, true},
475 {FILE_PATH_LITERAL(".r17"), EXTENSION_R17, true, true},
476 {FILE_PATH_LITERAL(".r18"), EXTENSION_R18, true, true},
477 {FILE_PATH_LITERAL(".r19"), EXTENSION_R19, true, true},
478 {FILE_PATH_LITERAL(".r20"), EXTENSION_R20, true, true},
479 {FILE_PATH_LITERAL(".r21"), EXTENSION_R21, true, true},
480 {FILE_PATH_LITERAL(".r22"), EXTENSION_R22, true, true},
481 {FILE_PATH_LITERAL(".r23"), EXTENSION_R23, true, true},
482 {FILE_PATH_LITERAL(".r24"), EXTENSION_R24, true, true},
483 {FILE_PATH_LITERAL(".r25"), EXTENSION_R25, true, true},
484 {FILE_PATH_LITERAL(".r26"), EXTENSION_R26, true, true},
485 {FILE_PATH_LITERAL(".r27"), EXTENSION_R27, true, true},
486 {FILE_PATH_LITERAL(".r28"), EXTENSION_R28, true, true},
487 {FILE_PATH_LITERAL(".r29"), EXTENSION_R29, true, true},
488 {FILE_PATH_LITERAL(".rar"), EXTENSION_RAR, true, true},
489 {FILE_PATH_LITERAL(".rb"), EXTENSION_RB, true, false},
490 {FILE_PATH_LITERAL(".rels"), EXTENSION_RELS, true, false},
491 {FILE_PATH_LITERAL(".reg"), EXTENSION_REG, true, false},
492 {FILE_PATH_LITERAL(".rgs"), EXTENSION_RGS, false, false}, // UMA only.
493 {FILE_PATH_LITERAL(".rpm"), EXTENSION_RPM, true, false},
494 {FILE_PATH_LITERAL(".rtf"), EXTENSION_RTF, false, false}, // UMA only.
495 {FILE_PATH_LITERAL(".scf"), EXTENSION_SCF, true, false},
496 {FILE_PATH_LITERAL(".scr"), EXTENSION_SCR, true, false},
497 {FILE_PATH_LITERAL(".sct"), EXTENSION_SCT, true, false},
498 {FILE_PATH_LITERAL(".search-ms"), EXTENSION_SEARCH_MS, true, false},
499 {FILE_PATH_LITERAL(".sh"), EXTENSION_SH, true, false},
500 {FILE_PATH_LITERAL(".shar"), EXTENSION_SHAR, true, false},
501 {FILE_PATH_LITERAL(".shb"), EXTENSION_SHB, true, false},
502 {FILE_PATH_LITERAL(".shs"), EXTENSION_SHS, true, false},
503 {FILE_PATH_LITERAL(".slp"), EXTENSION_SLP, true, true},
504 {FILE_PATH_LITERAL(".smi"), EXTENSION_SMI, true, false},
505 {FILE_PATH_LITERAL(".sparsebundle"), EXTENSION_SPARSEBUNDLE, true, false},
506 {FILE_PATH_LITERAL(".sparseimage"), EXTENSION_SPARSEIMAGE, true, false},
507 {FILE_PATH_LITERAL(".spl"), EXTENSION_SPL, true, false},
508 {FILE_PATH_LITERAL(".squashfs"), EXTENSION_SQUASHFS, true, true},
509 {FILE_PATH_LITERAL(".svg"), EXTENSION_SVG, true, false},
510 {FILE_PATH_LITERAL(".swf"), EXTENSION_SWF, true, false},
511 {FILE_PATH_LITERAL(".swm"), EXTENSION_SWM, true, true},
512 {FILE_PATH_LITERAL(".sys"), EXTENSION_SYS, true, false},
513 {FILE_PATH_LITERAL(".tar"), EXTENSION_TAR, true, true},
514 {FILE_PATH_LITERAL(".taz"), EXTENSION_TAZ, true, true},
515 {FILE_PATH_LITERAL(".tbz"), EXTENSION_TBZ, true, true},
516 {FILE_PATH_LITERAL(".tbz2"), EXTENSION_TBZ2, true, true},
517 {FILE_PATH_LITERAL(".tcsh"), EXTENSION_TCSH, true, false},
518 {FILE_PATH_LITERAL(".tgz"), EXTENSION_TGZ, true, true},
519 {FILE_PATH_LITERAL(".toast"), EXTENSION_TOAST, true, false},
520 {FILE_PATH_LITERAL(".torrent"), EXTENSION_TORRENT, true, false},
521 {FILE_PATH_LITERAL(".tpz"), EXTENSION_TPZ, true, true},
522 {FILE_PATH_LITERAL(".txz"), EXTENSION_TXZ, true, true},
523 {FILE_PATH_LITERAL(".tz"), EXTENSION_TZ, true, true},
524 {FILE_PATH_LITERAL(".u3p"), EXTENSION_U3P, false, false}, // UMA only.
525 {FILE_PATH_LITERAL(".udf"), EXTENSION_UDF, true, true},
526 {FILE_PATH_LITERAL(".udif"), EXTENSION_UDIF, true, false},
527 {FILE_PATH_LITERAL(".url"), EXTENSION_URL, true, false},
528 {FILE_PATH_LITERAL(".uu"), EXTENSION_UU, true, true},
529 {FILE_PATH_LITERAL(".uue"), EXTENSION_UUE, true, true},
530 {FILE_PATH_LITERAL(".vb"), EXTENSION_VB, true, false},
531 {FILE_PATH_LITERAL(".vbe"), EXTENSION_VBE, true, false},
532 {FILE_PATH_LITERAL(".vbs"), EXTENSION_VBS, true, false},
533 {FILE_PATH_LITERAL(".vbscript"), EXTENSION_VBSCRIPT, false, false}, // UMA.
534 {FILE_PATH_LITERAL(".vhd"), EXTENSION_VHD, true, true},
535 {FILE_PATH_LITERAL(".vhdx"), EXTENSION_VHDX, true, true},
536 {FILE_PATH_LITERAL(".vmdk"), EXTENSION_VMDK, true, true},
537 {FILE_PATH_LITERAL(".vsd"), EXTENSION_VSD, true, false},
538 {FILE_PATH_LITERAL(".vsmacros"), EXTENSION_VSMACROS, true, false},
539 {FILE_PATH_LITERAL(".vss"), EXTENSION_VSS, true, false},
540 {FILE_PATH_LITERAL(".vst"), EXTENSION_VST, true, false},
541 {FILE_PATH_LITERAL(".vsw"), EXTENSION_VSW, true, false},
542 {FILE_PATH_LITERAL(".website"), EXTENSION_WEBSITE, true, false},
543 {FILE_PATH_LITERAL(".wim"), EXTENSION_WIM, true, true},
544 {FILE_PATH_LITERAL(".workflow"), EXTENSION_WORKFLOW, false, false}, // UMA.
545 {FILE_PATH_LITERAL(".wrc"), EXTENSION_WRC, true, true},
546 {FILE_PATH_LITERAL(".ws"), EXTENSION_WS, true, false},
547 {FILE_PATH_LITERAL(".wsc"), EXTENSION_WSC, true, false},
548 {FILE_PATH_LITERAL(".wsf"), EXTENSION_WSF, true, false},
549 {FILE_PATH_LITERAL(".wsh"), EXTENSION_WSH, true, false},
550 {FILE_PATH_LITERAL(".xar"), EXTENSION_XAR, true, true},
551 {FILE_PATH_LITERAL(".xbap"), EXTENSION_XBAP, true, false},
552 {FILE_PATH_LITERAL(".xml"), EXTENSION_XML, true, false},
553 {FILE_PATH_LITERAL(".xnk"), EXTENSION_XNK, true, false},
554 {FILE_PATH_LITERAL(".xrm-ms"), EXTENSION_XRM_MS, true, false},
555 {FILE_PATH_LITERAL(".xsl"), EXTENSION_XSL, true, false},
556 {FILE_PATH_LITERAL(".xxe"), EXTENSION_XXE, true, true},
557 {FILE_PATH_LITERAL(".xz"), EXTENSION_XZ, true, true},
558 {FILE_PATH_LITERAL(".z"), EXTENSION_Z, true, true},
559 {FILE_PATH_LITERAL(".zip"), EXTENSION_ZIP, true, true},
560 {FILE_PATH_LITERAL(".zipx"), EXTENSION_ZIPX, true, true},
561 {FILE_PATH_LITERAL(".zpaq"), EXTENSION_ZPAQ, true, true},
562 };
563
564 const SafeBrowsingFiletype& GetFileType(const base::FilePath& file) {
565 static const SafeBrowsingFiletype kOther = {
566 nullptr, EXTENSION_OTHER, false, false
567 };
568
569 base::FilePath::StringType extension = GetFileExtension(file);
570 SafeBrowsingFiletype needle = {extension.c_str()};
571
572 const auto begin = kSafeBrowsingFileTypes;
573 const auto end = kSafeBrowsingFileTypes + arraysize(kSafeBrowsingFileTypes);
574 const auto result = std::lower_bound(
575 begin, end, needle,
576 [](const SafeBrowsingFiletype& left, const SafeBrowsingFiletype& right) {
577 return base::FilePath::CompareLessIgnoreCase(left.extension,
578 right.extension);
579 });
580 if (result == end ||
581 !base::FilePath::CompareEqualIgnoreCase(needle.extension,
582 result->extension))
583 return kOther;
584 return *result;
585 }
586
587 } // namespace
588
589 const int kSBClientDownloadExtensionsMax = EXTENSION_MAX;
590
591 const base::FilePath::StringType GetFileExtension(const base::FilePath& file) {
592 // Remove trailing space and period characters from the extension.
593 base::FilePath::StringType file_basename = file.BaseName().value();
594 base::FilePath::StringPieceType trimmed_filename = base::TrimString(
595 file_basename, FILE_PATH_LITERAL(". "), base::TRIM_TRAILING);
596 return base::FilePath(trimmed_filename).FinalExtension();
597 }
598
599 bool IsArchiveFile(const base::FilePath& file) {
600 // List of interesting archive file formats in kSafeBrowsingFileTypes is by no
601 // means exhaustive, but are currently file types that Safe Browsing would
602 // like to see pings for due to the possibility of them being used as wrapper
603 // formats for malicious payloads.
604 return GetFileType(file).is_archive;
605 }
606
607 bool IsSupportedBinaryFile(const base::FilePath& file) {
608 return GetFileType(file).is_supported_binary;
609 }
610
611 ClientDownloadRequest::DownloadType GetDownloadType( 17 ClientDownloadRequest::DownloadType GetDownloadType(
612 const base::FilePath& file) { 18 const base::FilePath& file) {
613 DCHECK(IsSupportedBinaryFile(file)); 19 // TODO(nparker): Put all of this logic into the FileTypePolicies
20 // protobuf.
614 if (file.MatchesExtension(FILE_PATH_LITERAL(".apk"))) 21 if (file.MatchesExtension(FILE_PATH_LITERAL(".apk")))
615 return ClientDownloadRequest::ANDROID_APK; 22 return ClientDownloadRequest::ANDROID_APK;
616 else if (file.MatchesExtension(FILE_PATH_LITERAL(".crx"))) 23 else if (file.MatchesExtension(FILE_PATH_LITERAL(".crx")))
617 return ClientDownloadRequest::CHROME_EXTENSION; 24 return ClientDownloadRequest::CHROME_EXTENSION;
618 else if (file.MatchesExtension(FILE_PATH_LITERAL(".zip"))) 25 else if (file.MatchesExtension(FILE_PATH_LITERAL(".zip")))
619 // DownloadProtectionService doesn't send a ClientDownloadRequest for ZIP 26 // DownloadProtectionService doesn't send a ClientDownloadRequest for ZIP
620 // files unless they contain either executables or archives. The resulting 27 // files unless they contain either executables or archives. The resulting
621 // DownloadType is either ZIPPED_EXECUTABLE or ZIPPED_ARCHIVE respectively. 28 // DownloadType is either ZIPPED_EXECUTABLE or ZIPPED_ARCHIVE respectively.
622 // This function will return ZIPPED_EXECUTABLE for ZIP files as a 29 // This function will return ZIPPED_EXECUTABLE for ZIP files as a
623 // placeholder. The correct DownloadType will be determined based on the 30 // placeholder. The correct DownloadType will be determined based on the
(...skipping 12 matching lines...) Expand all
636 file.MatchesExtension(FILE_PATH_LITERAL(".dart")) || 43 file.MatchesExtension(FILE_PATH_LITERAL(".dart")) ||
637 file.MatchesExtension(FILE_PATH_LITERAL(".dc42")) || 44 file.MatchesExtension(FILE_PATH_LITERAL(".dc42")) ||
638 file.MatchesExtension(FILE_PATH_LITERAL(".diskcopy42")) || 45 file.MatchesExtension(FILE_PATH_LITERAL(".diskcopy42")) ||
639 file.MatchesExtension(FILE_PATH_LITERAL(".imgpart")) || 46 file.MatchesExtension(FILE_PATH_LITERAL(".imgpart")) ||
640 file.MatchesExtension(FILE_PATH_LITERAL(".ndif")) || 47 file.MatchesExtension(FILE_PATH_LITERAL(".ndif")) ||
641 file.MatchesExtension(FILE_PATH_LITERAL(".udif")) || 48 file.MatchesExtension(FILE_PATH_LITERAL(".udif")) ||
642 file.MatchesExtension(FILE_PATH_LITERAL(".toast")) || 49 file.MatchesExtension(FILE_PATH_LITERAL(".toast")) ||
643 file.MatchesExtension(FILE_PATH_LITERAL(".sparsebundle")) || 50 file.MatchesExtension(FILE_PATH_LITERAL(".sparsebundle")) ||
644 file.MatchesExtension(FILE_PATH_LITERAL(".sparseimage"))) 51 file.MatchesExtension(FILE_PATH_LITERAL(".sparseimage")))
645 return ClientDownloadRequest::MAC_EXECUTABLE; 52 return ClientDownloadRequest::MAC_EXECUTABLE;
646 else if (IsArchiveFile(file)) 53 else if (FileTypePolicies::GlobalInstance()->IsArchiveFile(file))
647 return ClientDownloadRequest::ARCHIVE; 54 return ClientDownloadRequest::ARCHIVE;
648 return ClientDownloadRequest::WIN_EXECUTABLE; 55 return ClientDownloadRequest::WIN_EXECUTABLE;
649 } 56 }
650 57
651 int GetSBClientDownloadExtensionValueForUMA(const base::FilePath& file) {
652 return GetFileType(file).uma_value;
653 }
654
655 } // namespace download_protection_util 58 } // namespace download_protection_util
656 } // namespace safe_browsing 59 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698