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/admin_policy.h"
7 #include "base/values.h"
8 #include "extensions/common/extension.h"
9 #include "extensions/common/manifest.h"
10 #include "extensions/common/manifest_constants.h"
11 #include "testing/gtest/include/gtest/gtest.h"
14 using extensions::Extension
;
15 using extensions::Manifest
;
17 namespace ap
= extensions::admin_policy
;
19 class ExtensionAdminPolicyTest
: public testing::Test
{
21 void CreateExtension(Manifest::Location location
) {
22 base::DictionaryValue values
;
23 CreateExtensionFromValues(location
, &values
);
26 void CreateHostedApp(Manifest::Location location
) {
27 base::DictionaryValue values
;
28 values
.Set(extensions::manifest_keys::kWebURLs
, new base::ListValue());
29 values
.SetString(extensions::manifest_keys::kLaunchWebURL
,
30 "http://www.example.com");
31 CreateExtensionFromValues(location
, &values
);
34 void CreateExtensionFromValues(Manifest::Location location
,
35 base::DictionaryValue
* values
) {
36 values
->SetString(extensions::manifest_keys::kName
, "test");
37 values
->SetString(extensions::manifest_keys::kVersion
, "0.1");
39 extension_
= Extension::Create(base::FilePath(), location
, *values
,
40 Extension::NO_FLAGS
, &error
);
41 ASSERT_TRUE(extension_
.get());
45 scoped_refptr
<Extension
> extension_
;
48 // Tests the flag value indicating that extensions are blacklisted by default.
49 TEST_F(ExtensionAdminPolicyTest
, BlacklistedByDefault
) {
50 EXPECT_FALSE(ap::BlacklistedByDefault(NULL
));
52 base::ListValue blacklist
;
53 blacklist
.Append(new base::StringValue("http://www.google.com"));
54 EXPECT_FALSE(ap::BlacklistedByDefault(&blacklist
));
55 blacklist
.Append(new base::StringValue("*"));
56 EXPECT_TRUE(ap::BlacklistedByDefault(&blacklist
));
59 blacklist
.Append(new base::StringValue("*"));
60 EXPECT_TRUE(ap::BlacklistedByDefault(&blacklist
));
63 // Tests UserMayLoad for required extensions.
64 TEST_F(ExtensionAdminPolicyTest
, UserMayLoadRequired
) {
65 CreateExtension(Manifest::COMPONENT
);
66 EXPECT_TRUE(ap::UserMayLoad(NULL
, NULL
, NULL
, NULL
, extension_
.get(), NULL
));
68 EXPECT_TRUE(ap::UserMayLoad(NULL
, NULL
, NULL
, NULL
, extension_
.get(),
70 EXPECT_TRUE(error
.empty());
72 // Required extensions may load even if they're on the blacklist.
73 base::ListValue blacklist
;
74 blacklist
.Append(new base::StringValue(extension_
->id()));
75 EXPECT_TRUE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
78 blacklist
.Append(new base::StringValue("*"));
79 EXPECT_TRUE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
83 // Tests UserMayLoad when no blacklist exists, or it's empty.
84 TEST_F(ExtensionAdminPolicyTest
, UserMayLoadNoBlacklist
) {
85 CreateExtension(Manifest::INTERNAL
);
86 EXPECT_TRUE(ap::UserMayLoad(NULL
, NULL
, NULL
, NULL
, extension_
.get(), NULL
));
87 base::ListValue blacklist
;
88 EXPECT_TRUE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
91 EXPECT_TRUE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
93 EXPECT_TRUE(error
.empty());
96 // Tests UserMayLoad for an extension on the whitelist.
97 TEST_F(ExtensionAdminPolicyTest
, UserMayLoadWhitelisted
) {
98 CreateExtension(Manifest::INTERNAL
);
100 base::ListValue whitelist
;
101 whitelist
.Append(new base::StringValue(extension_
->id()));
102 EXPECT_TRUE(ap::UserMayLoad(NULL
, &whitelist
, NULL
, NULL
, extension_
.get(),
105 base::ListValue blacklist
;
106 blacklist
.Append(new base::StringValue(extension_
->id()));
107 EXPECT_TRUE(ap::UserMayLoad(NULL
, &whitelist
, NULL
, NULL
, extension_
.get(),
109 base::string16 error
;
110 EXPECT_TRUE(ap::UserMayLoad(NULL
, &whitelist
, NULL
, NULL
, extension_
.get(),
112 EXPECT_TRUE(error
.empty());
115 // Tests UserMayLoad for an extension on the blacklist.
116 TEST_F(ExtensionAdminPolicyTest
, UserMayLoadBlacklisted
) {
117 CreateExtension(Manifest::INTERNAL
);
119 // Blacklisted by default.
120 base::ListValue blacklist
;
121 blacklist
.Append(new base::StringValue("*"));
122 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
124 base::string16 error
;
125 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
127 EXPECT_FALSE(error
.empty());
129 // Extension on the blacklist, with and without wildcard.
130 blacklist
.Append(new base::StringValue(extension_
->id()));
131 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
134 blacklist
.Append(new base::StringValue(extension_
->id()));
135 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, NULL
, NULL
, NULL
, extension_
.get(),
138 // With a whitelist. There's no such thing as a whitelist wildcard.
139 base::ListValue whitelist
;
141 new base::StringValue("behllobkkfkfnphdnhnkndlbkcpglgmj"));
142 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, &whitelist
, NULL
, NULL
,
143 extension_
.get(), NULL
));
144 whitelist
.Append(new base::StringValue("*"));
145 EXPECT_FALSE(ap::UserMayLoad(&blacklist
, &whitelist
, NULL
, NULL
,
146 extension_
.get(), NULL
));
149 TEST_F(ExtensionAdminPolicyTest
, UserMayLoadAllowedTypes
) {
150 CreateExtension(Manifest::INTERNAL
);
151 EXPECT_TRUE(ap::UserMayLoad(NULL
, NULL
, NULL
, NULL
, extension_
.get(), NULL
));
153 base::ListValue allowed_types
;
154 EXPECT_FALSE(ap::UserMayLoad(NULL
, NULL
, NULL
, &allowed_types
,
155 extension_
.get(), NULL
));
157 allowed_types
.AppendInteger(Manifest::TYPE_EXTENSION
);
158 EXPECT_TRUE(ap::UserMayLoad(NULL
, NULL
, NULL
, &allowed_types
,
159 extension_
.get(), NULL
));
161 CreateHostedApp(Manifest::INTERNAL
);
162 EXPECT_FALSE(ap::UserMayLoad(NULL
, NULL
, NULL
, &allowed_types
,
163 extension_
.get(), NULL
));
165 CreateHostedApp(Manifest::EXTERNAL_POLICY_DOWNLOAD
);
166 EXPECT_FALSE(ap::UserMayLoad(NULL
, NULL
, NULL
, &allowed_types
,
167 extension_
.get(), NULL
));
170 TEST_F(ExtensionAdminPolicyTest
, UserMayModifySettings
) {
171 CreateExtension(Manifest::INTERNAL
);
172 EXPECT_TRUE(ap::UserMayModifySettings(extension_
.get(), NULL
));
173 base::string16 error
;
174 EXPECT_TRUE(ap::UserMayModifySettings(extension_
.get(), &error
));
175 EXPECT_TRUE(error
.empty());
177 CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD
);
179 EXPECT_FALSE(ap::UserMayModifySettings(extension_
.get(), NULL
));
180 EXPECT_FALSE(ap::UserMayModifySettings(extension_
.get(), &error
));
181 EXPECT_FALSE(error
.empty());
184 TEST_F(ExtensionAdminPolicyTest
, MustRemainEnabled
) {
185 CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD
);
186 EXPECT_TRUE(ap::MustRemainEnabled(extension_
.get(), NULL
));
187 base::string16 error
;
188 EXPECT_TRUE(ap::MustRemainEnabled(extension_
.get(), &error
));
189 EXPECT_FALSE(error
.empty());
191 CreateExtension(Manifest::INTERNAL
);
193 EXPECT_FALSE(ap::MustRemainEnabled(extension_
.get(), NULL
));
194 EXPECT_FALSE(ap::MustRemainEnabled(extension_
.get(), &error
));
195 EXPECT_TRUE(error
.empty());