diff --git chrome/app/chrome_main_delegate.cc chrome/app/chrome_main_delegate.cc index 495893eec9704..e967494683f19 100644 --- chrome/app/chrome_main_delegate.cc +++ chrome/app/chrome_main_delegate.cc @@ -29,6 +29,7 @@ #include "base/trace_event/trace_event_impl.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cef/libcef/features/runtime.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_resource_bundle_helper.h" #include "chrome/browser/defaults.h" @@ -384,6 +385,8 @@ struct MainFunction { // Initializes the user data dir. Must be called before InitializeLocalState(). void InitializeUserDataDir(base::CommandLine* command_line) { + if (cef::IsChromeRuntimeEnabled()) + return; #if defined(OS_WIN) // Reach out to chrome_elf for the truth on the user data directory. // Note that in tests, this links to chrome_elf_test_stubs. @@ -675,7 +678,9 @@ void ChromeMainDelegate::PostFieldTrialInitialization() { } #if defined(OS_WIN) + if (!cef::IsChromeRuntimeEnabled()) { SetUpExtendedCrashReporting(is_browser_process); + } base::sequence_manager::internal::ThreadControllerPowerMonitor:: InitializeOnMainThread(); #endif @@ -970,6 +975,7 @@ void ChromeMainDelegate::PreSandboxStartup() { std::string process_type = command_line.GetSwitchValueASCII(switches::kProcessType); + if (!cef::IsChromeRuntimeEnabled()) { crash_reporter::InitializeCrashKeys(); #if defined(OS_POSIX) @@ -980,6 +986,7 @@ void ChromeMainDelegate::PreSandboxStartup() { InitMacCrashReporter(command_line, process_type); SetUpInstallerPreferences(command_line); #endif + } // !cef::IsChromeRuntimeEnabled() #if defined(OS_WIN) child_process_logging::Init(); @@ -1103,6 +1110,7 @@ void ChromeMainDelegate::PreSandboxStartup() { locale; } + if (!cef::IsChromeRuntimeEnabled()) { #if defined(OS_POSIX) && !defined(OS_MAC) // Zygote needs to call InitCrashReporter() in RunZygote(). if (process_type != switches::kZygoteProcess) { @@ -1135,6 +1143,7 @@ void ChromeMainDelegate::PreSandboxStartup() { // After all the platform Breakpads have been initialized, store the command // line for crash reporting. crash_keys::SetCrashKeysFromCommandLine(command_line); + } // !cef::IsChromeRuntimeEnabled() #if BUILDFLAG(ENABLE_PDF) MaybeInitializeGDI(); @@ -1233,6 +1242,7 @@ void ChromeMainDelegate::ZygoteForked() { SetUpProfilingShutdownHandler(); } + if (!cef::IsChromeRuntimeEnabled()) { // Needs to be called after we have chrome::DIR_USER_DATA. BrowserMain sets // this up for the browser process in a different manner. const base::CommandLine* command_line = @@ -1249,6 +1259,7 @@ void ChromeMainDelegate::ZygoteForked() { // Reset the command line for the newly spawned process. crash_keys::SetCrashKeysFromCommandLine(*command_line); + } // !cef::IsChromeRuntimeEnabled() } #endif // defined(OS_LINUX) || defined(OS_CHROMEOS) diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc index dff0a32062f0e..9378b2a0be47f 100644 --- chrome/browser/chrome_browser_main.cc +++ chrome/browser/chrome_browser_main.cc @@ -49,6 +49,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "cc/base/switches.h" +#include "cef/libcef/features/runtime.h" #include "chrome/browser/about_flags.h" #include "chrome/browser/active_use_util.h" #include "chrome/browser/after_startup_task_utils.h" @@ -915,8 +916,10 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() { #if !defined(OS_ANDROID) // Create the RunLoop for MainMessageLoopRun() to use, and pass a copy of // its QuitClosure to the BrowserProcessImpl to call when it is time to exit. + // CEF with the Chrome runtime will create and manage its own RunLoop. DCHECK(!GetMainRunLoopInstance()); - GetMainRunLoopInstance() = std::make_unique(); + if (!cef::IsChromeRuntimeEnabled()) + GetMainRunLoopInstance() = std::make_unique(); // These members must be initialized before returning from this function. // Android doesn't use StartupBrowserCreator. @@ -1689,11 +1692,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { // This step is costly and is already measured in // Startup.StartupBrowserCreator_Start. // See the comment above for an explanation of |process_command_line|. + // Bypass StartupBrowserCreator with CEF where |GetMainRunLoopInstance()| is + // nullptr. const bool started = + !GetMainRunLoopInstance() || !process_command_line || browser_creator_->Start(parsed_command_line(), base::FilePath(), profile_, last_opened_profiles); - if (started) { + if (started && GetMainRunLoopInstance()) { // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch // of lacros-chrome is complete. #if defined(OS_WIN) || (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) diff --git chrome/browser/chrome_browser_main_mac.mm chrome/browser/chrome_browser_main_mac.mm index 95d1ebc190910..13cdfa52db108 100644 --- chrome/browser/chrome_browser_main_mac.mm +++ chrome/browser/chrome_browser_main_mac.mm @@ -16,6 +16,7 @@ #include "base/path_service.h" #include "base/strings/sys_string_conversions.h" #include "build/branding_buildflags.h" +#include "cef/libcef/features/features.h" #import "chrome/browser/app_controller_mac.h" #include "chrome/browser/apps/app_shim/app_shim_listener.h" #include "chrome/browser/browser_process.h" @@ -110,6 +111,7 @@ void ChromeBrowserMainPartsMac::PreCreateMainMessageLoop() { } } +#if !BUILDFLAG(ENABLE_CEF) // Create the app delegate. This object is intentionally leaked as a global // singleton. It is accessed through -[NSApp delegate]. AppController* app_controller = [[AppController alloc] init]; @@ -118,6 +120,7 @@ void ChromeBrowserMainPartsMac::PreCreateMainMessageLoop() { chrome::BuildMainMenu(NSApp, app_controller, l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), false); [app_controller mainMenuCreated]; +#endif // BUILDFLAG(ENABLE_CEF) PrefService* local_state = g_browser_process->local_state(); DCHECK(local_state); @@ -170,7 +173,9 @@ void ChromeBrowserMainPartsMac::PostProfileInit() { } void ChromeBrowserMainPartsMac::DidEndMainMessageLoop() { +#if !BUILDFLAG(ENABLE_CEF) AppController* appController = base::mac::ObjCCastStrict([NSApp delegate]); [appController didEndMainMessageLoop]; +#endif } diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc index 8650dd04f9c44..45ab4913bbe04 100644 --- chrome/browser/chrome_content_browser_client.cc +++ chrome/browser/chrome_content_browser_client.cc @@ -38,6 +38,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cef/libcef/features/features.h" #include "chrome/browser/accessibility/accessibility_labels_service.h" #include "chrome/browser/accessibility/accessibility_labels_service_factory.h" #include "chrome/browser/after_startup_task_utils.h" @@ -3562,9 +3563,11 @@ void ChromeContentBrowserClient::BrowserURLHandlerCreated( &search::HandleNewTabURLReverseRewrite); #endif // defined(OS_ANDROID) +#if !BUILDFLAG(ENABLE_CEF) // chrome: & friends. handler->AddHandlerPair(&ChromeContentBrowserClient::HandleWebUI, &ChromeContentBrowserClient::HandleWebUIReverse); +#endif } base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { diff --git chrome/browser/notifications/alert_dispatcher_xpc.mm chrome/browser/notifications/alert_dispatcher_xpc.mm index ab4c2b03755d3..8e813496f9df6 100644 --- chrome/browser/notifications/alert_dispatcher_xpc.mm +++ chrome/browser/notifications/alert_dispatcher_xpc.mm @@ -19,6 +19,7 @@ #include "base/mac/scoped_nsobject.h" #include "base/metrics/histogram_functions.h" #include "base/strings/sys_string_conversions.h" +#include "cef/libcef/features/runtime.h" #include "chrome/browser/notifications/notification_platform_bridge_mac_utils.h" #import "chrome/browser/ui/cocoa/notifications/notification_delivery.h" #include "chrome/browser/ui/cocoa/notifications/xpc_mach_port.h" @@ -179,6 +180,12 @@ void RecordXPCEvent(XPCConnectionEvent event) { - (id)serviceProxy { id proxy = [_xpcConnection remoteObjectProxy]; + // Skip exception port configuration when running CEF with crash reporting disabled. + if (!_setExceptionPort && cef::IsChromeRuntimeEnabled() && + !cef::IsCrashReportingEnabled()) { + _setExceptionPort = YES; + } + if (!_setExceptionPort) { base::mac::ScopedMachSendRight exceptionPort( crash_reporter::GetCrashpadClient().GetHandlerMachPort()); diff --git chrome/browser/prefs/browser_prefs.cc chrome/browser/prefs/browser_prefs.cc index 3de6df64935e3..78a2bf3896e72 100644 --- chrome/browser/prefs/browser_prefs.cc +++ chrome/browser/prefs/browser_prefs.cc @@ -10,6 +10,7 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" +#include "cef/libcef/features/features.h" #include "chrome/browser/about_flags.h" #include "chrome/browser/accessibility/accessibility_labels_service.h" #include "chrome/browser/accessibility/accessibility_ui.h" @@ -164,6 +165,10 @@ #include "chrome/browser/background/background_mode_manager.h" #endif +#if BUILDFLAG(ENABLE_CEF) +#include "cef/libcef/browser/prefs/browser_prefs.h" +#endif + #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/accessibility/animation_policy_prefs.h" #include "chrome/browser/apps/platform_apps/shortcut_manager.h" @@ -1134,6 +1139,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, SessionDataService::RegisterProfilePrefs(registry); #endif +#if BUILDFLAG(ENABLE_CEF) + browser_prefs::RegisterProfilePrefs(registry); +#endif + #if BUILDFLAG(ENABLE_EXTENSIONS) ExtensionWebUI::RegisterProfilePrefs(registry); RegisterAnimationPolicyPrefs(registry);