#include "chrome/browser/safe_browsing/download_protection/check_client_download_request.h"
#include <algorithm>
#include <memory>
#include <utility>
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/logging.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_number_conversions.h"
#include "base/time/time.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/download/download_item_warning_data.h"
#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h"
#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h"
#include "chrome/browser/policy/dm_token_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h"
#include "chrome/browser/safe_browsing/download_protection/check_client_download_request_base.h"
#include "chrome/browser/safe_browsing/download_protection/deep_scanning_request.h"
#include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h"
#include "chrome/browser/safe_browsing/download_protection/download_protection_service.h"
#include "chrome/browser/safe_browsing/download_protection/download_protection_util.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/safe_browsing/download_type_util.h"
#include "components/download/public/common/download_danger_type.h"
#include "components/policy/core/common/policy_pref_names.h"
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/content/common/file_type_policies.h"
#include "components/safe_browsing/core/common/features.h"
#include "components/safe_browsing/core/common/proto/csd.pb.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
#include "components/safe_browsing/core/common/utils.h"
#include "components/url_matcher/url_matcher.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/download_item_utils.h"
namespace safe_browsing {
namespace {
void MaybeOverrideScanResult(DownloadCheckResultReason reason,
CheckDownloadRepeatingCallback callback,
DownloadCheckResult deep_scan_result) { … }
void LogNoticeSeenMetrics(PrefService* prefs) { … }
}
BrowserThread;
CheckClientDownloadRequest::CheckClientDownloadRequest(
download::DownloadItem* item,
CheckDownloadRepeatingCallback callback,
DownloadProtectionService* service,
scoped_refptr<SafeBrowsingDatabaseManager> database_manager,
scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor,
base::optional_ref<const std::string> password)
: … { … }
void CheckClientDownloadRequest::OnDownloadDestroyed(
download::DownloadItem* download) { … }
void CheckClientDownloadRequest::OnDownloadUpdated(
download::DownloadItem* download) { … }
bool CheckClientDownloadRequest::IsSupportedDownload(
const download::DownloadItem& item,
const base::FilePath& target_path,
DownloadCheckResultReason* reason) { … }
CheckClientDownloadRequest::~CheckClientDownloadRequest() { … }
bool CheckClientDownloadRequest::IsSupportedDownload(
DownloadCheckResultReason* reason) { … }
download::DownloadItem* CheckClientDownloadRequest::item() const { … }
content::BrowserContext* CheckClientDownloadRequest::GetBrowserContext() const { … }
bool CheckClientDownloadRequest::IsCancelled() { … }
base::WeakPtr<CheckClientDownloadRequestBase>
CheckClientDownloadRequest::GetWeakPtr() { … }
void CheckClientDownloadRequest::NotifySendRequest(
const ClientDownloadRequest* request) { … }
void CheckClientDownloadRequest::SetDownloadProtectionData(
const std::string& token,
const ClientDownloadResponse::Verdict& verdict,
const ClientDownloadResponse::TailoredVerdict& tailored_verdict) { … }
void CheckClientDownloadRequest::MaybeStorePingsForDownload(
DownloadCheckResult result,
bool upload_requested,
const std::string& request_data,
const std::string& response_body) { … }
void CheckClientDownloadRequest::LogDeepScanningPrompt(bool did_prompt) const { … }
std::optional<enterprise_connectors::AnalysisSettings>
CheckClientDownloadRequest::ShouldUploadBinary(
DownloadCheckResultReason reason) { … }
void CheckClientDownloadRequest::UploadBinary(
DownloadCheckResult result,
DownloadCheckResultReason reason,
enterprise_connectors::AnalysisSettings settings) { … }
void CheckClientDownloadRequest::NotifyRequestFinished(
DownloadCheckResult result,
DownloadCheckResultReason reason) { … }
bool CheckClientDownloadRequest::IsUnderAdvancedProtection(
Profile* profile) const { … }
bool CheckClientDownloadRequest::ShouldImmediatelyDeepScan(
bool server_requests_prompt,
bool log_metrics) const { … }
bool CheckClientDownloadRequest::ShouldPromptForDeepScanning(
bool server_requests_prompt) const { … }
bool CheckClientDownloadRequest::ShouldPromptForLocalDecryption(
bool server_requests_prompt) const { … }
bool CheckClientDownloadRequest::ShouldPromptForIncorrectPassword() const { … }
bool CheckClientDownloadRequest::ShouldShowScanFailure() const { … }
bool CheckClientDownloadRequest::IsAllowlistedByPolicy() const { … }
}