diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-27 21:01:30 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-27 21:01:30 +0000 |
commit | bea9ba4af4198fcfcd76e5236102fd5e4befb522 (patch) | |
tree | 06ff727140271b653a77108a580bf1b80bf37a09 | |
parent | a73173412c9486209d12a6e4653bfc0785dad747 (diff) | |
download | chromium_src-bea9ba4af4198fcfcd76e5236102fd5e4befb522.zip chromium_src-bea9ba4af4198fcfcd76e5236102fd5e4befb522.tar.gz chromium_src-bea9ba4af4198fcfcd76e5236102fd5e4befb522.tar.bz2 |
Revert 83198 - Remove DestroyingProfile from a few places.These guys are both non-refcounted and have a lifetime that isexactly equivalent to Profile.The DestroyingProfile code dates to a time whenExtensionService was ref-counted.Review URL: http://codereview.chromium.org/6905050
TBR=aa@chromium.org
Review URL: http://codereview.chromium.org/6902085
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83209 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/extension_service.cc | 14 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_service.h | 4 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_toolbar_model.cc | 4 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_toolbar_model.h | 4 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_impl.cc | 3 | ||||
-rw-r--r-- | chrome/test/testing_profile.cc | 1 |
6 files changed, 30 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 52d24fe..0462912 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -507,6 +507,7 @@ PendingExtensionManager* ExtensionService::pending_extension_manager() { } ExtensionService::~ExtensionService() { + CHECK(!profile_); // Profile should have told us it's going away. UnloadAllExtensions(); ProviderCollection::const_iterator i; @@ -1225,6 +1226,19 @@ Profile* ExtensionService::profile() { return profile_; } +void ExtensionService::DestroyingProfile() { + if (updater_.get()) { + updater_->Stop(); + } + browser_event_router_.reset(); + preference_event_router_.reset(); + pref_change_registrar_.RemoveAll(); + profile_ = NULL; + toolbar_model_.DestroyingProfile(); + method_factory_.RevokeAll(); + weak_ptr_factory_.InvalidateWeakPtrs(); +} + ExtensionPrefs* ExtensionService::extension_prefs() { return extension_prefs_; } diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 6fae172..5898605 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -397,6 +397,10 @@ class ExtensionService Profile* profile(); + // Profile calls this when it is being destroyed so that we know not to call + // it. + void DestroyingProfile(); + // TODO(skerner): Change to const ExtensionPrefs& extension_prefs() const, // ExtensionPrefs* mutable_extension_prefs(). ExtensionPrefs* extension_prefs(); diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc index 659f7a4..1c3a403 100644 --- a/chrome/browser/extensions/extension_toolbar_model.cc +++ b/chrome/browser/extensions/extension_toolbar_model.cc @@ -34,6 +34,10 @@ ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service) ExtensionToolbarModel::~ExtensionToolbarModel() { } +void ExtensionToolbarModel::DestroyingProfile() { + registrar_.RemoveAll(); +} + void ExtensionToolbarModel::AddObserver(Observer* observer) { observers_.AddObserver(observer); } diff --git a/chrome/browser/extensions/extension_toolbar_model.h b/chrome/browser/extensions/extension_toolbar_model.h index 1e1c9d7..5b5ba4b 100644 --- a/chrome/browser/extensions/extension_toolbar_model.h +++ b/chrome/browser/extensions/extension_toolbar_model.h @@ -20,6 +20,10 @@ class ExtensionToolbarModel : public NotificationObserver { explicit ExtensionToolbarModel(ExtensionService* service); ~ExtensionToolbarModel(); + // Notifies the toolbar model that the Profile that suplied its + // prefs is being destroyed. + void DestroyingProfile(); + // A class which is informed of changes to the model; represents the view of // MVC. class Observer { diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index 225d066..96c1487 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -651,6 +651,9 @@ ProfileImpl::~ProfileImpl() { if (extension_message_service_) extension_message_service_->DestroyingProfile(); + if (extension_service_.get()) + extension_service_->DestroyingProfile(); + if (pref_proxy_config_tracker_) pref_proxy_config_tracker_->DetachFromPrefService(); diff --git a/chrome/test/testing_profile.cc b/chrome/test/testing_profile.cc index b411a56..560c603 100644 --- a/chrome/test/testing_profile.cc +++ b/chrome/test/testing_profile.cc @@ -203,6 +203,7 @@ TestingProfile::~TestingProfile() { DestroyFaviconService(); DestroyWebDataService(); if (extension_service_.get()) { + extension_service_->DestroyingProfile(); extension_service_.reset(); } if (pref_proxy_config_tracker_.get()) |