From 2b645e28514a8bdcda3fed23c9c5e65022c9e3bd Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Mon, 23 Jan 2023 12:58:40 -0500 Subject: [PATCH] Fix patched chrome build with enable_cef=false --- patch/patches/chrome_browser_extensions.patch | 6 +- patch/patches/chrome_runtime.patch | 55 ++++++++++++------- patch/patches/chrome_runtime_views.patch | 6 +- patch/patches/content_2015.patch | 34 ++++++++++++ patch/patches/embedder_product_override.patch | 19 ++++++- 5 files changed, 92 insertions(+), 28 deletions(-) diff --git a/patch/patches/chrome_browser_extensions.patch b/patch/patches/chrome_browser_extensions.patch index 26c6abbc4..ced810586 100644 --- a/patch/patches/chrome_browser_extensions.patch +++ b/patch/patches/chrome_browser_extensions.patch @@ -1,5 +1,5 @@ diff --git chrome/browser/extensions/api/chrome_extensions_api_client.cc chrome/browser/extensions/api/chrome_extensions_api_client.cc -index 2b64f15504dcb..06a70c70738cd 100644 +index 2b64f15504dcb..7c65f1b0d8baa 100644 --- chrome/browser/extensions/api/chrome_extensions_api_client.cc +++ chrome/browser/extensions/api/chrome_extensions_api_client.cc @@ -13,6 +13,7 @@ @@ -21,13 +21,15 @@ index 2b64f15504dcb..06a70c70738cd 100644 #if BUILDFLAG(ENABLE_PDF) #include "chrome/browser/ui/pdf/chrome_pdf_web_contents_helper_client.h" #include "components/pdf/browser/pdf_web_contents_helper.h" -@@ -305,6 +310,9 @@ ChromeExtensionsAPIClient::CreateGuestViewManagerDelegate( +@@ -305,6 +310,11 @@ ChromeExtensionsAPIClient::CreateGuestViewManagerDelegate( std::unique_ptr ChromeExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate( MimeHandlerViewGuest* guest) const { ++#if BUILDFLAG(ENABLE_CEF) + if (cef::IsChromeRuntimeEnabled()) { + return std::make_unique(guest); + } ++#endif return std::make_unique(); } diff --git a/patch/patches/chrome_runtime.patch b/patch/patches/chrome_runtime.patch index 883c1543f..b44a2b312 100644 --- a/patch/patches/chrome_runtime.patch +++ b/patch/patches/chrome_runtime.patch @@ -102,7 +102,7 @@ index 49993fbc333f8..c39e8743e281e 100644 // content::ContentMainDelegate: absl::optional BasicStartupComplete() override; diff --git chrome/browser/chrome_browser_main.cc chrome/browser/chrome_browser_main.cc -index 2893df3488d8f..46cd8d9643b69 100644 +index 2893df3488d8f..8828270f624cb 100644 --- chrome/browser/chrome_browser_main.cc +++ chrome/browser/chrome_browser_main.cc @@ -51,6 +51,7 @@ @@ -113,6 +113,24 @@ index 2893df3488d8f..46cd8d9643b69 100644 #include "chrome/browser/about_flags.h" #include "chrome/browser/active_use_util.h" #include "chrome/browser/after_startup_task_utils.h" +@@ -1390,7 +1391,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + CHECK(aura::Env::GetInstance()); + #endif // defined(USE_AURA) + +-#if BUILDFLAG(ENABLE_PROCESS_SINGLETON) ++#if BUILDFLAG(ENABLE_PROCESS_SINGLETON) && !BUILDFLAG(ENABLE_CEF) + if (!ChromeProcessSingleton::IsEarlySingletonFeatureEnabled()) { + // When another process is running, use that process instead of starting a + // new one. NotifyOtherProcess will currently give the other process up to +@@ -1429,7 +1430,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { + return chrome::RESULT_CODE_PROFILE_IN_USE; + } + } +-#endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) ++#endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) && !BUILDFLAG(ENABLE_CEF) + + #if BUILDFLAG(IS_WIN) + // We must call DoUpgradeTasks now that we own the browser singleton to @@ -1575,12 +1576,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { browser_process_->local_state()); } @@ -128,37 +146,32 @@ index 2893df3488d8f..46cd8d9643b69 100644 #if BUILDFLAG(IS_ANDROID) page_info::SetPageInfoClient(new ChromePageInfoClient()); -@@ -1732,14 +1735,17 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { +@@ -1729,6 +1732,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|. -+ // Bypass StartupBrowserCreator with CEF where |GetMainRunLoopInstance()| is -+ // nullptr. - const bool started = -+ !GetMainRunLoopInstance() || - #if BUILDFLAG(ENABLE_PROCESS_SINGLETON) - !process_command_line || - #endif // BUILDFLAG(ENABLE_PROCESS_SINGLETON) - browser_creator_->Start(*base::CommandLine::ForCurrentProcess(), - base::FilePath(), profile_info, - 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 BUILDFLAG(IS_WIN) || (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) -@@ -1767,8 +1773,10 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { +@@ -1767,11 +1774,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(); -+ if (!cef::IsChromeRuntimeEnabled()) -+ GetMainRunLoopInstance() = std::make_unique(); + GetMainRunLoopInstance() = std::make_unique(); 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 77aaa6d46daea..e428711ec4ab3 100644 --- chrome/browser/chrome_browser_main_mac.mm diff --git a/patch/patches/chrome_runtime_views.patch b/patch/patches/chrome_runtime_views.patch index 9f329da9d..99d0d1b70 100644 --- a/patch/patches/chrome_runtime_views.patch +++ b/patch/patches/chrome_runtime_views.patch @@ -379,7 +379,7 @@ index b37a1c4e7a87b..2dc68dc29f39f 100644 // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate // interface to keep these two classes decoupled and testable. diff --git chrome/browser/ui/views/frame/browser_view_layout.cc chrome/browser/ui/views/frame/browser_view_layout.cc -index e1b23142611cb..08852ecb7c129 100644 +index e1b23142611cb..1c9fb04a163db 100644 --- chrome/browser/ui/views/frame/browser_view_layout.cc +++ chrome/browser/ui/views/frame/browser_view_layout.cc @@ -46,6 +46,10 @@ @@ -393,15 +393,17 @@ index e1b23142611cb..08852ecb7c129 100644 using views::View; using web_modal::ModalDialogHostObserver; using web_modal::WebContentsModalDialogHost; -@@ -472,6 +476,11 @@ int BrowserViewLayout::LayoutWebUITabStrip(int top) { +@@ -472,6 +476,13 @@ int BrowserViewLayout::LayoutWebUITabStrip(int top) { int BrowserViewLayout::LayoutToolbar(int top) { TRACE_EVENT0("ui", "BrowserViewLayout::LayoutToolbar"); ++#if BUILDFLAG(ENABLE_CEF) + if (cef::IsCefView(toolbar_)) { + // CEF may take ownership of the toolbar. Early exit to avoid the DCHECK + // in LayoutManager::SetViewVisibility(). + return top; + } ++#endif int browser_view_width = vertical_layout_rect_.width(); bool toolbar_visible = delegate_->IsToolbarVisible(); int height = toolbar_visible ? toolbar_->GetPreferredSize().height() : 0; diff --git a/patch/patches/content_2015.patch b/patch/patches/content_2015.patch index c4e27c379..ee5209738 100644 --- a/patch/patches/content_2015.patch +++ b/patch/patches/content_2015.patch @@ -178,3 +178,37 @@ index 3ae765eea4b8f..c0fe200f0d373 100644 // Tells this platform that the renderer is locked to a site (i.e., a scheme // plus eTLD+1, such as https://google.com), or to a more specific origin. void SetIsLockedToSite(); +diff --git headless/lib/browser/headless_content_browser_client.cc headless/lib/browser/headless_content_browser_client.cc +index 5cae59116d39d..2c6fb3e830fcd 100644 +--- headless/lib/browser/headless_content_browser_client.cc ++++ headless/lib/browser/headless_content_browser_client.cc +@@ -312,7 +312,7 @@ bool HeadlessContentBrowserClient::ShouldEnableStrictSiteIsolation() { + return browser_->options()->site_per_process; + } + +-void HeadlessContentBrowserClient::ConfigureNetworkContextParams( ++bool HeadlessContentBrowserClient::ConfigureNetworkContextParams( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path, +@@ -322,6 +322,7 @@ void HeadlessContentBrowserClient::ConfigureNetworkContextParams( + HeadlessBrowserContextImpl::From(context)->ConfigureNetworkContextParams( + in_memory, relative_partition_path, network_context_params, + cert_verifier_creation_params); ++ return true; + } + + std::string HeadlessContentBrowserClient::GetProduct() { +diff --git headless/lib/browser/headless_content_browser_client.h headless/lib/browser/headless_content_browser_client.h +index 441423c66de35..97a98a41dd7e3 100644 +--- headless/lib/browser/headless_content_browser_client.h ++++ headless/lib/browser/headless_content_browser_client.h +@@ -71,7 +71,7 @@ class HeadlessContentBrowserClient : public content::ContentBrowserClient { + std::unique_ptr delegate) override; + bool ShouldEnableStrictSiteIsolation() override; + +- void ConfigureNetworkContextParams( ++ bool ConfigureNetworkContextParams( + content::BrowserContext* context, + bool in_memory, + const base::FilePath& relative_partition_path, diff --git a/patch/patches/embedder_product_override.patch b/patch/patches/embedder_product_override.patch index 601e31b4a..35fa396bc 100644 --- a/patch/patches/embedder_product_override.patch +++ b/patch/patches/embedder_product_override.patch @@ -1,24 +1,37 @@ diff --git components/embedder_support/user_agent_utils.cc components/embedder_support/user_agent_utils.cc -index 40148eeaef7d1..353c6d2b37a7a 100644 +index 40148eeaef7d1..bd4e5d62efc97 100644 --- components/embedder_support/user_agent_utils.cc +++ components/embedder_support/user_agent_utils.cc @@ -15,6 +15,7 @@ #include "base/version.h" #include "build/branding_buildflags.h" #include "build/build_config.h" -+#include "cef/libcef/common/cef_switches.h" ++#include "cef/libcef/features/features.h" #include "components/embedder_support/pref_names.h" #include "components/embedder_support/switches.h" #include "components/policy/core/common/policy_pref_names.h" -@@ -382,6 +383,12 @@ std::string GetMajorVersionForUserAgentString( +@@ -28,6 +29,10 @@ + #include "third_party/blink/public/common/features.h" + #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" + ++#if BUILDFLAG(ENABLE_CEF) ++#include "cef/libcef/common/cef_switches.h" ++#endif ++ + #if BUILDFLAG(IS_WIN) + #include + +@@ -382,6 +387,14 @@ std::string GetMajorVersionForUserAgentString( std::string GetProductAndVersion( ForceMajorVersionToMinorPosition force_major_to_minor, UserAgentReductionEnterprisePolicyState user_agent_reduction) { ++#if BUILDFLAG(ENABLE_CEF) + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(switches::kUserAgentProductAndVersion)) { + return command_line->GetSwitchValueASCII( + switches::kUserAgentProductAndVersion); + } ++#endif + if (ShouldForceMajorVersionToMinorPosition(force_major_to_minor)) { // Force major version to 99 and major version to minor version position.