From e73aed9a5ef15102f29ac31b70290faf5c90f9fe Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Wed, 16 Oct 2019 16:01:32 +0000 Subject: [PATCH] Fix shutdown crash in ProfileManager. OnProfileMarkedForPermanentDeletion should move from ProfileManagerObserver to ProfileObserver, which would also fix this bug. However, changing the order of members is the quickest and most cherry-pick-able way to avoid the crash. Bug: 1005244 Change-Id: If2db68c846dd418cd02864b57b9b543687fa1e03 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1863518 Auto-Submit: Evan Stade Reviewed-by: David Roger Commit-Queue: Evan Stade Cr-Commit-Position: refs/heads/master@{#706467} --- diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h index b60df76d..7d02af7 100644 --- a/chrome/browser/profiles/profile_manager.h +++ b/chrome/browser/profiles/profile_manager.h @@ -409,6 +409,10 @@ class ProfileManager : public content::NotificationObserver, const base::FilePath& profile_dir); #endif // !defined(OS_ANDROID) + // Destroy after |profile_info_cache_| since Profile destruction may trigger + // some observers to unregister themselves. + base::ObserverList observers_; + // Object to cache various information about profiles. Contains information // about every profile which has been created for this instance of Chrome, // if it has not been explicitly deleted. It must be destroyed after @@ -450,8 +454,6 @@ class ProfileManager : public content::NotificationObserver, // Controls whether to initialize some services. Only disabled for testing. bool do_final_services_init_ = true; - base::ObserverList observers_; - // TODO(chrome/browser/profiles/OWNERS): Usage of this in profile_manager.cc // should likely be turned into DCHECK_CURRENTLY_ON(BrowserThread::UI) for // consistency with surrounding code in the same file but that wasn't trivial