From 989b0078e4450a9fa69cbdc1b88c8e4bd7e24fe2 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Tue, 21 Jul 2020 13:09:26 -0400 Subject: [PATCH] Fix crash in ThemeService with --disable-extensions (fixes issue #2852) --- patch/patches/chrome_browser_themes.patch | 69 +++++++++++++++++++---- 1 file changed, 57 insertions(+), 12 deletions(-) diff --git a/patch/patches/chrome_browser_themes.patch b/patch/patches/chrome_browser_themes.patch index 96c4b670b..553c4ca12 100644 --- a/patch/patches/chrome_browser_themes.patch +++ b/patch/patches/chrome_browser_themes.patch @@ -1,37 +1,82 @@ +diff --git chrome/browser/themes/theme_service.cc chrome/browser/themes/theme_service.cc +index 2a6df8119a44..dffe87df9c54 100644 +--- chrome/browser/themes/theme_service.cc ++++ chrome/browser/themes/theme_service.cc +@@ -25,6 +25,7 @@ + #include "base/task/thread_pool.h" + #include "base/threading/thread_task_runner_handle.h" + #include "build/build_config.h" ++#include "cef/libcef/features/runtime.h" + #include "chrome/browser/chrome_notification_types.h" + #include "chrome/browser/extensions/extension_service.h" + #include "chrome/browser/extensions/theme_installed_infobar_delegate.h" +@@ -54,6 +55,10 @@ + #include "extensions/common/extension_set.h" + #include "ui/base/layout.h" + ++#if BUILDFLAG(ENABLE_CEF) ++#include "cef/libcef/common/extensions/extensions_util.h" ++#endif ++ + #if BUILDFLAG(ENABLE_EXTENSIONS) + #include "base/scoped_observer.h" + #include "extensions/browser/extension_registry_observer.h" +@@ -270,11 +275,19 @@ void ThemeService::Init() { + // OnExtensionServiceReady. Otherwise, the ThemeObserver won't be + // constructed in time to observe the corresponding events. + #if BUILDFLAG(ENABLE_EXTENSIONS) ++#if BUILDFLAG(ENABLE_CEF) ++ const bool extensions_disabled = cef::IsAlloyRuntimeEnabled() && ++ !extensions::ExtensionsEnabled(); ++#else ++ const bool extensions_disabled = false; ++#endif ++ if (!extensions_disabled) { + theme_observer_ = std::make_unique(this); + + extensions::ExtensionSystem::Get(profile_)->ready().Post( + FROM_HERE, base::Bind(&ThemeService::OnExtensionServiceReady, + weak_ptr_factory_.GetWeakPtr())); ++ } + #endif + theme_syncable_service_.reset(new ThemeSyncableService(profile_, this)); + diff --git chrome/browser/themes/theme_service_factory.cc chrome/browser/themes/theme_service_factory.cc -index caec77bbe3ba..1640307eef65 100644 +index caec77bbe3ba..92a813acc008 100644 --- chrome/browser/themes/theme_service_factory.cc +++ chrome/browser/themes/theme_service_factory.cc @@ -6,6 +6,7 @@ #include "base/no_destructor.h" #include "build/build_config.h" -+#include "cef/libcef/features/features.h" ++#include "cef/libcef/features/runtime.h" #include "chrome/browser/extensions/extension_system_factory.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -@@ -41,6 +42,10 @@ const ThemeHelper& GetThemeHelper() { - - } // namespace +@@ -27,6 +28,10 @@ + #include "ui/views/linux_ui/linux_ui.h" + #endif +#if BUILDFLAG(ENABLE_CEF) +#include "cef/libcef/common/extensions/extensions_util.h" +#endif + - // static - ThemeService* ThemeServiceFactory::GetForProfile(Profile* profile) { - return static_cast( -@@ -70,7 +75,13 @@ ThemeServiceFactory::ThemeServiceFactory() + namespace { + + const ThemeHelper& GetThemeHelper() { +@@ -70,7 +75,15 @@ ThemeServiceFactory::ThemeServiceFactory() BrowserContextDependencyManager::GetInstance()) { DependsOn(extensions::ExtensionRegistryFactory::GetInstance()); DependsOn(extensions::ExtensionPrefsFactory::GetInstance()); +#if BUILDFLAG(ENABLE_CEF) -+ if (extensions::ExtensionsEnabled()) { ++ const bool extensions_disabled = cef::IsAlloyRuntimeEnabled() && ++ !extensions::ExtensionsEnabled(); ++#else ++ const bool extensions_disabled = false; +#endif ++ if (!extensions_disabled) { DependsOn(extensions::ExtensionSystemFactory::GetInstance()); -+#if BUILDFLAG(ENABLE_CEF) + } -+#endif } ThemeServiceFactory::~ThemeServiceFactory() {}