Index: chrome/common/safe_browsing/download_protection_util.cc |
diff --git a/chrome/common/safe_browsing/download_protection_util.cc b/chrome/common/safe_browsing/download_protection_util.cc |
index d6b35ce4510dcb83c6cc6e493721efd7a03b5e65..25bb01bd6ad0d37ab70ad9095cefb2b4bcb10403 100644 |
--- a/chrome/common/safe_browsing/download_protection_util.cc |
+++ b/chrome/common/safe_browsing/download_protection_util.cc |
@@ -9,608 +9,15 @@ |
#include "base/logging.h" |
#include "base/macros.h" |
#include "base/strings/string_util.h" |
+#include "chrome/common/safe_browsing/file_type_policies.h" |
namespace safe_browsing { |
namespace download_protection_util { |
-namespace { |
- |
-// This enum matches the SBClientDownloadExtensions enum in histograms.xml. If |
-// you are adding a value here, you should also add to the enum definition in |
-// histograms.xml. Additions only at the end just in front of EXTENSION_MAX, |
-// natch. |
-enum SBClientDownloadExtensions { |
- EXTENSION_EXE, |
- EXTENSION_MSI, |
- EXTENSION_CAB, |
- EXTENSION_SYS, |
- EXTENSION_SCR, |
- EXTENSION_DRV, |
- EXTENSION_BAT, |
- EXTENSION_ZIP, |
- EXTENSION_RAR, |
- EXTENSION_DLL, |
- EXTENSION_PIF, |
- EXTENSION_COM, |
- EXTENSION_JAR, |
- EXTENSION_CLASS, |
- EXTENSION_PDF, |
- EXTENSION_VB, |
- EXTENSION_REG, |
- EXTENSION_GRP, |
- EXTENSION_OTHER, // The "other" bucket. This is in the middle of the enum |
- // due to historical reasons. |
- EXTENSION_CRX, |
- EXTENSION_APK, |
- EXTENSION_DMG, |
- EXTENSION_PKG, |
- EXTENSION_TORRENT, |
- EXTENSION_WEBSITE, |
- EXTENSION_URL, |
- EXTENSION_VBE, |
- EXTENSION_VBS, |
- EXTENSION_JS, |
- EXTENSION_JSE, |
- EXTENSION_MHT, |
- EXTENSION_MHTML, |
- EXTENSION_MSC, |
- EXTENSION_MSP, |
- EXTENSION_MST, |
- EXTENSION_BAS, |
- EXTENSION_HTA, |
- EXTENSION_MSH, |
- EXTENSION_MSH1, |
- EXTENSION_MSH1XML, |
- EXTENSION_MSH2, |
- EXTENSION_MSH2XML, |
- EXTENSION_MSHXML, |
- EXTENSION_PS1, |
- EXTENSION_PS1XML, |
- EXTENSION_PS2, |
- EXTENSION_PS2XML, |
- EXTENSION_PSC1, |
- EXTENSION_PSC2, |
- EXTENSION_SCF, |
- EXTENSION_SCT, |
- EXTENSION_WSF, |
- EXTENSION_7Z, |
- EXTENSION_XZ, |
- EXTENSION_GZ, |
- EXTENSION_TGZ, |
- EXTENSION_BZ2, |
- EXTENSION_TAR, |
- EXTENSION_ARJ, |
- EXTENSION_LZH, |
- EXTENSION_LHA, |
- EXTENSION_WIM, |
- EXTENSION_Z, |
- EXTENSION_LZMA, |
- EXTENSION_CPIO, |
- EXTENSION_CMD, |
- EXTENSION_APP, |
- EXTENSION_OSX, |
- EXTENSION_SWF, |
- EXTENSION_SPL, |
- EXTENSION_APPLICATION, |
- EXTENSION_ASP, |
- EXTENSION_ASX, |
- EXTENSION_CFG, |
- EXTENSION_CHI, |
- EXTENSION_CHM, |
- EXTENSION_CPL, |
- EXTENSION_FXP, |
- EXTENSION_HLP, |
- EXTENSION_HTT, |
- EXTENSION_INF, |
- EXTENSION_INI, |
- EXTENSION_INS, |
- EXTENSION_ISP, |
- EXTENSION_LNK, |
- EXTENSION_LOCAL, |
- EXTENSION_MANIFEST, |
- EXTENSION_MAU, |
- EXTENSION_MMC, |
- EXTENSION_MOF, |
- EXTENSION_OCX, |
- EXTENSION_OPS, |
- EXTENSION_PCD, |
- EXTENSION_PLG, |
- EXTENSION_PRF, |
- EXTENSION_PRG, |
- EXTENSION_PST, |
- EXTENSION_CRT, |
- EXTENSION_ADE, |
- EXTENSION_ADP, |
- EXTENSION_MAD, |
- EXTENSION_MAF, |
- EXTENSION_MAG, |
- EXTENSION_MAM, |
- EXTENSION_MAQ, |
- EXTENSION_MAR, |
- EXTENSION_MAS, |
- EXTENSION_MAT, |
- EXTENSION_MAV, |
- EXTENSION_MAW, |
- EXTENSION_MDA, |
- EXTENSION_MDB, |
- EXTENSION_MDE, |
- EXTENSION_MDT, |
- EXTENSION_MDW, |
- EXTENSION_MDZ, |
- EXTENSION_SHB, |
- EXTENSION_SHS, |
- EXTENSION_VSD, |
- EXTENSION_VSMACROS, |
- EXTENSION_VSS, |
- EXTENSION_VST, |
- EXTENSION_VSW, |
- EXTENSION_WS, |
- EXTENSION_WSC, |
- EXTENSION_WSH, |
- EXTENSION_XBAP, |
- EXTENSION_XNK, |
- EXTENSION_JNLP, |
- EXTENSION_PL, |
- EXTENSION_PY, |
- EXTENSION_PYC, |
- EXTENSION_PYW, |
- EXTENSION_RB, |
- EXTENSION_BASH, |
- EXTENSION_CSH, |
- EXTENSION_KSH, |
- EXTENSION_SH, |
- EXTENSION_SHAR, |
- EXTENSION_TCSH, |
- EXTENSION_COMMAND, |
- EXTENSION_DEB, |
- EXTENSION_RPM, |
- EXTENSION_DEX, |
- EXTENSION_APPREF_MS, |
- EXTENSION_GADGET, |
- EXTENSION_EFI, |
- EXTENSION_FON, |
- EXTENSION_BZIP2, |
- EXTENSION_GZIP, |
- EXTENSION_TAZ, |
- EXTENSION_TBZ, |
- EXTENSION_TBZ2, |
- EXTENSION_PARTIAL, |
- EXTENSION_SVG, |
- EXTENSION_XML, |
- EXTENSION_XRM_MS, |
- EXTENSION_XSL, |
- EXTENSION_ACTION, |
- EXTENSION_BIN, |
- EXTENSION_INX, |
- EXTENSION_IPA, |
- EXTENSION_ISU, |
- EXTENSION_JOB, |
- EXTENSION_OUT, |
- EXTENSION_PAD, |
- EXTENSION_PAF, |
- EXTENSION_RGS, |
- EXTENSION_U3P, |
- EXTENSION_VBSCRIPT, |
- EXTENSION_WORKFLOW, |
- EXTENSION_001, |
- EXTENSION_ACE, |
- EXTENSION_ARC, |
- EXTENSION_B64, |
- EXTENSION_BALZ, |
- EXTENSION_BHX, |
- EXTENSION_BZ, |
- EXTENSION_FAT, |
- EXTENSION_HFS, |
- EXTENSION_HQX, |
- EXTENSION_ISO, |
- EXTENSION_LPAQ1, |
- EXTENSION_LPAQ5, |
- EXTENSION_LPAQ8, |
- EXTENSION_MIM, |
- EXTENSION_NTFS, |
- EXTENSION_PAQ8F, |
- EXTENSION_PAQ8JD, |
- EXTENSION_PAQ8L, |
- EXTENSION_PAQ8O, |
- EXTENSION_PEA, |
- EXTENSION_PET, |
- EXTENSION_PUP, |
- EXTENSION_QUAD, |
- EXTENSION_R00, |
- EXTENSION_R01, |
- EXTENSION_R02, |
- EXTENSION_R03, |
- EXTENSION_R04, |
- EXTENSION_R05, |
- EXTENSION_R06, |
- EXTENSION_R07, |
- EXTENSION_R08, |
- EXTENSION_R09, |
- EXTENSION_R10, |
- EXTENSION_R11, |
- EXTENSION_R12, |
- EXTENSION_R13, |
- EXTENSION_R14, |
- EXTENSION_R15, |
- EXTENSION_R16, |
- EXTENSION_R17, |
- EXTENSION_R18, |
- EXTENSION_R19, |
- EXTENSION_R20, |
- EXTENSION_R21, |
- EXTENSION_R22, |
- EXTENSION_R23, |
- EXTENSION_R24, |
- EXTENSION_R25, |
- EXTENSION_R26, |
- EXTENSION_R27, |
- EXTENSION_R28, |
- EXTENSION_R29, |
- EXTENSION_SLP, |
- EXTENSION_SQUASHFS, |
- EXTENSION_SWM, |
- EXTENSION_TPZ, |
- EXTENSION_TXZ, |
- EXTENSION_TZ, |
- EXTENSION_UDF, |
- EXTENSION_UU, |
- EXTENSION_UUE, |
- EXTENSION_VHD, |
- EXTENSION_VMDK, |
- EXTENSION_WRC, |
- EXTENSION_XAR, |
- EXTENSION_XXE, |
- EXTENSION_ZIPX, |
- EXTENSION_ZPAQ, |
- EXTENSION_RELS, |
- EXTENSION_MSG, |
- EXTENSION_EML, |
- EXTENSION_RTF, |
- EXTENSION_VHDX, |
- EXTENSION_SEARCH_MS, |
- EXTENSION_IMG, |
- EXTENSION_SMI, |
- EXTENSION_SPARSEBUNDLE, |
- EXTENSION_SPARSEIMAGE, |
- EXTENSION_CDR, |
- EXTENSION_DMGPART, |
- EXTENSION_DVDR, |
- EXTENSION_DART, |
- EXTENSION_DC42, |
- EXTENSION_DISKCOPY42, |
- EXTENSION_IMGPART, |
- EXTENSION_NDIF, |
- EXTENSION_UDIF, |
- EXTENSION_TOAST, |
- |
- // New values go above this one. |
- EXTENSION_MAX |
-}; |
- |
-static_assert(EXTENSION_TOAST + 1 == EXTENSION_MAX, |
- "You must add new types to download_file_types.asciipb as " |
- "well."); |
- |
-struct SafeBrowsingFiletype { |
- const base::FilePath::CharType* const extension; |
- int uma_value; |
- bool is_supported_binary; |
- bool is_archive; |
-}; |
- |
-const SafeBrowsingFiletype kSafeBrowsingFileTypes[] = { |
- // KEEP THIS LIST SORTED! |
- {FILE_PATH_LITERAL(".001"), EXTENSION_001, true, true}, |
- {FILE_PATH_LITERAL(".7z"), EXTENSION_7Z, true, true}, |
- {FILE_PATH_LITERAL(".ace"), EXTENSION_ACE, true, true}, |
- {FILE_PATH_LITERAL(".action"), EXTENSION_ACTION, false, false}, // UMA. |
- {FILE_PATH_LITERAL(".ade"), EXTENSION_ADE, true, false}, |
- {FILE_PATH_LITERAL(".adp"), EXTENSION_ADP, true, false}, |
- {FILE_PATH_LITERAL(".apk"), EXTENSION_APK, true, false}, |
- {FILE_PATH_LITERAL(".app"), EXTENSION_APP, true, false}, |
- {FILE_PATH_LITERAL(".application"), EXTENSION_APPLICATION, true, false}, |
- {FILE_PATH_LITERAL(".appref-ms"), EXTENSION_APPREF_MS, true, false}, |
- {FILE_PATH_LITERAL(".arc"), EXTENSION_ARC, true, true}, |
- {FILE_PATH_LITERAL(".arj"), EXTENSION_ARJ, true, true}, |
- {FILE_PATH_LITERAL(".asp"), EXTENSION_ASP, true, false}, |
- {FILE_PATH_LITERAL(".asx"), EXTENSION_ASX, true, false}, |
- {FILE_PATH_LITERAL(".b64"), EXTENSION_B64, true, true}, |
- {FILE_PATH_LITERAL(".balz"), EXTENSION_BALZ, true, true}, |
- {FILE_PATH_LITERAL(".bas"), EXTENSION_BAS, true, false}, |
- {FILE_PATH_LITERAL(".bash"), EXTENSION_BASH, true, false}, |
- {FILE_PATH_LITERAL(".bat"), EXTENSION_BAT, true, false}, |
- {FILE_PATH_LITERAL(".bhx"), EXTENSION_BHX, true, true}, |
- {FILE_PATH_LITERAL(".bin"), EXTENSION_BIN, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".bz"), EXTENSION_BZ, true, true}, |
- {FILE_PATH_LITERAL(".bz2"), EXTENSION_BZ2, true, true}, |
- {FILE_PATH_LITERAL(".bzip2"), EXTENSION_BZIP2, true, true}, |
- {FILE_PATH_LITERAL(".cab"), EXTENSION_CAB, true, true}, |
- {FILE_PATH_LITERAL(".cdr"), EXTENSION_CDR, true, false}, |
- {FILE_PATH_LITERAL(".cfg"), EXTENSION_CFG, true, false}, |
- {FILE_PATH_LITERAL(".chi"), EXTENSION_CHI, true, false}, |
- {FILE_PATH_LITERAL(".chm"), EXTENSION_CHM, true, false}, |
- {FILE_PATH_LITERAL(".class"), EXTENSION_CLASS, true, false}, |
- {FILE_PATH_LITERAL(".cmd"), EXTENSION_CMD, true, false}, |
- {FILE_PATH_LITERAL(".com"), EXTENSION_COM, true, false}, |
- {FILE_PATH_LITERAL(".command"), EXTENSION_COMMAND, true, false}, |
- {FILE_PATH_LITERAL(".cpio"), EXTENSION_CPIO, true, true}, |
- {FILE_PATH_LITERAL(".cpl"), EXTENSION_CPL, true, false}, |
- {FILE_PATH_LITERAL(".crt"), EXTENSION_CRT, true, false}, |
- {FILE_PATH_LITERAL(".crx"), EXTENSION_CRX, true, false}, |
- {FILE_PATH_LITERAL(".csh"), EXTENSION_CSH, true, false}, |
- {FILE_PATH_LITERAL(".dart"), EXTENSION_DART, true, false}, |
- {FILE_PATH_LITERAL(".dc42"), EXTENSION_DC42, true, false}, |
- {FILE_PATH_LITERAL(".deb"), EXTENSION_DEB, true, false}, |
- {FILE_PATH_LITERAL(".dex"), EXTENSION_DEX, true, false}, |
- {FILE_PATH_LITERAL(".diskcopy42"), EXTENSION_DISKCOPY42, true, false}, |
- {FILE_PATH_LITERAL(".dll"), EXTENSION_DLL, true, false}, |
- {FILE_PATH_LITERAL(".dmg"), EXTENSION_DMG, true, false}, |
- {FILE_PATH_LITERAL(".dmgpart"), EXTENSION_DMGPART, true, false}, |
- {FILE_PATH_LITERAL(".drv"), EXTENSION_DRV, true, false}, |
- {FILE_PATH_LITERAL(".dvdr"), EXTENSION_DVDR, true, false}, |
- {FILE_PATH_LITERAL(".efi"), EXTENSION_EFI, true, false}, |
- {FILE_PATH_LITERAL(".eml"), EXTENSION_EML, true, false}, |
- {FILE_PATH_LITERAL(".exe"), EXTENSION_EXE, true, false}, |
- {FILE_PATH_LITERAL(".fat"), EXTENSION_FAT, true, true}, |
- {FILE_PATH_LITERAL(".fon"), EXTENSION_FON, true, false}, |
- {FILE_PATH_LITERAL(".fxp"), EXTENSION_FXP, true, false}, |
- {FILE_PATH_LITERAL(".gadget"), EXTENSION_GADGET, true, false}, |
- {FILE_PATH_LITERAL(".grp"), EXTENSION_GRP, true, false}, |
- {FILE_PATH_LITERAL(".gz"), EXTENSION_GZ, true, true}, |
- {FILE_PATH_LITERAL(".gzip"), EXTENSION_GZIP, true, true}, |
- {FILE_PATH_LITERAL(".hfs"), EXTENSION_HFS, true, true}, |
- {FILE_PATH_LITERAL(".hlp"), EXTENSION_HLP, true, false}, |
- {FILE_PATH_LITERAL(".hqx"), EXTENSION_HQX, true, true}, |
- {FILE_PATH_LITERAL(".hta"), EXTENSION_HTA, true, false}, |
- {FILE_PATH_LITERAL(".htt"), EXTENSION_HTT, true, false}, |
- {FILE_PATH_LITERAL(".img"), EXTENSION_IMG, true, false}, |
- {FILE_PATH_LITERAL(".imgpart"), EXTENSION_IMGPART, true, false}, |
- {FILE_PATH_LITERAL(".inf"), EXTENSION_INF, true, false}, |
- {FILE_PATH_LITERAL(".ini"), EXTENSION_INI, true, false}, |
- {FILE_PATH_LITERAL(".ins"), EXTENSION_INS, true, false}, |
- {FILE_PATH_LITERAL(".inx"), EXTENSION_INX, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".ipa"), EXTENSION_IPA, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".iso"), EXTENSION_ISO, true, true}, |
- {FILE_PATH_LITERAL(".isp"), EXTENSION_ISP, true, false}, |
- {FILE_PATH_LITERAL(".isu"), EXTENSION_ISU, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".jar"), EXTENSION_JAR, true, false}, |
- {FILE_PATH_LITERAL(".jnlp"), EXTENSION_JNLP, true, false}, |
- {FILE_PATH_LITERAL(".job"), EXTENSION_JOB, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".js"), EXTENSION_JS, true, false}, |
- {FILE_PATH_LITERAL(".jse"), EXTENSION_JSE, true, false}, |
- {FILE_PATH_LITERAL(".ksh"), EXTENSION_KSH, true, false}, |
- {FILE_PATH_LITERAL(".lha"), EXTENSION_LHA, true, true}, |
- {FILE_PATH_LITERAL(".lnk"), EXTENSION_LNK, true, false}, |
- {FILE_PATH_LITERAL(".local"), EXTENSION_LOCAL, true, false}, |
- {FILE_PATH_LITERAL(".lpaq1"), EXTENSION_LPAQ1, true, true}, |
- {FILE_PATH_LITERAL(".lpaq5"), EXTENSION_LPAQ5, true, true}, |
- {FILE_PATH_LITERAL(".lpaq8"), EXTENSION_LPAQ8, true, true}, |
- {FILE_PATH_LITERAL(".lzh"), EXTENSION_LZH, true, true}, |
- {FILE_PATH_LITERAL(".lzma"), EXTENSION_LZMA, true, true}, |
- {FILE_PATH_LITERAL(".mad"), EXTENSION_MAD, true, false}, |
- {FILE_PATH_LITERAL(".maf"), EXTENSION_MAF, true, false}, |
- {FILE_PATH_LITERAL(".mag"), EXTENSION_MAG, true, false}, |
- {FILE_PATH_LITERAL(".mam"), EXTENSION_MAM, true, false}, |
- {FILE_PATH_LITERAL(".manifest"), EXTENSION_MANIFEST, true, false}, |
- {FILE_PATH_LITERAL(".maq"), EXTENSION_MAQ, true, false}, |
- {FILE_PATH_LITERAL(".mar"), EXTENSION_MAR, true, false}, |
- {FILE_PATH_LITERAL(".mas"), EXTENSION_MAS, true, false}, |
- {FILE_PATH_LITERAL(".mat"), EXTENSION_MAT, true, false}, |
- {FILE_PATH_LITERAL(".mau"), EXTENSION_MAU, true, false}, |
- {FILE_PATH_LITERAL(".mav"), EXTENSION_MAV, true, false}, |
- {FILE_PATH_LITERAL(".maw"), EXTENSION_MAW, true, false}, |
- {FILE_PATH_LITERAL(".mda"), EXTENSION_MDA, true, false}, |
- {FILE_PATH_LITERAL(".mdb"), EXTENSION_MDB, true, false}, |
- {FILE_PATH_LITERAL(".mde"), EXTENSION_MDE, true, false}, |
- {FILE_PATH_LITERAL(".mdt"), EXTENSION_MDT, true, false}, |
- {FILE_PATH_LITERAL(".mdw"), EXTENSION_MDW, true, false}, |
- {FILE_PATH_LITERAL(".mdz"), EXTENSION_MDZ, true, false}, |
- {FILE_PATH_LITERAL(".mht"), EXTENSION_MHT, true, false}, |
- {FILE_PATH_LITERAL(".mhtml"), EXTENSION_MHTML, true, false}, |
- {FILE_PATH_LITERAL(".mim"), EXTENSION_MIM, true, true}, |
- {FILE_PATH_LITERAL(".mmc"), EXTENSION_MMC, true, false}, |
- {FILE_PATH_LITERAL(".mof"), EXTENSION_MOF, true, false}, |
- {FILE_PATH_LITERAL(".msc"), EXTENSION_MSC, true, false}, |
- {FILE_PATH_LITERAL(".msg"), EXTENSION_MSG, true, false}, |
- {FILE_PATH_LITERAL(".msh"), EXTENSION_MSH, true, false}, |
- {FILE_PATH_LITERAL(".msh1"), EXTENSION_MSH1, true, false}, |
- {FILE_PATH_LITERAL(".msh1xml"), EXTENSION_MSH1XML, true, false}, |
- {FILE_PATH_LITERAL(".msh2"), EXTENSION_MSH2, true, false}, |
- {FILE_PATH_LITERAL(".msh2xml"), EXTENSION_MSH2XML, true, false}, |
- {FILE_PATH_LITERAL(".mshxml"), EXTENSION_MSHXML, true, false}, |
- {FILE_PATH_LITERAL(".msi"), EXTENSION_MSI, true, false}, |
- {FILE_PATH_LITERAL(".msp"), EXTENSION_MSP, true, false}, |
- {FILE_PATH_LITERAL(".mst"), EXTENSION_MST, true, false}, |
- {FILE_PATH_LITERAL(".ndif"), EXTENSION_NDIF, true, false}, |
- {FILE_PATH_LITERAL(".ntfs"), EXTENSION_NTFS, true, true}, |
- {FILE_PATH_LITERAL(".ocx"), EXTENSION_OCX, true, false}, |
- {FILE_PATH_LITERAL(".ops"), EXTENSION_OPS, true, false}, |
- {FILE_PATH_LITERAL(".osx"), EXTENSION_OSX, true, false}, |
- {FILE_PATH_LITERAL(".out"), EXTENSION_OUT, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".pad"), EXTENSION_PAD, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".paf"), EXTENSION_PAF, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".paq8f"), EXTENSION_PAQ8F, true, true}, |
- {FILE_PATH_LITERAL(".paq8jd"), EXTENSION_PAQ8JD, true, true}, |
- {FILE_PATH_LITERAL(".paq8l"), EXTENSION_PAQ8L, true, true}, |
- {FILE_PATH_LITERAL(".paq8o"), EXTENSION_PAQ8O, true, true}, |
- {FILE_PATH_LITERAL(".partial"), EXTENSION_PARTIAL, true, false}, |
- {FILE_PATH_LITERAL(".pcd"), EXTENSION_PCD, true, false}, |
- {FILE_PATH_LITERAL(".pea"), EXTENSION_PEA, true, true}, |
- {FILE_PATH_LITERAL(".pet"), EXTENSION_PET, true, true}, |
- {FILE_PATH_LITERAL(".pif"), EXTENSION_PIF, true, false}, |
- {FILE_PATH_LITERAL(".pkg"), EXTENSION_PKG, true, false}, |
- {FILE_PATH_LITERAL(".pl"), EXTENSION_PL, true, false}, |
- {FILE_PATH_LITERAL(".plg"), EXTENSION_PLG, true, false}, |
- {FILE_PATH_LITERAL(".prf"), EXTENSION_PRF, true, false}, |
- {FILE_PATH_LITERAL(".prg"), EXTENSION_PRG, true, false}, |
- {FILE_PATH_LITERAL(".ps1"), EXTENSION_PS1, true, false}, |
- {FILE_PATH_LITERAL(".ps1xml"), EXTENSION_PS1XML, true, false}, |
- {FILE_PATH_LITERAL(".ps2"), EXTENSION_PS2, true, false}, |
- {FILE_PATH_LITERAL(".ps2xml"), EXTENSION_PS2XML, true, false}, |
- {FILE_PATH_LITERAL(".psc1"), EXTENSION_PSC1, true, false}, |
- {FILE_PATH_LITERAL(".psc2"), EXTENSION_PSC2, true, false}, |
- {FILE_PATH_LITERAL(".pst"), EXTENSION_PST, true, false}, |
- {FILE_PATH_LITERAL(".pup"), EXTENSION_PUP, true, true}, |
- {FILE_PATH_LITERAL(".py"), EXTENSION_PY, true, false}, |
- {FILE_PATH_LITERAL(".pyc"), EXTENSION_PYC, true, false}, |
- {FILE_PATH_LITERAL(".pyw"), EXTENSION_PYW, true, false}, |
- {FILE_PATH_LITERAL(".quad"), EXTENSION_QUAD, true, true}, |
- {FILE_PATH_LITERAL(".r00"), EXTENSION_R00, true, true}, |
- {FILE_PATH_LITERAL(".r01"), EXTENSION_R01, true, true}, |
- {FILE_PATH_LITERAL(".r02"), EXTENSION_R02, true, true}, |
- {FILE_PATH_LITERAL(".r03"), EXTENSION_R03, true, true}, |
- {FILE_PATH_LITERAL(".r04"), EXTENSION_R04, true, true}, |
- {FILE_PATH_LITERAL(".r05"), EXTENSION_R05, true, true}, |
- {FILE_PATH_LITERAL(".r06"), EXTENSION_R06, true, true}, |
- {FILE_PATH_LITERAL(".r07"), EXTENSION_R07, true, true}, |
- {FILE_PATH_LITERAL(".r08"), EXTENSION_R08, true, true}, |
- {FILE_PATH_LITERAL(".r09"), EXTENSION_R09, true, true}, |
- {FILE_PATH_LITERAL(".r10"), EXTENSION_R10, true, true}, |
- {FILE_PATH_LITERAL(".r11"), EXTENSION_R11, true, true}, |
- {FILE_PATH_LITERAL(".r12"), EXTENSION_R12, true, true}, |
- {FILE_PATH_LITERAL(".r13"), EXTENSION_R13, true, true}, |
- {FILE_PATH_LITERAL(".r14"), EXTENSION_R14, true, true}, |
- {FILE_PATH_LITERAL(".r15"), EXTENSION_R15, true, true}, |
- {FILE_PATH_LITERAL(".r16"), EXTENSION_R16, true, true}, |
- {FILE_PATH_LITERAL(".r17"), EXTENSION_R17, true, true}, |
- {FILE_PATH_LITERAL(".r18"), EXTENSION_R18, true, true}, |
- {FILE_PATH_LITERAL(".r19"), EXTENSION_R19, true, true}, |
- {FILE_PATH_LITERAL(".r20"), EXTENSION_R20, true, true}, |
- {FILE_PATH_LITERAL(".r21"), EXTENSION_R21, true, true}, |
- {FILE_PATH_LITERAL(".r22"), EXTENSION_R22, true, true}, |
- {FILE_PATH_LITERAL(".r23"), EXTENSION_R23, true, true}, |
- {FILE_PATH_LITERAL(".r24"), EXTENSION_R24, true, true}, |
- {FILE_PATH_LITERAL(".r25"), EXTENSION_R25, true, true}, |
- {FILE_PATH_LITERAL(".r26"), EXTENSION_R26, true, true}, |
- {FILE_PATH_LITERAL(".r27"), EXTENSION_R27, true, true}, |
- {FILE_PATH_LITERAL(".r28"), EXTENSION_R28, true, true}, |
- {FILE_PATH_LITERAL(".r29"), EXTENSION_R29, true, true}, |
- {FILE_PATH_LITERAL(".rar"), EXTENSION_RAR, true, true}, |
- {FILE_PATH_LITERAL(".rb"), EXTENSION_RB, true, false}, |
- {FILE_PATH_LITERAL(".rels"), EXTENSION_RELS, true, false}, |
- {FILE_PATH_LITERAL(".reg"), EXTENSION_REG, true, false}, |
- {FILE_PATH_LITERAL(".rgs"), EXTENSION_RGS, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".rpm"), EXTENSION_RPM, true, false}, |
- {FILE_PATH_LITERAL(".rtf"), EXTENSION_RTF, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".scf"), EXTENSION_SCF, true, false}, |
- {FILE_PATH_LITERAL(".scr"), EXTENSION_SCR, true, false}, |
- {FILE_PATH_LITERAL(".sct"), EXTENSION_SCT, true, false}, |
- {FILE_PATH_LITERAL(".search-ms"), EXTENSION_SEARCH_MS, true, false}, |
- {FILE_PATH_LITERAL(".sh"), EXTENSION_SH, true, false}, |
- {FILE_PATH_LITERAL(".shar"), EXTENSION_SHAR, true, false}, |
- {FILE_PATH_LITERAL(".shb"), EXTENSION_SHB, true, false}, |
- {FILE_PATH_LITERAL(".shs"), EXTENSION_SHS, true, false}, |
- {FILE_PATH_LITERAL(".slp"), EXTENSION_SLP, true, true}, |
- {FILE_PATH_LITERAL(".smi"), EXTENSION_SMI, true, false}, |
- {FILE_PATH_LITERAL(".sparsebundle"), EXTENSION_SPARSEBUNDLE, true, false}, |
- {FILE_PATH_LITERAL(".sparseimage"), EXTENSION_SPARSEIMAGE, true, false}, |
- {FILE_PATH_LITERAL(".spl"), EXTENSION_SPL, true, false}, |
- {FILE_PATH_LITERAL(".squashfs"), EXTENSION_SQUASHFS, true, true}, |
- {FILE_PATH_LITERAL(".svg"), EXTENSION_SVG, true, false}, |
- {FILE_PATH_LITERAL(".swf"), EXTENSION_SWF, true, false}, |
- {FILE_PATH_LITERAL(".swm"), EXTENSION_SWM, true, true}, |
- {FILE_PATH_LITERAL(".sys"), EXTENSION_SYS, true, false}, |
- {FILE_PATH_LITERAL(".tar"), EXTENSION_TAR, true, true}, |
- {FILE_PATH_LITERAL(".taz"), EXTENSION_TAZ, true, true}, |
- {FILE_PATH_LITERAL(".tbz"), EXTENSION_TBZ, true, true}, |
- {FILE_PATH_LITERAL(".tbz2"), EXTENSION_TBZ2, true, true}, |
- {FILE_PATH_LITERAL(".tcsh"), EXTENSION_TCSH, true, false}, |
- {FILE_PATH_LITERAL(".tgz"), EXTENSION_TGZ, true, true}, |
- {FILE_PATH_LITERAL(".toast"), EXTENSION_TOAST, true, false}, |
- {FILE_PATH_LITERAL(".torrent"), EXTENSION_TORRENT, true, false}, |
- {FILE_PATH_LITERAL(".tpz"), EXTENSION_TPZ, true, true}, |
- {FILE_PATH_LITERAL(".txz"), EXTENSION_TXZ, true, true}, |
- {FILE_PATH_LITERAL(".tz"), EXTENSION_TZ, true, true}, |
- {FILE_PATH_LITERAL(".u3p"), EXTENSION_U3P, false, false}, // UMA only. |
- {FILE_PATH_LITERAL(".udf"), EXTENSION_UDF, true, true}, |
- {FILE_PATH_LITERAL(".udif"), EXTENSION_UDIF, true, false}, |
- {FILE_PATH_LITERAL(".url"), EXTENSION_URL, true, false}, |
- {FILE_PATH_LITERAL(".uu"), EXTENSION_UU, true, true}, |
- {FILE_PATH_LITERAL(".uue"), EXTENSION_UUE, true, true}, |
- {FILE_PATH_LITERAL(".vb"), EXTENSION_VB, true, false}, |
- {FILE_PATH_LITERAL(".vbe"), EXTENSION_VBE, true, false}, |
- {FILE_PATH_LITERAL(".vbs"), EXTENSION_VBS, true, false}, |
- {FILE_PATH_LITERAL(".vbscript"), EXTENSION_VBSCRIPT, false, false}, // UMA. |
- {FILE_PATH_LITERAL(".vhd"), EXTENSION_VHD, true, true}, |
- {FILE_PATH_LITERAL(".vhdx"), EXTENSION_VHDX, true, true}, |
- {FILE_PATH_LITERAL(".vmdk"), EXTENSION_VMDK, true, true}, |
- {FILE_PATH_LITERAL(".vsd"), EXTENSION_VSD, true, false}, |
- {FILE_PATH_LITERAL(".vsmacros"), EXTENSION_VSMACROS, true, false}, |
- {FILE_PATH_LITERAL(".vss"), EXTENSION_VSS, true, false}, |
- {FILE_PATH_LITERAL(".vst"), EXTENSION_VST, true, false}, |
- {FILE_PATH_LITERAL(".vsw"), EXTENSION_VSW, true, false}, |
- {FILE_PATH_LITERAL(".website"), EXTENSION_WEBSITE, true, false}, |
- {FILE_PATH_LITERAL(".wim"), EXTENSION_WIM, true, true}, |
- {FILE_PATH_LITERAL(".workflow"), EXTENSION_WORKFLOW, false, false}, // UMA. |
- {FILE_PATH_LITERAL(".wrc"), EXTENSION_WRC, true, true}, |
- {FILE_PATH_LITERAL(".ws"), EXTENSION_WS, true, false}, |
- {FILE_PATH_LITERAL(".wsc"), EXTENSION_WSC, true, false}, |
- {FILE_PATH_LITERAL(".wsf"), EXTENSION_WSF, true, false}, |
- {FILE_PATH_LITERAL(".wsh"), EXTENSION_WSH, true, false}, |
- {FILE_PATH_LITERAL(".xar"), EXTENSION_XAR, true, true}, |
- {FILE_PATH_LITERAL(".xbap"), EXTENSION_XBAP, true, false}, |
- {FILE_PATH_LITERAL(".xml"), EXTENSION_XML, true, false}, |
- {FILE_PATH_LITERAL(".xnk"), EXTENSION_XNK, true, false}, |
- {FILE_PATH_LITERAL(".xrm-ms"), EXTENSION_XRM_MS, true, false}, |
- {FILE_PATH_LITERAL(".xsl"), EXTENSION_XSL, true, false}, |
- {FILE_PATH_LITERAL(".xxe"), EXTENSION_XXE, true, true}, |
- {FILE_PATH_LITERAL(".xz"), EXTENSION_XZ, true, true}, |
- {FILE_PATH_LITERAL(".z"), EXTENSION_Z, true, true}, |
- {FILE_PATH_LITERAL(".zip"), EXTENSION_ZIP, true, true}, |
- {FILE_PATH_LITERAL(".zipx"), EXTENSION_ZIPX, true, true}, |
- {FILE_PATH_LITERAL(".zpaq"), EXTENSION_ZPAQ, true, true}, |
-}; |
- |
-const SafeBrowsingFiletype& GetFileType(const base::FilePath& file) { |
- static const SafeBrowsingFiletype kOther = { |
- nullptr, EXTENSION_OTHER, false, false |
- }; |
- |
- base::FilePath::StringType extension = GetFileExtension(file); |
- SafeBrowsingFiletype needle = {extension.c_str()}; |
- |
- const auto begin = kSafeBrowsingFileTypes; |
- const auto end = kSafeBrowsingFileTypes + arraysize(kSafeBrowsingFileTypes); |
- const auto result = std::lower_bound( |
- begin, end, needle, |
- [](const SafeBrowsingFiletype& left, const SafeBrowsingFiletype& right) { |
- return base::FilePath::CompareLessIgnoreCase(left.extension, |
- right.extension); |
- }); |
- if (result == end || |
- !base::FilePath::CompareEqualIgnoreCase(needle.extension, |
- result->extension)) |
- return kOther; |
- return *result; |
-} |
- |
-} // namespace |
- |
-const int kSBClientDownloadExtensionsMax = EXTENSION_MAX; |
- |
-const base::FilePath::StringType GetFileExtension(const base::FilePath& file) { |
- // Remove trailing space and period characters from the extension. |
- base::FilePath::StringType file_basename = file.BaseName().value(); |
- base::FilePath::StringPieceType trimmed_filename = base::TrimString( |
- file_basename, FILE_PATH_LITERAL(". "), base::TRIM_TRAILING); |
- return base::FilePath(trimmed_filename).FinalExtension(); |
-} |
- |
-bool IsArchiveFile(const base::FilePath& file) { |
- // List of interesting archive file formats in kSafeBrowsingFileTypes is by no |
- // means exhaustive, but are currently file types that Safe Browsing would |
- // like to see pings for due to the possibility of them being used as wrapper |
- // formats for malicious payloads. |
- return GetFileType(file).is_archive; |
-} |
- |
-bool IsSupportedBinaryFile(const base::FilePath& file) { |
- return GetFileType(file).is_supported_binary; |
-} |
- |
ClientDownloadRequest::DownloadType GetDownloadType( |
const base::FilePath& file) { |
- DCHECK(IsSupportedBinaryFile(file)); |
+ // TODO(nparker): Put all of this logic into the FileTypePolicies |
+ // protobuf. |
if (file.MatchesExtension(FILE_PATH_LITERAL(".apk"))) |
return ClientDownloadRequest::ANDROID_APK; |
else if (file.MatchesExtension(FILE_PATH_LITERAL(".crx"))) |
@@ -643,14 +50,10 @@ ClientDownloadRequest::DownloadType GetDownloadType( |
file.MatchesExtension(FILE_PATH_LITERAL(".sparsebundle")) || |
file.MatchesExtension(FILE_PATH_LITERAL(".sparseimage"))) |
return ClientDownloadRequest::MAC_EXECUTABLE; |
- else if (IsArchiveFile(file)) |
+ else if (FileTypePolicies::GetInstance()->IsArchiveFile(file)) |
return ClientDownloadRequest::ARCHIVE; |
return ClientDownloadRequest::WIN_EXECUTABLE; |
} |
-int GetSBClientDownloadExtensionValueForUMA(const base::FilePath& file) { |
- return GetFileType(file).uma_value; |
-} |
- |
} // namespace download_protection_util |
} // namespace safe_browsing |