From ac074a554804f9041f07260def59cbb576d663a0 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Fri, 5 Jul 2024 11:36:44 +0200 Subject: [PATCH] refactor: run Windows `SelectFileDialog` out of process (#42758) * refactor: run Windows SelectFileDialog out of process * fix: add missing IS_WIN guard * refactor: use upstream SelectFileDialogFactory * fix: build chrome/services/util_win/public/mojom target --- chromium_src/BUILD.gn | 5 +++++ shell/browser/electron_browser_main_parts.cc | 6 ++++++ shell/utility/electron_content_utility_client.cc | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/chromium_src/BUILD.gn b/chromium_src/BUILD.gn index 5b6c16ff568a..026260adbbfd 100644 --- a/chromium_src/BUILD.gn +++ b/chromium_src/BUILD.gn @@ -156,9 +156,13 @@ static_library("chrome") { "//chrome/browser/ui/frame/window_frame_util.h", "//chrome/browser/win/chrome_process_finder.cc", "//chrome/browser/win/chrome_process_finder.h", + "//chrome/browser/win/chrome_select_file_dialog_factory.cc", + "//chrome/browser/win/chrome_select_file_dialog_factory.h", "//chrome/browser/win/titlebar_config.cc", "//chrome/browser/win/titlebar_config.h", "//chrome/browser/win/titlebar_config.h", + "//chrome/browser/win/util_win_service.cc", + "//chrome/browser/win/util_win_service.h", "//chrome/child/v8_crashpad_support_win.cc", "//chrome/child/v8_crashpad_support_win.h", ] @@ -241,6 +245,7 @@ static_library("chrome") { "//components/webapps/common:mojo_bindings", ] deps += [ + "//chrome/services/util_win/public/mojom", "//components/compose/core/browser:mojo_bindings", "//components/segmentation_platform/public/proto", ] diff --git a/shell/browser/electron_browser_main_parts.cc b/shell/browser/electron_browser_main_parts.cc index de442f2dfb56..0b89745111f3 100644 --- a/shell/browser/electron_browser_main_parts.cc +++ b/shell/browser/electron_browser_main_parts.cc @@ -96,6 +96,7 @@ #endif #if BUILDFLAG(IS_WIN) +#include "chrome/browser/win/chrome_select_file_dialog_factory.h" #include "ui/base/l10n/l10n_util_win.h" #include "ui/gfx/system_fonts_win.h" #include "ui/strings/grit/app_locale_settings.h" @@ -486,6 +487,11 @@ int ElectronBrowserMainParts::PreMainMessageLoopRun() { fake_browser_process_->PreMainMessageLoopRun(); +#if BUILDFLAG(IS_WIN) + ui::SelectFileDialog::SetFactory( + std::make_unique()); +#endif + return GetExitCode(); } diff --git a/shell/utility/electron_content_utility_client.cc b/shell/utility/electron_content_utility_client.cc index 83c385b2d6cb..85b3c7bcef8b 100644 --- a/shell/utility/electron_content_utility_client.cc +++ b/shell/utility/electron_content_utility_client.cc @@ -20,7 +20,9 @@ #if BUILDFLAG(IS_WIN) #include "chrome/services/util_win/public/mojom/util_read_icon.mojom.h" +#include "chrome/services/util_win/public/mojom/util_win.mojom.h" #include "chrome/services/util_win/util_read_icon.h" +#include "chrome/services/util_win/util_win_impl.h" #endif // BUILDFLAG(IS_WIN) #if BUILDFLAG(ENABLE_PRINTING) @@ -55,6 +57,9 @@ auto RunWindowsIconReader( mojo::PendingReceiver receiver) { return std::make_unique(std::move(receiver)); } +auto RunWindowsUtility(mojo::PendingReceiver receiver) { + return std::make_unique(std::move(receiver)); +} #endif #if BUILDFLAG(ENABLE_PRINTING) @@ -109,6 +114,7 @@ void ElectronContentUtilityClient::RegisterMainThreadServices( mojo::ServiceFactory& services) { #if BUILDFLAG(IS_WIN) services.Add(RunWindowsIconReader); + services.Add(RunWindowsUtility); #endif #if BUILDFLAG(ENABLE_PRINTING)