diff --git chrome/browser/download/chrome_download_manager_delegate.cc chrome/browser/download/chrome_download_manager_delegate.cc index bd2c41e30f01e..d87b8baf3de2b 100644 --- chrome/browser/download/chrome_download_manager_delegate.cc +++ chrome/browser/download/chrome_download_manager_delegate.cc @@ -150,6 +150,10 @@ #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h" #endif +#if BUILDFLAG(ENABLE_CEF) +#include "cef/libcef/browser/download_manager_delegate.h" +#endif + using content::BrowserThread; using content::DownloadManager; using download::DownloadItem; @@ -500,6 +504,11 @@ ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile) download_dialog_bridge_ = std::make_unique(); download_message_bridge_ = std::make_unique(); #endif + +#if BUILDFLAG(ENABLE_CEF) + cef_delegate_ = + cef::DownloadManagerDelegate::Create(profile_->GetDownloadManager()); +#endif } ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() { @@ -559,6 +568,9 @@ void ChromeDownloadManagerDelegate::Shutdown() { download_manager_->RemoveObserver(this); download_manager_ = nullptr; } +#if BUILDFLAG(ENABLE_CEF) + cef_delegate_.reset(); +#endif } void ChromeDownloadManagerDelegate::OnDownloadCanceledAtShutdown( @@ -627,6 +639,12 @@ bool ChromeDownloadManagerDelegate::DetermineDownloadTarget( ReportPDFLoadStatus(PDFLoadStatus::kTriggeredNoGestureDriveByDownload); } +#if BUILDFLAG(ENABLE_CEF) + if (cef_delegate_->DetermineDownloadTarget(download, callback)) { + return true; + } +#endif + DownloadTargetDeterminer::CompletionCallback target_determined_callback = base::BindOnce(&ChromeDownloadManagerDelegate::OnDownloadTargetDetermined, weak_ptr_factory_.GetWeakPtr(), download->GetId(), diff --git chrome/browser/download/chrome_download_manager_delegate.h chrome/browser/download/chrome_download_manager_delegate.h index af7f1d5fac12b..1cb1d01464c11 100644 --- chrome/browser/download/chrome_download_manager_delegate.h +++ chrome/browser/download/chrome_download_manager_delegate.h @@ -19,6 +19,7 @@ #include "base/task/sequenced_task_runner.h" #include "base/unguessable_token.h" #include "build/build_config.h" +#include "cef/libcef/features/runtime.h" #include "chrome/browser/download/download_completion_blocker.h" #include "chrome/browser/download/download_target_determiner_delegate.h" #include "components/download/public/common/download_danger_type.h" @@ -57,6 +58,12 @@ class CrxInstallError; } #endif +#if BUILDFLAG(ENABLE_CEF) +namespace cef { +class DownloadManagerDelegate; +} +#endif + // This is the Chrome side helper for the download system. class ChromeDownloadManagerDelegate : public content::DownloadManagerDelegate, @@ -389,6 +396,10 @@ class ChromeDownloadManagerDelegate // Whether a file picker dialog is showing. bool is_file_picker_showing_; +#if BUILDFLAG(ENABLE_CEF) + std::unique_ptr cef_delegate_; +#endif + base::WeakPtrFactory weak_ptr_factory_{this}; }; diff --git chrome/browser/download/download_prefs.cc chrome/browser/download/download_prefs.cc index 4ffbb8f5630d4..da0d2975b13d5 100644 --- chrome/browser/download/download_prefs.cc +++ chrome/browser/download/download_prefs.cc @@ -23,6 +23,7 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cef/libcef/features/runtime.h" #include "chrome/browser/download/chrome_download_manager_delegate.h" #include "chrome/browser/download/download_core_service_factory.h" #include "chrome/browser/download/download_core_service_impl.h" @@ -64,6 +65,10 @@ #include "chrome/browser/flags/android/chrome_feature_list.h" #endif +#if BUILDFLAG(ENABLE_ALLOY_BOOTSTRAP) +#include "cef/libcef/browser/alloy/alloy_download_util.h" +#endif + using content::BrowserContext; using content::BrowserThread; using content::DownloadManager; @@ -351,6 +356,11 @@ DownloadPrefs* DownloadPrefs::FromDownloadManager( // static DownloadPrefs* DownloadPrefs::FromBrowserContext( content::BrowserContext* context) { +#if BUILDFLAG(ENABLE_ALLOY_BOOTSTRAP) + if (cef::IsAlloyRuntimeEnabled()) { + return alloy::GetDownloadPrefsFromBrowserContext(context); + } +#endif return FromDownloadManager(context->GetDownloadManager()); }