Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 2d0a040430758c1339aae98ed763a5ff5b917d34..264a76ac96c17c5d601b9052c446b0540bae5fa7 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -1222,6 +1222,13 @@ void ExtensionService::NotifyExtensionUnloaded( |
UpdateActiveExtensionsInCrashReporter(); |
} |
+void ExtensionService::NotifyExtensionRemoved(const Extension* extension) { |
+ for (size_t i = 0; i < extension_removed_callbacks_.size(); ++i) { |
+ if (!extension_removed_callbacks_[i].is_null()) |
+ extension_removed_callbacks_[i].Run(extension); |
+ } |
+} |
+ |
Profile* ExtensionService::profile() { |
return profile_; |
} |
@@ -1955,10 +1962,7 @@ void ExtensionService::UnloadExtension( |
NotifyExtensionUnloaded(extension.get(), reason); |
} |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_EXTENSION_REMOVED, |
- content::Source<Profile>(profile_), |
- content::Details<const Extension>(extension.get())); |
+ NotifyExtensionRemoved(extension.get()); |
} |
void ExtensionService::UnloadAllExtensions() { |
@@ -2650,12 +2654,8 @@ void ExtensionService::UntrackTerminatedExtension(const std::string& id) { |
std::string lowercase_id = StringToLowerASCII(id); |
const Extension* extension = terminated_extensions_.GetByID(lowercase_id); |
terminated_extensions_.Remove(lowercase_id); |
- if (extension) { |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_EXTENSION_REMOVED, |
- content::Source<Profile>(profile_), |
- content::Details<const Extension>(extension)); |
- } |
+ if (extension) |
+ NotifyExtensionRemoved(extension); |
} |
const Extension* ExtensionService::GetTerminatedExtension( |
@@ -3170,3 +3170,19 @@ void ExtensionService::RemoveUpdateObserver( |
extensions::UpdateObserver* observer) { |
update_observers_.RemoveObserver(observer); |
} |
+ |
+void ExtensionService::RegisterExtensionRemovedCallback( |
+ const base::Callback<void(const extensions::Extension*)>& callback) { |
+ extension_removed_callbacks_.push_back(callback); |
+} |
+ |
+void ExtensionService::RemoveExtensionRemovedCallback( |
+ const base::Callback<void(const extensions::Extension*)>& callback) { |
+ for (size_t i = 0; i < extension_removed_callbacks_.size(); ++i) { |
+ if (extension_removed_callbacks_[i].Equals(callback)) { |
+ extension_removed_callbacks_.erase( |
+ extension_removed_callbacks_.begin() + i); |
+ return; |
+ } |
+ } |
+} |