summarylogtreecommitdiffstats
path: root/fix-crash-in-ThemeService.patch
diff options
context:
space:
mode:
Diffstat (limited to 'fix-crash-in-ThemeService.patch')
-rw-r--r--fix-crash-in-ThemeService.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/fix-crash-in-ThemeService.patch b/fix-crash-in-ThemeService.patch
new file mode 100644
index 000000000000..b9fd1f728475
--- /dev/null
+++ b/fix-crash-in-ThemeService.patch
@@ -0,0 +1,45 @@
+From c2d0133f47afb59b4ce64e42215d1d053f15250a Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 13 Apr 2021 23:21:42 +0000
+Subject: [PATCH] fix crash in ThemeService
+
+ThemeSyncableService and ThemeService are owned by each other. On
+destruction of ThemeService, ThemeSyncableService gets destructed as
+well, but calls RemoveObserver of partly destructed ThemeService object.
+To avoid already destructed |observers_| list, move it before
+|theme_syncable_service_| definition.
+
+Bug: 1190561
+Change-Id: I4dc2c990d589071d97b7fa737afef54463c84751
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2821311
+Commit-Queue: Peter Kasting <pkasting@chromium.org>
+Reviewed-by: Peter Kasting <pkasting@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#872164}
+---
+ chrome/browser/themes/theme_service.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/chrome/browser/themes/theme_service.h b/chrome/browser/themes/theme_service.h
+index 592d40ae9de0f..337dfac9a040f 100644
+--- a/chrome/browser/themes/theme_service.h
++++ b/chrome/browser/themes/theme_service.h
+@@ -299,6 +299,10 @@ class ThemeService : public KeyedService,
+ // The number of infobars currently displayed.
+ int number_of_reinstallers_ = 0;
+
++ // Declared before |theme_syncable_service_|, because ThemeSyncableService
++ // removes itself from the |observers_| list on destruction.
++ base::ObserverList<ThemeServiceObserver> observers_;
++
+ std::unique_ptr<ThemeSyncableService> theme_syncable_service_;
+
+ #if BUILDFLAG(ENABLE_EXTENSIONS)
+@@ -320,8 +324,6 @@ class ThemeService : public KeyedService,
+ ScopedObserver<ui::NativeTheme, ui::NativeThemeObserver>
+ native_theme_observer_{this};
+
+- base::ObserverList<ThemeServiceObserver> observers_;
+-
+ base::WeakPtrFactory<ThemeService> weak_ptr_factory_{this};
+
+ DISALLOW_COPY_AND_ASSIGN(ThemeService);