extension_registry.cc revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
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::TriggerOnUnloaded(const Extension* extension) {
40  DCHECK(!enabled_extensions_.Contains(extension->id()));
41  FOR_EACH_OBSERVER(
42      ExtensionRegistryObserver, observers_, OnExtensionUnloaded(extension));
43}
44
45const Extension* ExtensionRegistry::GetExtensionById(const std::string& id,
46                                                     int include_mask) const {
47  std::string lowercase_id = StringToLowerASCII(id);
48  if (include_mask & ENABLED) {
49    const Extension* extension = enabled_extensions_.GetByID(lowercase_id);
50    if (extension)
51      return extension;
52  }
53  if (include_mask & DISABLED) {
54    const Extension* extension = disabled_extensions_.GetByID(lowercase_id);
55    if (extension)
56      return extension;
57  }
58  if (include_mask & TERMINATED) {
59    const Extension* extension = terminated_extensions_.GetByID(lowercase_id);
60    if (extension)
61      return extension;
62  }
63  if (include_mask & BLACKLISTED) {
64    const Extension* extension = blacklisted_extensions_.GetByID(lowercase_id);
65    if (extension)
66      return extension;
67  }
68  return NULL;
69}
70
71bool ExtensionRegistry::AddEnabled(
72    const scoped_refptr<const Extension>& extension) {
73  return enabled_extensions_.Insert(extension);
74}
75
76bool ExtensionRegistry::RemoveEnabled(const std::string& id) {
77  return enabled_extensions_.Remove(id);
78}
79
80bool ExtensionRegistry::AddDisabled(
81    const scoped_refptr<const Extension>& extension) {
82  return disabled_extensions_.Insert(extension);
83}
84
85bool ExtensionRegistry::RemoveDisabled(const std::string& id) {
86  return disabled_extensions_.Remove(id);
87}
88
89bool ExtensionRegistry::AddTerminated(
90    const scoped_refptr<const Extension>& extension) {
91  return terminated_extensions_.Insert(extension);
92}
93
94bool ExtensionRegistry::RemoveTerminated(const std::string& id) {
95  return terminated_extensions_.Remove(id);
96}
97
98bool ExtensionRegistry::AddBlacklisted(
99    const scoped_refptr<const Extension>& extension) {
100  return blacklisted_extensions_.Insert(extension);
101}
102
103bool ExtensionRegistry::RemoveBlacklisted(const std::string& id) {
104  return blacklisted_extensions_.Remove(id);
105}
106
107void ExtensionRegistry::ClearAll() {
108  enabled_extensions_.Clear();
109  disabled_extensions_.Clear();
110  terminated_extensions_.Clear();
111  blacklisted_extensions_.Clear();
112}
113
114void ExtensionRegistry::SetDisabledModificationCallback(
115    const ExtensionSet::ModificationCallback& callback) {
116  disabled_extensions_.set_modification_callback(callback);
117}
118
119void ExtensionRegistry::Shutdown() {
120  // Release references to all Extension objects in the sets.
121  ClearAll();
122}
123
124}  // namespace extensions
125