blob: 9fa1e4d27d9127c6637cb272a0c7212bc46f17ed [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/common/safe_browsing/download_protection_util.h"
#include <algorithm>
#include "base/logging.h"
#include "base/strings/string_util.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,
// New values go above this one.
EXTENSION_MAX
};
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(".7z"), EXTENSION_7Z, 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(".arj"), EXTENSION_ARJ, true, true},
{FILE_PATH_LITERAL(".asp"), EXTENSION_ASP, true, false},
{FILE_PATH_LITERAL(".asx"), EXTENSION_ASX, true, false},
{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(".bin"), EXTENSION_BIN, false, false}, // UMA only.
{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(".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(".deb"), EXTENSION_DEB, true, false},
{FILE_PATH_LITERAL(".dex"), EXTENSION_DEX, true, false},
{FILE_PATH_LITERAL(".dll"), EXTENSION_DLL, true, false},
{FILE_PATH_LITERAL(".dmg"), EXTENSION_DMG, true, false},
{FILE_PATH_LITERAL(".drv"), EXTENSION_DRV, true, false},
{FILE_PATH_LITERAL(".efi"), EXTENSION_EFI, true, false},
{FILE_PATH_LITERAL(".exe"), EXTENSION_EXE, true, false},
{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(".hlp"), EXTENSION_HLP, true, false},
{FILE_PATH_LITERAL(".hta"), EXTENSION_HTA, true, false},
{FILE_PATH_LITERAL(".htt"), EXTENSION_HTT, 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(".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(".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(".mmc"), EXTENSION_MMC, true, false},
{FILE_PATH_LITERAL(".mof"), EXTENSION_MOF, true, false},
{FILE_PATH_LITERAL(".msc"), EXTENSION_MSC, 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(".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(".partial"), EXTENSION_PARTIAL, true, false},
{FILE_PATH_LITERAL(".pcd"), EXTENSION_PCD, true, false},
{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(".py"), EXTENSION_PY, true, false},
{FILE_PATH_LITERAL(".pyc"), EXTENSION_PYC, true, false},
{FILE_PATH_LITERAL(".pyw"), EXTENSION_PYW, true, false},
{FILE_PATH_LITERAL(".rar"), EXTENSION_RAR, true, true},
{FILE_PATH_LITERAL(".rb"), EXTENSION_RB, 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(".scf"), EXTENSION_SCF, true, false},
{FILE_PATH_LITERAL(".scr"), EXTENSION_SCR, true, false},
{FILE_PATH_LITERAL(".sct"), EXTENSION_SCT, 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(".spl"), EXTENSION_SPL, true, false},
{FILE_PATH_LITERAL(".svg"), EXTENSION_SVG, true, false},
{FILE_PATH_LITERAL(".swf"), EXTENSION_SWF, true, false},
{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(".torrent"), EXTENSION_TORRENT, true, false},
{FILE_PATH_LITERAL(".u3p"), EXTENSION_U3P, false, false}, // UMA only.
{FILE_PATH_LITERAL(".url"), EXTENSION_URL, true, false},
{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(".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(".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(".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(".xz"), EXTENSION_XZ, true, true},
{FILE_PATH_LITERAL(".z"), EXTENSION_Z, true, true},
{FILE_PATH_LITERAL(".zip"), EXTENSION_ZIP, 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));
if (file.MatchesExtension(FILE_PATH_LITERAL(".apk")))
return ClientDownloadRequest::ANDROID_APK;
else if (file.MatchesExtension(FILE_PATH_LITERAL(".crx")))
return ClientDownloadRequest::CHROME_EXTENSION;
else if (file.MatchesExtension(FILE_PATH_LITERAL(".zip")))
// DownloadProtectionService doesn't send a ClientDownloadRequest for ZIP
// files unless they contain either executables or archives. The resulting
// DownloadType is either ZIPPED_EXECUTABLE or ZIPPED_ARCHIVE respectively.
// This function will return ZIPPED_EXECUTABLE for ZIP files as a
// placeholder. The correct DownloadType will be determined based on the
// result of analyzing the ZIP file.
return ClientDownloadRequest::ZIPPED_EXECUTABLE;
else if (file.MatchesExtension(FILE_PATH_LITERAL(".dmg")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pkg")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".osx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".app")))
return ClientDownloadRequest::MAC_EXECUTABLE;
else if (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