extension_registry_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 <string>
8
9#include "base/memory/ref_counted.h"
10#include "extensions/common/extension.h"
11#include "extensions/common/test_util.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace extensions {
15namespace {
16
17typedef testing::Test ExtensionRegistryTest;
18
19TEST_F(ExtensionRegistryTest, FillAndClearRegistry) {
20  ExtensionRegistry registry;
21  scoped_refptr<Extension> extension1 = test_util::CreateExtensionWithID("id1");
22  scoped_refptr<Extension> extension2 = test_util::CreateExtensionWithID("id2");
23  scoped_refptr<Extension> extension3 = test_util::CreateExtensionWithID("id3");
24  scoped_refptr<Extension> extension4 = test_util::CreateExtensionWithID("id4");
25
26  // All the sets start empty.
27  EXPECT_EQ(0u, registry.enabled_extensions().size());
28  EXPECT_EQ(0u, registry.disabled_extensions().size());
29  EXPECT_EQ(0u, registry.terminated_extensions().size());
30  EXPECT_EQ(0u, registry.blacklisted_extensions().size());
31
32  // Extensions can be added to each set.
33  registry.AddEnabled(extension1);
34  registry.AddDisabled(extension2);
35  registry.AddTerminated(extension3);
36  registry.AddBlacklisted(extension4);
37
38  EXPECT_EQ(1u, registry.enabled_extensions().size());
39  EXPECT_EQ(1u, registry.disabled_extensions().size());
40  EXPECT_EQ(1u, registry.terminated_extensions().size());
41  EXPECT_EQ(1u, registry.blacklisted_extensions().size());
42
43  // Clearing the registry clears all sets.
44  registry.ClearAll();
45
46  EXPECT_EQ(0u, registry.enabled_extensions().size());
47  EXPECT_EQ(0u, registry.disabled_extensions().size());
48  EXPECT_EQ(0u, registry.terminated_extensions().size());
49  EXPECT_EQ(0u, registry.blacklisted_extensions().size());
50}
51
52// A simple test of adding and removing things from sets.
53TEST_F(ExtensionRegistryTest, AddAndRemoveExtensionFromRegistry) {
54  ExtensionRegistry registry;
55
56  // Adding an extension works.
57  scoped_refptr<Extension> extension = test_util::CreateExtensionWithID("id");
58  EXPECT_TRUE(registry.AddEnabled(extension));
59  EXPECT_EQ(1u, registry.enabled_extensions().size());
60
61  // The extension was only added to one set.
62  EXPECT_EQ(0u, registry.disabled_extensions().size());
63  EXPECT_EQ(0u, registry.terminated_extensions().size());
64  EXPECT_EQ(0u, registry.blacklisted_extensions().size());
65
66  // Removing an extension works.
67  EXPECT_TRUE(registry.RemoveEnabled(extension->id()));
68  EXPECT_EQ(0u, registry.enabled_extensions().size());
69
70  // Trying to remove an extension that isn't in the set fails cleanly.
71  EXPECT_FALSE(registry.RemoveEnabled(extension->id()));
72}
73
74TEST_F(ExtensionRegistryTest, AddExtensionToRegistryTwice) {
75  ExtensionRegistry registry;
76  scoped_refptr<Extension> extension = test_util::CreateExtensionWithID("id");
77
78  // An extension can exist in two sets at once. It would be nice to eliminate
79  // this functionality, but some users of ExtensionRegistry need it.
80  EXPECT_TRUE(registry.AddEnabled(extension));
81  EXPECT_TRUE(registry.AddDisabled(extension));
82
83  EXPECT_EQ(1u, registry.enabled_extensions().size());
84  EXPECT_EQ(1u, registry.disabled_extensions().size());
85  EXPECT_EQ(0u, registry.terminated_extensions().size());
86  EXPECT_EQ(0u, registry.blacklisted_extensions().size());
87}
88
89TEST_F(ExtensionRegistryTest, GetExtensionById) {
90  ExtensionRegistry registry;
91
92  // Trying to get an extension fails cleanly when the sets are empty.
93  EXPECT_FALSE(
94      registry.GetExtensionById("id", ExtensionRegistry::EVERYTHING));
95
96  scoped_refptr<Extension> enabled =
97      test_util::CreateExtensionWithID("enabled");
98  scoped_refptr<Extension> disabled =
99      test_util::CreateExtensionWithID("disabled");
100  scoped_refptr<Extension> terminated =
101      test_util::CreateExtensionWithID("terminated");
102  scoped_refptr<Extension> blacklisted =
103      test_util::CreateExtensionWithID("blacklisted");
104
105  // Add an extension to each set.
106  registry.AddEnabled(enabled);
107  registry.AddDisabled(disabled);
108  registry.AddTerminated(terminated);
109  registry.AddBlacklisted(blacklisted);
110
111  // Enabled is part of everything and the enabled list.
112  EXPECT_TRUE(
113      registry.GetExtensionById("enabled", ExtensionRegistry::EVERYTHING));
114  EXPECT_TRUE(
115      registry.GetExtensionById("enabled", ExtensionRegistry::ENABLED));
116  EXPECT_FALSE(
117      registry.GetExtensionById("enabled", ExtensionRegistry::DISABLED));
118  EXPECT_FALSE(
119      registry.GetExtensionById("enabled", ExtensionRegistry::TERMINATED));
120  EXPECT_FALSE(
121      registry.GetExtensionById("enabled", ExtensionRegistry::BLACKLISTED));
122
123  // Disabled is part of everything and the disabled list.
124  EXPECT_TRUE(
125      registry.GetExtensionById("disabled", ExtensionRegistry::EVERYTHING));
126  EXPECT_FALSE(
127      registry.GetExtensionById("disabled", ExtensionRegistry::ENABLED));
128  EXPECT_TRUE(
129      registry.GetExtensionById("disabled", ExtensionRegistry::DISABLED));
130  EXPECT_FALSE(
131      registry.GetExtensionById("disabled", ExtensionRegistry::TERMINATED));
132  EXPECT_FALSE(
133      registry.GetExtensionById("disabled", ExtensionRegistry::BLACKLISTED));
134
135  // Terminated is part of everything and the terminated list.
136  EXPECT_TRUE(
137      registry.GetExtensionById("terminated", ExtensionRegistry::EVERYTHING));
138  EXPECT_FALSE(
139      registry.GetExtensionById("terminated", ExtensionRegistry::ENABLED));
140  EXPECT_FALSE(
141      registry.GetExtensionById("terminated", ExtensionRegistry::DISABLED));
142  EXPECT_TRUE(
143      registry.GetExtensionById("terminated", ExtensionRegistry::TERMINATED));
144  EXPECT_FALSE(
145      registry.GetExtensionById("terminated", ExtensionRegistry::BLACKLISTED));
146
147  // Blacklisted is part of everything and the blacklisted list.
148  EXPECT_TRUE(
149      registry.GetExtensionById("blacklisted", ExtensionRegistry::EVERYTHING));
150  EXPECT_FALSE(
151      registry.GetExtensionById("blacklisted", ExtensionRegistry::ENABLED));
152  EXPECT_FALSE(
153      registry.GetExtensionById("blacklisted", ExtensionRegistry::DISABLED));
154  EXPECT_FALSE(
155      registry.GetExtensionById("blacklisted", ExtensionRegistry::TERMINATED));
156  EXPECT_TRUE(
157      registry.GetExtensionById("blacklisted", ExtensionRegistry::BLACKLISTED));
158
159  // Enabled can be found with multiple flags set.
160  EXPECT_TRUE(registry.GetExtensionById(
161      "enabled", ExtensionRegistry::ENABLED | ExtensionRegistry::TERMINATED));
162
163  // Enabled isn't found if the wrong flags are set.
164  EXPECT_FALSE(registry.GetExtensionById(
165      "enabled", ExtensionRegistry::DISABLED | ExtensionRegistry::BLACKLISTED));
166}
167
168}  // namespace
169}  // namespace extensions
170