mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-04-14 02:42:09 +02:00
Some downloaded file types [1] default to opening in a Browser. Open requests for these file types originating from the Download bubble UI should route to the source Browser (call OnOpenURLFromTab). If OnOpenURLFromTab is unhandled proceed with the default Chrome behavior of opening the URL in a new default Browser. [1] PDF, html, etc. For the complete list of file types see ChromeDownloadManagerDelegate::IsOpenInBrowserPreferredForFile.
144 lines
5.3 KiB
Diff
144 lines
5.3 KiB
Diff
diff --git chrome/browser/download/chrome_download_manager_delegate.cc chrome/browser/download/chrome_download_manager_delegate.cc
|
|
index bd2c41e30f01e..e57592e75dec7 100644
|
|
--- chrome/browser/download/chrome_download_manager_delegate.cc
|
|
+++ chrome/browser/download/chrome_download_manager_delegate.cc
|
|
@@ -30,6 +30,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"
|
|
@@ -150,6 +151,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 +505,11 @@ ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile)
|
|
download_dialog_bridge_ = std::make_unique<DownloadDialogBridge>();
|
|
download_message_bridge_ = std::make_unique<DownloadMessageBridge>();
|
|
#endif
|
|
+
|
|
+#if BUILDFLAG(ENABLE_CEF)
|
|
+ cef_delegate_ =
|
|
+ cef::DownloadManagerDelegate::Create(profile_->GetDownloadManager());
|
|
+#endif
|
|
}
|
|
|
|
ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() {
|
|
@@ -559,6 +569,9 @@ void ChromeDownloadManagerDelegate::Shutdown() {
|
|
download_manager_->RemoveObserver(this);
|
|
download_manager_ = nullptr;
|
|
}
|
|
+#if BUILDFLAG(ENABLE_CEF)
|
|
+ cef_delegate_.reset();
|
|
+#endif
|
|
}
|
|
|
|
void ChromeDownloadManagerDelegate::OnDownloadCanceledAtShutdown(
|
|
@@ -627,6 +640,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(),
|
|
@@ -1015,8 +1034,11 @@ void ChromeDownloadManagerDelegate::OpenDownload(DownloadItem* download) {
|
|
Browser* browser =
|
|
web_contents ? chrome::FindBrowserWithTab(web_contents) : nullptr;
|
|
std::unique_ptr<chrome::ScopedTabbedBrowserDisplayer> 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<chrome::ScopedTabbedBrowserDisplayer>(profile_);
|
|
browser = browser_displayer->browser();
|
|
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::DownloadManagerDelegate> cef_delegate_;
|
|
+#endif
|
|
+
|
|
base::WeakPtrFactory<ChromeDownloadManagerDelegate> 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());
|
|
}
|
|
|