diff --git chrome/browser/download/chrome_download_manager_delegate.cc chrome/browser/download/chrome_download_manager_delegate.cc index 1becf94d357e9..9cb014e242917 100644 --- chrome/browser/download/chrome_download_manager_delegate.cc +++ chrome/browser/download/chrome_download_manager_delegate.cc @@ -157,6 +157,10 @@ #include "chrome/browser/ash/policy/skyvault/skyvault_rename_handler.h" #endif +#if BUILDFLAG(ENABLE_CEF) +#include "cef/libcef/browser/download_manager_delegate.h" +#endif + using content::BrowserThread; using content::DownloadManager; using download::DownloadItem; @@ -513,6 +517,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() { @@ -572,6 +581,9 @@ void ChromeDownloadManagerDelegate::Shutdown() { download_manager_->RemoveObserver(this); download_manager_ = nullptr; } +#if BUILDFLAG(ENABLE_CEF) + cef_delegate_.reset(); +#endif } void ChromeDownloadManagerDelegate::OnDownloadCanceledAtShutdown( @@ -640,6 +652,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 2c99baa2c9fa8..b721db7058d8f 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/features.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, @@ -391,6 +398,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}; };