diff options
Diffstat (limited to 'patch/patches/chrome_runtime.patch')
-rw-r--r-- | patch/patches/chrome_runtime.patch | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/patch/patches/chrome_runtime.patch b/patch/patches/chrome_runtime.patch new file mode 100644 index 00000000..b2350c92 --- /dev/null +++ b/patch/patches/chrome_runtime.patch @@ -0,0 +1,384 @@ +diff --git chrome/app/chrome_main_delegate.cc chrome/app/chrome_main_delegate.cc +index 6ecb3aeadd6e3..cdeca82d8bfe6 100644 +--- chrome/app/chrome_main_delegate.cc ++++ chrome/app/chrome_main_delegate.cc +@@ -39,6 +39,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" +@@ -527,6 +528,8 @@ struct MainFunction { + + // Initializes the user data dir. Must be called before InitializeLocalState(). + void InitializeUserDataDir(base::CommandLine* command_line) { ++ if (cef::IsChromeRuntimeEnabled()) ++ return; + #if BUILDFLAG(IS_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. +@@ -676,6 +679,10 @@ ChromeMainDelegate::~ChromeMainDelegate() { + ChromeMainDelegate::~ChromeMainDelegate() = default; + #endif // !BUILDFLAG(IS_ANDROID) + ++void ChromeMainDelegate::CleanupOnUIThread() { ++ heap_profiler_controller_.reset(); ++} ++ + absl::optional<int> ChromeMainDelegate::PostEarlyInitialization( + InvokedIn invoked_in) { + DCHECK(base::ThreadPoolInstance::Get()); +@@ -959,7 +966,9 @@ void ChromeMainDelegate::CommonEarlyInitialization() { + } + + #if BUILDFLAG(IS_WIN) ++ if (!cef::IsChromeRuntimeEnabled()) { + SetUpExtendedCrashReporting(is_browser_process); ++ } + base::sequence_manager::internal::ThreadControllerPowerMonitor:: + InitializeOnMainThread(); + base::InitializePlatformThreadFeatures(); +@@ -1324,6 +1333,7 @@ void ChromeMainDelegate::PreSandboxStartup() { + std::string process_type = + command_line.GetSwitchValueASCII(switches::kProcessType); + ++ if (!cef::IsChromeRuntimeEnabled()) { + crash_reporter::InitializeCrashKeys(); + + #if BUILDFLAG(IS_POSIX) +@@ -1334,6 +1344,7 @@ void ChromeMainDelegate::PreSandboxStartup() { + InitMacCrashReporter(command_line, process_type); + SetUpInstallerPreferences(command_line); + #endif ++ } // !cef::IsChromeRuntimeEnabled() + + #if BUILDFLAG(IS_WIN) + child_process_logging::Init(); +@@ -1528,6 +1539,7 @@ void ChromeMainDelegate::PreSandboxStartup() { + CHECK(!loaded_locale.empty()) << "Locale could not be found for " << locale; + } + ++ if (!cef::IsChromeRuntimeEnabled()) { + #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) + // Zygote needs to call InitCrashReporter() in RunZygote(). + if (process_type != switches::kZygoteProcess) { +@@ -1571,6 +1583,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) + MaybePatchGdiGetFontData(); +@@ -1672,6 +1685,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 = +@@ -1694,6 +1708,7 @@ void ChromeMainDelegate::ZygoteForked() { + + // Reset the command line for the newly spawned process. + crash_keys::SetCrashKeysFromCommandLine(*command_line); ++ } // !cef::IsChromeRuntimeEnabled() + } + + #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +diff --git chrome/app/chrome_main_delegate.h chrome/app/chrome_main_delegate.h +index bfafb0a895b0f..f42ebc52d4a1a 100644 +--- chrome/app/chrome_main_delegate.h ++++ chrome/app/chrome_main_delegate.h +@@ -52,6 +52,8 @@ class ChromeMainDelegate : public content::ContentMainDelegate { + + ~ChromeMainDelegate() override; + ++ virtual void CleanupOnUIThread(); ++ + protected: + // content::ContentMainDelegate: + absl::optional<int> BasicStartupComplete() override; +diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc +index a09033cda2e09..df8f48d6d0403 100644 +--- chrome/browser/chrome_browser_main.cc ++++ chrome/browser/chrome_browser_main.cc +@@ -51,6 +51,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" +@@ -1473,7 +1474,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + } + #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) + +-#if BUILDFLAG(ENABLE_PROCESS_SINGLETON) ++#if BUILDFLAG(ENABLE_PROCESS_SINGLETON) && !BUILDFLAG(ENABLE_CEF) + // Handle special early return paths (which couldn't be processed even earlier + // as they require the process singleton to be held) first. + +@@ -1520,7 +1521,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + return content::RESULT_CODE_NORMAL_EXIT; + #endif // BUILDFLAG(IS_WIN) + } +-#endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) ++#endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) && !BUILDFLAG(ENABLE_CEF) + + #if BUILDFLAG(IS_WIN) + // Check if there is any machine level Chrome installed on the current +@@ -1573,12 +1574,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + browser_process_->local_state()); + } + ++#if !BUILDFLAG(ENABLE_CEF) + // Needs to be done before PostProfileInit, since login manager on CrOS is + // called inside PostProfileInit. + content::WebUIControllerFactory::RegisterFactory( + ChromeWebUIControllerFactory::GetInstance()); + RegisterChromeWebUIConfigs(); + RegisterChromeUntrustedWebUIConfigs(); ++#endif + + #if BUILDFLAG(IS_ANDROID) + page_info::SetPageInfoClient(new ChromePageInfoClient()); +@@ -1727,6 +1730,10 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + } + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + ++ // Bypass StartupBrowserCreator and RunLoop creation with CEF. ++ // CEF with the Chrome runtime will create and manage its own RunLoop. ++#if !BUILDFLAG(ENABLE_CEF) ++ + // This step is costly and is already measured in + // Startup.StartupBrowserCreator_Start. + // See the comment above for an explanation of |process_command_line|. +@@ -1765,11 +1772,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + + // Create the RunLoop for MainMessageLoopRun() to use and transfer + // ownership of the browser's lifetime to the BrowserProcess. ++ // CEF with the Chrome runtime will create and manage its own RunLoop. + DCHECK(!GetMainRunLoopInstance()); + GetMainRunLoopInstance() = std::make_unique<base::RunLoop>(); + browser_process_->SetQuitClosure( + GetMainRunLoopInstance()->QuitWhenIdleClosure()); + } ++#endif // !BUILDFLAG(ENABLE_CEF) ++ + browser_creator_.reset(); + #endif // !BUILDFLAG(IS_ANDROID) + +diff --git chrome/browser/chrome_browser_main_mac.mm chrome/browser/chrome_browser_main_mac.mm +index 194833d0bae43..21564d96466c0 100644 +--- chrome/browser/chrome_browser_main_mac.mm ++++ chrome/browser/chrome_browser_main_mac.mm +@@ -17,6 +17,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" +@@ -114,6 +115,7 @@ void ChromeBrowserMainPartsMac::PreCreateMainMessageLoop() { + } + #endif // !BUILDFLAG(CHROME_FOR_TESTING) + ++#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]; +@@ -122,6 +124,7 @@ void ChromeBrowserMainPartsMac::PreCreateMainMessageLoop() { + chrome::BuildMainMenu(NSApp, app_controller, + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), false); + [app_controller mainMenuCreated]; ++#endif // BUILDFLAG(ENABLE_CEF) + + ui::WarmScreenCapture(); + +@@ -180,7 +183,9 @@ void ChromeBrowserMainPartsMac::PostProfileInit(Profile* profile, + } + + void ChromeBrowserMainPartsMac::DidEndMainMessageLoop() { ++#if !BUILDFLAG(ENABLE_CEF) + AppController* appController = + base::mac::ObjCCastStrict<AppController>([NSApp delegate]); + [appController didEndMainMessageLoop]; ++#endif + } +diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc +index 6170a5656eb83..8d4ae07b4fd58 100644 +--- chrome/browser/chrome_content_browser_client.cc ++++ chrome/browser/chrome_content_browser_client.cc +@@ -36,6 +36,7 @@ + #include "base/values.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" +@@ -1515,6 +1516,8 @@ void HandleStringData( + } // namespace + + ChromeContentBrowserClient::ChromeContentBrowserClient() { ++ keepalive_timer_.reset(new base::OneShotTimer()); ++ + #if BUILDFLAG(ENABLE_PLUGINS) + extra_parts_.push_back(new ChromeContentBrowserClientPluginsPart); + #endif +@@ -1540,6 +1543,11 @@ ChromeContentBrowserClient::~ChromeContentBrowserClient() { + extra_parts_.clear(); + } + ++void ChromeContentBrowserClient::CleanupOnUIThread() { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ keepalive_timer_.reset(); ++} ++ + // static + void ChromeContentBrowserClient::RegisterLocalStatePrefs( + PrefRegistrySimple* registry) { +@@ -4280,9 +4288,11 @@ void ChromeContentBrowserClient::BrowserURLHandlerCreated( + &search::HandleNewTabURLReverseRewrite); + #endif // BUILDFLAG(IS_ANDROID) + ++#if !BUILDFLAG(ENABLE_CEF) + // chrome: & friends. + handler->AddHandlerPair(&ChromeContentBrowserClient::HandleWebUI, + &ChromeContentBrowserClient::HandleWebUIReverse); ++#endif + } + + base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() { +@@ -6159,7 +6169,7 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated( + network_service); + } + +-void ChromeContentBrowserClient::ConfigureNetworkContextParams( ++bool ChromeContentBrowserClient::ConfigureNetworkContextParams( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path, +@@ -6177,6 +6187,8 @@ void ChromeContentBrowserClient::ConfigureNetworkContextParams( + network_context_params->user_agent = GetUserAgentBasedOnPolicy(context); + network_context_params->accept_language = GetApplicationLocale(); + } ++ ++ return true; + } + + std::vector<base::FilePath> +@@ -7083,10 +7095,10 @@ void ChromeContentBrowserClient::OnKeepaliveRequestStarted( + const auto now = base::TimeTicks::Now(); + const auto timeout = GetKeepaliveTimerTimeout(context); + keepalive_deadline_ = std::max(keepalive_deadline_, now + timeout); +- if (keepalive_deadline_ > now && !keepalive_timer_.IsRunning()) { ++ if (keepalive_deadline_ > now && !keepalive_timer_->IsRunning()) { + DVLOG(1) << "Starting a keepalive timer(" << timeout.InSecondsF() + << " seconds)"; +- keepalive_timer_.Start( ++ keepalive_timer_->Start( + FROM_HERE, keepalive_deadline_ - now, + base::BindOnce( + &ChromeContentBrowserClient::OnKeepaliveTimerFired, +@@ -7105,7 +7117,8 @@ void ChromeContentBrowserClient::OnKeepaliveRequestFinished() { + --num_keepalive_requests_; + if (num_keepalive_requests_ == 0) { + DVLOG(1) << "Stopping the keepalive timer"; +- keepalive_timer_.Stop(); ++ if (keepalive_timer_) ++ keepalive_timer_->Stop(); + // This deletes the keep alive handle attached to the timer function and + // unblock the shutdown sequence. + } +@@ -7241,7 +7254,7 @@ void ChromeContentBrowserClient::OnKeepaliveTimerFired( + const auto now = base::TimeTicks::Now(); + const auto then = keepalive_deadline_; + if (now < then) { +- keepalive_timer_.Start( ++ keepalive_timer_->Start( + FROM_HERE, then - now, + base::BindOnce(&ChromeContentBrowserClient::OnKeepaliveTimerFired, + weak_factory_.GetWeakPtr(), +diff --git chrome/browser/chrome_content_browser_client.h chrome/browser/chrome_content_browser_client.h +index 071a3dd11e61b..7b15b6f4abb24 100644 +--- chrome/browser/chrome_content_browser_client.h ++++ chrome/browser/chrome_content_browser_client.h +@@ -121,6 +121,8 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { + + ~ChromeContentBrowserClient() override; + ++ virtual void CleanupOnUIThread(); ++ + // TODO(https://crbug.com/787567): This file is about calls from content/ out + // to chrome/ to get values or notify about events, but both of these + // functions are from chrome/ to chrome/ and don't involve content/ at all. +@@ -601,7 +603,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { + override; + void OnNetworkServiceCreated( + network::mojom::NetworkService* network_service) override; +- void ConfigureNetworkContextParams( ++ bool ConfigureNetworkContextParams( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path, +@@ -962,7 +964,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { + + #if !BUILDFLAG(IS_ANDROID) + uint64_t num_keepalive_requests_ = 0; +- base::OneShotTimer keepalive_timer_; ++ std::unique_ptr<base::OneShotTimer> keepalive_timer_; + base::TimeTicks keepalive_deadline_; + #endif + +diff --git chrome/browser/prefs/browser_prefs.cc chrome/browser/prefs/browser_prefs.cc +index 193d174d20d45..9b8d8a6b4a051 100644 +--- chrome/browser/prefs/browser_prefs.cc ++++ chrome/browser/prefs/browser_prefs.cc +@@ -11,6 +11,7 @@ + #include "build/build_config.h" + #include "build/chromecast_buildflags.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" +@@ -172,6 +173,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" +@@ -1366,6 +1371,11 @@ void RegisterLocalState(PrefRegistrySimple* registry) { + + // This is intentionally last. + RegisterLocalStatePrefsForMigration(registry); ++ ++#if BUILDFLAG(ENABLE_CEF) ++ // Always call this last. ++ browser_prefs::RegisterLocalStatePrefs(registry); ++#endif + } + + // Register prefs applicable to all profiles. +@@ -1761,6 +1771,10 @@ void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + const std::string& locale) { + RegisterProfilePrefs(registry, locale); + ++#if BUILDFLAG(ENABLE_CEF) ++ browser_prefs::RegisterProfilePrefs(registry); ++#endif ++ + #if BUILDFLAG(IS_ANDROID) + ::android::RegisterUserProfilePrefs(registry); + #endif |