Index: extensions/browser/extension_registry.cc |
diff --git a/extensions/browser/extension_registry.cc b/extensions/browser/extension_registry.cc |
index bc5247cdce2002d9cadaf121809d15f0bcbc8e59..cb1e8cc0a872b3ea704e9ea761f88192dccf1ef1 100644 |
--- a/extensions/browser/extension_registry.cc |
+++ b/extensions/browser/extension_registry.cc |
@@ -6,6 +6,7 @@ |
#include "base/strings/string_util.h" |
#include "extensions/browser/extension_registry_factory.h" |
+#include "extensions/browser/extension_registry_observer.h" |
namespace extensions { |
@@ -17,6 +18,14 @@ ExtensionRegistry* ExtensionRegistry::Get(content::BrowserContext* context) { |
return ExtensionRegistryFactory::GetForBrowserContext(context); |
} |
+void ExtensionRegistry::AddObserver(ExtensionRegistryObserver* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void ExtensionRegistry::RemoveObserver(ExtensionRegistryObserver* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
const Extension* ExtensionRegistry::GetExtensionById(const std::string& id, |
int include_mask) const { |
std::string lowercase_id = StringToLowerASCII(id); |
@@ -43,22 +52,42 @@ const Extension* ExtensionRegistry::GetExtensionById(const std::string& id, |
return NULL; |
} |
-bool ExtensionRegistry::AddEnabled( |
+void ExtensionRegistry::UnloadExtension( |
const scoped_refptr<const Extension>& extension) { |
- return enabled_extensions_.Insert(extension); |
+ enabled_extensions_.Remove(extension->id()); |
+ disabled_extensions_.Remove(extension->id()); |
+ FOR_EACH_OBSERVER(ExtensionRegistryObserver, |
+ observers_, |
+ OnExtensionUnloaded(extension.get())); |
} |
-bool ExtensionRegistry::RemoveEnabled(const std::string& id) { |
- return enabled_extensions_.Remove(id); |
+void ExtensionRegistry::EnableExtension( |
+ const scoped_refptr<const Extension>& extension) { |
+ DCHECK(disabled_extensions_.Contains(extension->id())); |
+ enabled_extensions_.Insert(extension); |
+ disabled_extensions_.Remove(extension->id()); |
} |
-bool ExtensionRegistry::AddDisabled( |
+void ExtensionRegistry::DisableExtension( |
const scoped_refptr<const Extension>& extension) { |
- return disabled_extensions_.Insert(extension); |
+ DCHECK(enabled_extensions_.Contains(extension->id()) || |
+ terminated_extensions_.Contains(extension->id())); |
+ disabled_extensions_.Insert(extension); |
+ enabled_extensions_.Remove(extension->id()); |
+ terminated_extensions_.Remove(extension->id()); |
+ FOR_EACH_OBSERVER(ExtensionRegistryObserver, |
+ observers_, |
+ OnExtensionDisabled(extension.get())); |
} |
-bool ExtensionRegistry::RemoveDisabled(const std::string& id) { |
- return disabled_extensions_.Remove(id); |
+bool ExtensionRegistry::AddEnabled( |
+ const scoped_refptr<const Extension>& extension) { |
+ return enabled_extensions_.Insert(extension); |
+} |
+ |
+bool ExtensionRegistry::AddDisabled( |
+ const scoped_refptr<const Extension>& extension) { |
+ return disabled_extensions_.Insert(extension); |
} |
bool ExtensionRegistry::AddTerminated( |