diff --git chrome/browser/download/chrome_download_manager_delegate.cc chrome/browser/download/chrome_download_manager_delegate.cc index f6cdc397b51cb..69847175527da 100644 --- chrome/browser/download/chrome_download_manager_delegate.cc +++ chrome/browser/download/chrome_download_manager_delegate.cc @@ -31,6 +31,7 @@ #include "base/time/time.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cef/libcef/features/features.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/download/bubble/download_bubble_prefs.h" #include "chrome/browser/download/download_core_service.h" @@ -158,6 +159,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; @@ -519,6 +524,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() { @@ -578,6 +588,9 @@ void ChromeDownloadManagerDelegate::Shutdown() { download_manager_->RemoveObserver(this); download_manager_ = nullptr; } +#if BUILDFLAG(ENABLE_CEF) + cef_delegate_.reset(); +#endif } void ChromeDownloadManagerDelegate::OnDownloadCanceledAtShutdown( @@ -646,6 +659,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(), @@ -1067,8 +1086,11 @@ void ChromeDownloadManagerDelegate::OpenDownload(DownloadItem* download) { Browser* browser = web_contents ? chrome::FindBrowserWithTab(web_contents) : nullptr; std::unique_ptr browser_displayer; - if (!browser || - !browser->CanSupportWindowFeature(Browser::FEATURE_TABSTRIP)) { + if (!browser +#if !BUILDFLAG(ENABLE_CEF) + || !browser->CanSupportWindowFeature(Browser::FEATURE_TABSTRIP) +#endif + ) { browser_displayer = std::make_unique(profile_); browser = browser_displayer->browser(); diff --git chrome/browser/download/chrome_download_manager_delegate.h chrome/browser/download/chrome_download_manager_delegate.h index 32d23a0c98061..be6a99a33bdeb 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, @@ -393,6 +400,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}; };