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.
5 #include "extensions/browser/extension_registry.h"
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"
14 namespace extensions
{
17 typedef testing::Test ExtensionRegistryTest
;
19 TEST_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");
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());
32 // Extensions can be added to each set.
33 registry
.AddEnabled(extension1
);
34 registry
.AddDisabled(extension2
);
35 registry
.AddTerminated(extension3
);
36 registry
.AddBlacklisted(extension4
);
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());
43 // Clearing the registry clears all sets.
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());
52 // A simple test of adding and removing things from sets.
53 TEST_F(ExtensionRegistryTest
, AddAndRemoveExtensionFromRegistry
) {
54 ExtensionRegistry registry
;
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());
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());
66 // Removing an extension works.
67 EXPECT_TRUE(registry
.RemoveEnabled(extension
->id()));
68 EXPECT_EQ(0u, registry
.enabled_extensions().size());
70 // Trying to remove an extension that isn't in the set fails cleanly.
71 EXPECT_FALSE(registry
.RemoveEnabled(extension
->id()));
74 TEST_F(ExtensionRegistryTest
, AddExtensionToRegistryTwice
) {
75 ExtensionRegistry registry
;
76 scoped_refptr
<Extension
> extension
= test_util::CreateExtensionWithID("id");
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
));
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());
89 TEST_F(ExtensionRegistryTest
, GetExtensionById
) {
90 ExtensionRegistry registry
;
92 // Trying to get an extension fails cleanly when the sets are empty.
94 registry
.GetExtensionById("id", ExtensionRegistry::EVERYTHING
));
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");
105 // Add an extension to each set.
106 registry
.AddEnabled(enabled
);
107 registry
.AddDisabled(disabled
);
108 registry
.AddTerminated(terminated
);
109 registry
.AddBlacklisted(blacklisted
);
111 // Enabled is part of everything and the enabled list.
113 registry
.GetExtensionById("enabled", ExtensionRegistry::EVERYTHING
));
115 registry
.GetExtensionById("enabled", ExtensionRegistry::ENABLED
));
117 registry
.GetExtensionById("enabled", ExtensionRegistry::DISABLED
));
119 registry
.GetExtensionById("enabled", ExtensionRegistry::TERMINATED
));
121 registry
.GetExtensionById("enabled", ExtensionRegistry::BLACKLISTED
));
123 // Disabled is part of everything and the disabled list.
125 registry
.GetExtensionById("disabled", ExtensionRegistry::EVERYTHING
));
127 registry
.GetExtensionById("disabled", ExtensionRegistry::ENABLED
));
129 registry
.GetExtensionById("disabled", ExtensionRegistry::DISABLED
));
131 registry
.GetExtensionById("disabled", ExtensionRegistry::TERMINATED
));
133 registry
.GetExtensionById("disabled", ExtensionRegistry::BLACKLISTED
));
135 // Terminated is part of everything and the terminated list.
137 registry
.GetExtensionById("terminated", ExtensionRegistry::EVERYTHING
));
139 registry
.GetExtensionById("terminated", ExtensionRegistry::ENABLED
));
141 registry
.GetExtensionById("terminated", ExtensionRegistry::DISABLED
));
143 registry
.GetExtensionById("terminated", ExtensionRegistry::TERMINATED
));
145 registry
.GetExtensionById("terminated", ExtensionRegistry::BLACKLISTED
));
147 // Blacklisted is part of everything and the blacklisted list.
149 registry
.GetExtensionById("blacklisted", ExtensionRegistry::EVERYTHING
));
151 registry
.GetExtensionById("blacklisted", ExtensionRegistry::ENABLED
));
153 registry
.GetExtensionById("blacklisted", ExtensionRegistry::DISABLED
));
155 registry
.GetExtensionById("blacklisted", ExtensionRegistry::TERMINATED
));
157 registry
.GetExtensionById("blacklisted", ExtensionRegistry::BLACKLISTED
));
159 // Enabled can be found with multiple flags set.
160 EXPECT_TRUE(registry
.GetExtensionById(
161 "enabled", ExtensionRegistry::ENABLED
| ExtensionRegistry::TERMINATED
));
163 // Enabled isn't found if the wrong flags are set.
164 EXPECT_FALSE(registry
.GetExtensionById(
165 "enabled", ExtensionRegistry::DISABLED
| ExtensionRegistry::BLACKLISTED
));
169 } // namespace extensions