summaryrefslogtreecommitdiff
path: root/patch/patches/chrome_runtime.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patch/patches/chrome_runtime.patch')
-rw-r--r--patch/patches/chrome_runtime.patch384
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