summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-27 21:01:30 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-27 21:01:30 +0000
commitbea9ba4af4198fcfcd76e5236102fd5e4befb522 (patch)
tree06ff727140271b653a77108a580bf1b80bf37a09
parenta73173412c9486209d12a6e4653bfc0785dad747 (diff)
downloadchromium_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.cc14
-rw-r--r--chrome/browser/extensions/extension_service.h4
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.cc4
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.h4
-rw-r--r--chrome/browser/profiles/profile_impl.cc3
-rw-r--r--chrome/test/testing_profile.cc1
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())