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