123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- // Copyright 2013 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "extensions/browser/extension_registry.h"
- #include "base/observer_list.h"
- #include "base/strings/string_util.h"
- #include "extensions/browser/extension_registry_factory.h"
- #include "extensions/browser/extension_registry_observer.h"
- namespace extensions {
- ExtensionRegistry::ExtensionRegistry(content::BrowserContext* browser_context)
- : browser_context_(browser_context) {}
- ExtensionRegistry::~ExtensionRegistry() {}
- // static
- ExtensionRegistry* ExtensionRegistry::Get(content::BrowserContext* context) {
- return ExtensionRegistryFactory::GetForBrowserContext(context);
- }
- std::unique_ptr<ExtensionSet>
- ExtensionRegistry::GenerateInstalledExtensionsSet() const {
- return GenerateInstalledExtensionsSet(EVERYTHING);
- }
- std::unique_ptr<ExtensionSet> ExtensionRegistry::GenerateInstalledExtensionsSet(
- int include_mask) const {
- std::unique_ptr<ExtensionSet> installed_extensions(new ExtensionSet);
- if (include_mask & IncludeFlag::ENABLED)
- installed_extensions->InsertAll(enabled_extensions_);
- if (include_mask & IncludeFlag::DISABLED)
- installed_extensions->InsertAll(disabled_extensions_);
- if (include_mask & IncludeFlag::TERMINATED)
- installed_extensions->InsertAll(terminated_extensions_);
- if (include_mask & IncludeFlag::BLOCKLISTED)
- installed_extensions->InsertAll(blocklisted_extensions_);
- if (include_mask & IncludeFlag::BLOCKED)
- installed_extensions->InsertAll(blocked_extensions_);
- return installed_extensions;
- }
- base::Version ExtensionRegistry::GetStoredVersion(const ExtensionId& id) const {
- int include_mask = ExtensionRegistry::ENABLED | ExtensionRegistry::DISABLED |
- ExtensionRegistry::TERMINATED |
- ExtensionRegistry::BLOCKLISTED |
- ExtensionRegistry::BLOCKED;
- const Extension* registry_extension = GetExtensionById(id, include_mask);
- return registry_extension ? registry_extension->version() : base::Version();
- }
- void ExtensionRegistry::AddObserver(ExtensionRegistryObserver* observer) {
- observers_.AddObserver(observer);
- }
- void ExtensionRegistry::RemoveObserver(ExtensionRegistryObserver* observer) {
- observers_.RemoveObserver(observer);
- }
- void ExtensionRegistry::TriggerOnLoaded(const Extension* extension) {
- CHECK(extension);
- DCHECK(enabled_extensions_.Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionLoaded(browser_context_, extension);
- }
- void ExtensionRegistry::TriggerOnReady(const Extension* extension) {
- CHECK(extension);
- DCHECK(enabled_extensions_.Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionReady(browser_context_, extension);
- }
- void ExtensionRegistry::TriggerOnUnloaded(const Extension* extension,
- UnloadedExtensionReason reason) {
- CHECK(extension);
- DCHECK(!enabled_extensions_.Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionUnloaded(browser_context_, extension, reason);
- }
- void ExtensionRegistry::TriggerOnWillBeInstalled(const Extension* extension,
- bool is_update,
- const std::string& old_name) {
- CHECK(extension);
- DCHECK_EQ(is_update,
- GenerateInstalledExtensionsSet()->Contains(extension->id()));
- DCHECK_EQ(is_update, !old_name.empty());
- for (auto& observer : observers_)
- observer.OnExtensionWillBeInstalled(browser_context_, extension, is_update,
- old_name);
- }
- void ExtensionRegistry::TriggerOnInstalled(const Extension* extension,
- bool is_update) {
- CHECK(extension);
- DCHECK(GenerateInstalledExtensionsSet()->Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionInstalled(browser_context_, extension, is_update);
- }
- void ExtensionRegistry::TriggerOnUninstalled(const Extension* extension,
- UninstallReason reason) {
- CHECK(extension);
- DCHECK(!GenerateInstalledExtensionsSet()->Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionUninstalled(browser_context_, extension, reason);
- }
- void ExtensionRegistry::TriggerOnUninstallationDenied(
- const Extension* extension) {
- CHECK(extension);
- DCHECK(GenerateInstalledExtensionsSet()->Contains(extension->id()));
- for (auto& observer : observers_)
- observer.OnExtensionUninstallationDenied(browser_context_, extension);
- }
- const Extension* ExtensionRegistry::GetExtensionById(const std::string& id,
- int include_mask) const {
- std::string lowercase_id = base::ToLowerASCII(id);
- if (include_mask & ENABLED) {
- const Extension* extension = enabled_extensions_.GetByID(lowercase_id);
- if (extension)
- return extension;
- }
- if (include_mask & DISABLED) {
- const Extension* extension = disabled_extensions_.GetByID(lowercase_id);
- if (extension)
- return extension;
- }
- if (include_mask & TERMINATED) {
- const Extension* extension = terminated_extensions_.GetByID(lowercase_id);
- if (extension)
- return extension;
- }
- if (include_mask & BLOCKLISTED) {
- const Extension* extension = blocklisted_extensions_.GetByID(lowercase_id);
- if (extension)
- return extension;
- }
- if (include_mask & BLOCKED) {
- const Extension* extension = blocked_extensions_.GetByID(lowercase_id);
- if (extension)
- return extension;
- }
- return NULL;
- }
- const Extension* ExtensionRegistry::GetInstalledExtension(
- const std::string& id) const {
- return GetExtensionById(id, ExtensionRegistry::EVERYTHING);
- }
- bool ExtensionRegistry::AddEnabled(
- const scoped_refptr<const Extension>& extension) {
- return enabled_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveEnabled(const std::string& id) {
- // Only enabled extensions can be ready, so removing an enabled extension
- // should also remove from the ready set if possible.
- if (ready_extensions_.Contains(id))
- RemoveReady(id);
- return enabled_extensions_.Remove(id);
- }
- bool ExtensionRegistry::AddDisabled(
- const scoped_refptr<const Extension>& extension) {
- return disabled_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveDisabled(const std::string& id) {
- return disabled_extensions_.Remove(id);
- }
- bool ExtensionRegistry::AddTerminated(
- const scoped_refptr<const Extension>& extension) {
- return terminated_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveTerminated(const std::string& id) {
- return terminated_extensions_.Remove(id);
- }
- bool ExtensionRegistry::AddBlocklisted(
- const scoped_refptr<const Extension>& extension) {
- return blocklisted_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveBlocklisted(const std::string& id) {
- return blocklisted_extensions_.Remove(id);
- }
- bool ExtensionRegistry::AddBlocked(
- const scoped_refptr<const Extension>& extension) {
- return blocked_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveBlocked(const std::string& id) {
- return blocked_extensions_.Remove(id);
- }
- bool ExtensionRegistry::AddReady(
- const scoped_refptr<const Extension>& extension) {
- return ready_extensions_.Insert(extension);
- }
- bool ExtensionRegistry::RemoveReady(const std::string& id) {
- return ready_extensions_.Remove(id);
- }
- void ExtensionRegistry::ClearAll() {
- enabled_extensions_.Clear();
- disabled_extensions_.Clear();
- terminated_extensions_.Clear();
- blocklisted_extensions_.Clear();
- blocked_extensions_.Clear();
- ready_extensions_.Clear();
- }
- void ExtensionRegistry::Shutdown() {
- // Release references to all Extension objects in the sets.
- ClearAll();
- for (auto& observer : observers_)
- observer.OnShutdown(this);
- }
- } // namespace extensions
|