fix-crash-in-ThemeService.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. From c2d0133f47afb59b4ce64e42215d1d053f15250a Mon Sep 17 00:00:00 2001
  2. From: Stephan Hartmann <stha09@googlemail.com>
  3. Date: Tue, 13 Apr 2021 23:21:42 +0000
  4. Subject: [PATCH] fix crash in ThemeService
  5. ThemeSyncableService and ThemeService are owned by each other. On
  6. destruction of ThemeService, ThemeSyncableService gets destructed as
  7. well, but calls RemoveObserver of partly destructed ThemeService object.
  8. To avoid already destructed |observers_| list, move it before
  9. |theme_syncable_service_| definition.
  10. Bug: 1190561
  11. Change-Id: I4dc2c990d589071d97b7fa737afef54463c84751
  12. Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2821311
  13. Commit-Queue: Peter Kasting <pkasting@chromium.org>
  14. Reviewed-by: Peter Kasting <pkasting@chromium.org>
  15. Cr-Commit-Position: refs/heads/master@{#872164}
  16. ---
  17. chrome/browser/themes/theme_service.h | 6 ++++--
  18. 1 file changed, 4 insertions(+), 2 deletions(-)
  19. diff --git a/chrome/browser/themes/theme_service.h b/chrome/browser/themes/theme_service.h
  20. index 592d40ae9de0f..337dfac9a040f 100644
  21. --- a/chrome/browser/themes/theme_service.h
  22. +++ b/chrome/browser/themes/theme_service.h
  23. @@ -299,6 +299,10 @@ class ThemeService : public KeyedService,
  24. // The number of infobars currently displayed.
  25. int number_of_reinstallers_ = 0;
  26. + // Declared before |theme_syncable_service_|, because ThemeSyncableService
  27. + // removes itself from the |observers_| list on destruction.
  28. + base::ObserverList<ThemeServiceObserver> observers_;
  29. +
  30. std::unique_ptr<ThemeSyncableService> theme_syncable_service_;
  31. #if BUILDFLAG(ENABLE_EXTENSIONS)
  32. @@ -320,8 +324,6 @@ class ThemeService : public KeyedService,
  33. ScopedObserver<ui::NativeTheme, ui::NativeThemeObserver>
  34. native_theme_observer_{this};
  35. - base::ObserverList<ThemeServiceObserver> observers_;
  36. -
  37. base::WeakPtrFactory<ThemeService> weak_ptr_factory_{this};
  38. DISALLOW_COPY_AND_ASSIGN(ThemeService);