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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/download_protection_service.cc
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc
index c08c1779a67e4adb6683a3ba0d10335f708eb076..11607f07b72fe42d082a97acc255467ee8468e60 100644
--- a/chrome/browser/safe_browsing/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection_service.cc
@@ -62,72 +62,83 @@ const char DownloadProtectionService::kDownloadRequestUrl[] =
"https://sb-ssl.google.com/safebrowsing/clientreport/download";
namespace {
-// List of extensions for which we track some UMA stats.
-enum MaliciousExtensionType {
- 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, // Groups all other extensions into one bucket.
- EXTENSION_CRX,
- EXTENSION_APK,
- EXTENSION_DMG,
- EXTENSION_PKG,
- EXTENSION_TORRENT,
- EXTENSION_WEBSITE,
- EXTENSION_URL,
- EXTENSION_MAX,
+// List of extensions for which we track some UMA stats. The position of the
+// extension in kDangerousFileTypes is considered to be the UMA enumeration
+// value. Naturally, new values should only be added at the end.
+const base::FilePath::CharType* const kDangerousFileTypes[] = {
+ FILE_PATH_LITERAL(".exe"),
+ FILE_PATH_LITERAL(".msi"),
+ FILE_PATH_LITERAL(".cab"),
+ FILE_PATH_LITERAL(".sys"),
+ FILE_PATH_LITERAL(".scr"),
+ FILE_PATH_LITERAL(".drv"),
+ FILE_PATH_LITERAL(".bat"),
+ FILE_PATH_LITERAL(".zip"),
+ FILE_PATH_LITERAL(".rar"),
+ FILE_PATH_LITERAL(".dll"),
+ FILE_PATH_LITERAL(".pif"),
+ FILE_PATH_LITERAL(".com"),
+ FILE_PATH_LITERAL(".jar"),
+ FILE_PATH_LITERAL(".class"),
+ FILE_PATH_LITERAL(".pdf"),
+ FILE_PATH_LITERAL(".vb"),
+ FILE_PATH_LITERAL(".reg"),
+ FILE_PATH_LITERAL(".grp"),
+ nullptr, // The "Other" bucket. This is in the middle of the array due to
+ // historical reasons.
+ FILE_PATH_LITERAL(".crx"),
+ FILE_PATH_LITERAL(".apk"),
+ FILE_PATH_LITERAL(".dmg"),
+ FILE_PATH_LITERAL(".pkg"),
+ FILE_PATH_LITERAL(".torrent"),
+ FILE_PATH_LITERAL(".website"),
+ FILE_PATH_LITERAL(".url"),
+ FILE_PATH_LITERAL(".vbe"),
+ FILE_PATH_LITERAL(".vbs"),
+ FILE_PATH_LITERAL(".js"),
+ FILE_PATH_LITERAL(".jse"),
+ FILE_PATH_LITERAL(".mht"),
+ FILE_PATH_LITERAL(".mhtml"),
+ FILE_PATH_LITERAL(".msc"),
+ FILE_PATH_LITERAL(".msp"),
+ FILE_PATH_LITERAL(".mst"),
+ FILE_PATH_LITERAL(".bas"),
+ FILE_PATH_LITERAL(".hta"),
+ FILE_PATH_LITERAL(".msh"),
+ FILE_PATH_LITERAL(".msh1"),
+ FILE_PATH_LITERAL(".msh1xml"),
+ FILE_PATH_LITERAL(".msh2"),
+ FILE_PATH_LITERAL(".msh2xml"),
+ FILE_PATH_LITERAL(".mshxml"),
+ FILE_PATH_LITERAL(".ps1"),
+ FILE_PATH_LITERAL(".ps1xml"),
+ FILE_PATH_LITERAL(".ps2"),
+ FILE_PATH_LITERAL(".ps2xml"),
+ FILE_PATH_LITERAL(".psc1"),
+ FILE_PATH_LITERAL(".psc2"),
+ FILE_PATH_LITERAL(".scf"),
+ FILE_PATH_LITERAL(".sct"),
+ FILE_PATH_LITERAL(".wsf"),
};
-MaliciousExtensionType GetExtensionType(const base::FilePath& f) {
- if (f.MatchesExtension(FILE_PATH_LITERAL(".exe"))) return EXTENSION_EXE;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".msi"))) return EXTENSION_MSI;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".cab"))) return EXTENSION_CAB;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".sys"))) return EXTENSION_SYS;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".scr"))) return EXTENSION_SCR;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".drv"))) return EXTENSION_DRV;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".bat"))) return EXTENSION_BAT;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".zip"))) return EXTENSION_ZIP;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".rar"))) return EXTENSION_RAR;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".dll"))) return EXTENSION_DLL;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".pif"))) return EXTENSION_PIF;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".com"))) return EXTENSION_COM;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".jar"))) return EXTENSION_JAR;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".class"))) return EXTENSION_CLASS;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) return EXTENSION_PDF;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".vb"))) return EXTENSION_VB;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".reg"))) return EXTENSION_REG;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".grp"))) return EXTENSION_GRP;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".crx"))) return EXTENSION_CRX;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".apk"))) return EXTENSION_APK;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".dmg"))) return EXTENSION_DMG;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".pkg"))) return EXTENSION_PKG;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".torrent")))
- return EXTENSION_TORRENT;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".website")))
- return EXTENSION_WEBSITE;
- if (f.MatchesExtension(FILE_PATH_LITERAL(".url"))) return EXTENSION_URL;
- return EXTENSION_OTHER;
-}
+// UMA enumeration value for unrecognized file types. This is the array index of
+// the "Other" bucket in kDangerousFileTypes.
+const int EXTENSION_OTHER = 18;
void RecordFileExtensionType(const base::FilePath& file) {
+ DCHECK_EQ(static_cast<base::FilePath::CharType*>(nullptr),
+ kDangerousFileTypes[EXTENSION_OTHER]);
+
+ int extension_type = EXTENSION_OTHER;
+ for (const auto& extension : kDangerousFileTypes) {
+ if (extension && file.MatchesExtension(extension)) {
+ extension_type = &extension - kDangerousFileTypes;
+ break;
+ }
+ }
+
UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions",
- GetExtensionType(file),
- EXTENSION_MAX);
+ extension_type, arraysize(kDangerousFileTypes));
}
// Enumerate for histogramming purposes.
@@ -627,6 +638,7 @@ class DownloadProtectionService::CheckClientDownloadRequest
}
const GURL& url = url_chain_.back();
+ // TODO(asanka): This may acquire a lock on the SB DB on the IO thread.
if (url.is_valid() && database_manager_->MatchDownloadWhitelistUrl(url)) {
DVLOG(2) << url << " is on the download whitelist.";
RecordCountOfSignedOrWhitelistedDownload();
« 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