blob: a7967401240eec6f925391d243064c204251da8b [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_type_util.h"
#include <algorithm>
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/strings/string_util.h"
#include "chrome/common/safe_browsing/file_type_policies.h"
#include "components/safe_browsing/features.h"
namespace safe_browsing {
namespace download_type_util {
ClientDownloadRequest::DownloadType GetDownloadType(
const base::FilePath& 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")))
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(".rar")))
// See the comment for .zip files.
return ClientDownloadRequest::RAR_COMPRESSED_EXECUTABLE;
else if (file.MatchesExtension(FILE_PATH_LITERAL(".dmg")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".img")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".iso")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pkg")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".mpkg")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".smi")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".app")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".cdr")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dmgpart")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dvdr")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dart")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dc42")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".diskcopy42")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".imgpart")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".ndif")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".udif")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".toast")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".sparsebundle")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".sparseimage")))
return ClientDownloadRequest::MAC_EXECUTABLE;
else if (FileTypePolicies::GetInstance()->IsArchiveFile(file))
return ClientDownloadRequest::ARCHIVE;
else if (file.MatchesExtension(FILE_PATH_LITERAL(".pdf")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".doc")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".docx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".docm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".docb")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dot")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dotm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".dotx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xls")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlsb")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlt")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlsx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xldm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xltx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xltm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlsb")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xla")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlam")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xll")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xlw")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".ppt")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pot")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pps")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pptx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".pptm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".potx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".potm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".ppam")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".ppsx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".ppsm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".sldx")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".xldm")) ||
file.MatchesExtension(FILE_PATH_LITERAL(".rtf")))
return ClientDownloadRequest::DOCUMENT;
return ClientDownloadRequest::WIN_EXECUTABLE;
}
} // namespace download_type_util
} // namespace safe_browsing