extension_registry.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "extensions/browser/extension_registry.h" 6 7#include "base/strings/string_util.h" 8#include "extensions/browser/extension_registry_factory.h" 9#include "extensions/browser/extension_registry_observer.h" 10 11namespace extensions { 12 13ExtensionRegistry::ExtensionRegistry() {} 14ExtensionRegistry::~ExtensionRegistry() {} 15 16// static 17ExtensionRegistry* ExtensionRegistry::Get(content::BrowserContext* context) { 18 return ExtensionRegistryFactory::GetForBrowserContext(context); 19} 20 21scoped_ptr<ExtensionSet> ExtensionRegistry::GenerateInstalledExtensionsSet() 22 const { 23 scoped_ptr<ExtensionSet> installed_extensions(new ExtensionSet); 24 installed_extensions->InsertAll(enabled_extensions_); 25 installed_extensions->InsertAll(disabled_extensions_); 26 installed_extensions->InsertAll(terminated_extensions_); 27 installed_extensions->InsertAll(blacklisted_extensions_); 28 return installed_extensions.Pass(); 29} 30 31void ExtensionRegistry::AddObserver(ExtensionRegistryObserver* observer) { 32 observers_.AddObserver(observer); 33} 34 35void ExtensionRegistry::RemoveObserver(ExtensionRegistryObserver* observer) { 36 observers_.RemoveObserver(observer); 37} 38 39void ExtensionRegistry::TriggerOnLoaded(const Extension* extension) { 40 DCHECK(enabled_extensions_.Contains(extension->id())); 41 FOR_EACH_OBSERVER( 42 ExtensionRegistryObserver, observers_, OnExtensionLoaded(extension)); 43} 44 45void ExtensionRegistry::TriggerOnUnloaded(const Extension* extension) { 46 DCHECK(!enabled_extensions_.Contains(extension->id())); 47 FOR_EACH_OBSERVER( 48 ExtensionRegistryObserver, observers_, OnExtensionUnloaded(extension)); 49} 50 51const Extension* ExtensionRegistry::GetExtensionById(const std::string& id, 52 int include_mask) const { 53 std::string lowercase_id = StringToLowerASCII(id); 54 if (include_mask & ENABLED) { 55 const Extension* extension = enabled_extensions_.GetByID(lowercase_id); 56 if (extension) 57 return extension; 58 } 59 if (include_mask & DISABLED) { 60 const Extension* extension = disabled_extensions_.GetByID(lowercase_id); 61 if (extension) 62 return extension; 63 } 64 if (include_mask & TERMINATED) { 65 const Extension* extension = terminated_extensions_.GetByID(lowercase_id); 66 if (extension) 67 return extension; 68 } 69 if (include_mask & BLACKLISTED) { 70 const Extension* extension = blacklisted_extensions_.GetByID(lowercase_id); 71 if (extension) 72 return extension; 73 } 74 return NULL; 75} 76 77bool ExtensionRegistry::AddEnabled( 78 const scoped_refptr<const Extension>& extension) { 79 return enabled_extensions_.Insert(extension); 80} 81 82bool ExtensionRegistry::RemoveEnabled(const std::string& id) { 83 return enabled_extensions_.Remove(id); 84} 85 86bool ExtensionRegistry::AddDisabled( 87 const scoped_refptr<const Extension>& extension) { 88 return disabled_extensions_.Insert(extension); 89} 90 91bool ExtensionRegistry::RemoveDisabled(const std::string& id) { 92 return disabled_extensions_.Remove(id); 93} 94 95bool ExtensionRegistry::AddTerminated( 96 const scoped_refptr<const Extension>& extension) { 97 return terminated_extensions_.Insert(extension); 98} 99 100bool ExtensionRegistry::RemoveTerminated(const std::string& id) { 101 return terminated_extensions_.Remove(id); 102} 103 104bool ExtensionRegistry::AddBlacklisted( 105 const scoped_refptr<const Extension>& extension) { 106 return blacklisted_extensions_.Insert(extension); 107} 108 109bool ExtensionRegistry::RemoveBlacklisted(const std::string& id) { 110 return blacklisted_extensions_.Remove(id); 111} 112 113void ExtensionRegistry::ClearAll() { 114 enabled_extensions_.Clear(); 115 disabled_extensions_.Clear(); 116 terminated_extensions_.Clear(); 117 blacklisted_extensions_.Clear(); 118} 119 120void ExtensionRegistry::SetDisabledModificationCallback( 121 const ExtensionSet::ModificationCallback& callback) { 122 disabled_extensions_.set_modification_callback(callback); 123} 124 125void ExtensionRegistry::Shutdown() { 126 // Release references to all Extension objects in the sets. 127 ClearAll(); 128} 129 130} // namespace extensions 131