1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/download/download_ui_safe_browsing_util.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/profiles/profile.h"
#include "components/download/public/common/download_item.h"
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/buildflags.h"
#include "components/safe_browsing/core/common/features.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
#if BUILDFLAG(SAFE_BROWSING_DOWNLOAD_PROTECTION)
#include "chrome/browser/browser_process.h"
#include "chrome/browser/safe_browsing/download_protection/download_protection_service.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#endif
#if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
#include "components/safe_browsing/content/common/file_type_policies.h"
#endif
namespace {
#if BUILDFLAG(SAFE_BROWSING_DOWNLOAD_PROTECTION)
using safe_browsing::ClientDownloadResponse;
using safe_browsing::ClientSafeBrowsingReportRequest;
#endif
std::string GetDangerPromptHistogramName(const std::string& suffix,
const download::DownloadItem& item) {
const char kPrefix[] = "Download.DownloadDangerPrompt";
download::DownloadDangerType danger_type = item.GetDangerType();
return base::StringPrintf("%s.%s.%s", kPrefix,
download::GetDownloadDangerTypeString(danger_type),
// "Proceed" or "Shown".
suffix.c_str());
}
} // namespace
bool WasSafeBrowsingVerdictObtained(const download::DownloadItem* item) {
#if BUILDFLAG(SAFE_BROWSING_DOWNLOAD_PROTECTION)
return item &&
safe_browsing::DownloadProtectionService::HasDownloadProtectionVerdict(
item);
#else
return false;
#endif
}
bool ShouldShowWarningForNoSafeBrowsing(Profile* profile) {
#if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
return safe_browsing::GetSafeBrowsingState(*profile->GetPrefs()) ==
safe_browsing::SafeBrowsingState::NO_SAFE_BROWSING;
#else
return true;
#endif
}
bool CanUserTurnOnSafeBrowsing(Profile* profile) {
#if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
return !safe_browsing::IsSafeBrowsingPolicyManaged(*profile->GetPrefs());
#else
return false;
#endif
}
void RecordDownloadDangerPromptHistogram(
const std::string& proceed_or_shown_suffix,
const download::DownloadItem& item) {
#if BUILDFLAG(SAFE_BROWSING_AVAILABLE)
int64_t file_type_uma_value =
safe_browsing::FileTypePolicies::GetInstance()->UmaValueForFile(
item.GetTargetFilePath());
base::UmaHistogramSparse(
GetDangerPromptHistogramName(proceed_or_shown_suffix, item),
file_type_uma_value);
#endif
}
#if BUILDFLAG(SAFE_BROWSING_DOWNLOAD_PROTECTION)
void SendSafeBrowsingDownloadReport(
ClientSafeBrowsingReportRequest::ReportType report_type,
bool did_proceed,
download::DownloadItem* item) {
if (safe_browsing::SafeBrowsingService* sb_service =
g_browser_process->safe_browsing_service()) {
sb_service->SendDownloadReport(item, report_type, did_proceed,
/*show_download_in_folder=*/std::nullopt);
}
}
#endif // BUILDFLAG(SAFE_BROWSING_DOWNLOAD_PROTECTION)
#if BUILDFLAG(IS_ANDROID)
bool ShouldShowSafeBrowsingAndroidDownloadWarnings() {
return base::FeatureList::IsEnabled(
safe_browsing::kMaliciousApkDownloadCheck) &&
!safe_browsing::kMaliciousApkDownloadCheckTelemetryOnly.Get();
}
#endif
|