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 "base/strings/utf_string_conversions.h"
6 #include "extensions/browser/management_policy.h"
7 #include "extensions/browser/test_management_policy.h"
8 #include "testing/gtest/include/gtest/gtest.h"
10 typedef extensions::TestManagementPolicyProvider TestProvider
;
11 using extensions::Extension
;
13 class ManagementPolicyTest
: public testing::Test
{
15 void SetUp() override
{
16 allow_all_
.SetProhibitedActions(TestProvider::ALLOW_ALL
);
17 no_modify_status_
.SetProhibitedActions(
18 TestProvider::PROHIBIT_MODIFY_STATUS
);
19 no_load_
.SetProhibitedActions(TestProvider::PROHIBIT_LOAD
);
20 must_remain_enabled_
.SetProhibitedActions(
21 TestProvider::MUST_REMAIN_ENABLED
);
22 must_remain_disabled_
.SetProhibitedActions(
23 TestProvider::MUST_REMAIN_DISABLED
);
24 must_remain_disabled_
.SetDisableReason(Extension::DISABLE_SIDELOAD_WIPEOUT
);
25 must_remain_installed_
.SetProhibitedActions(
26 TestProvider::MUST_REMAIN_INSTALLED
);
27 restrict_all_
.SetProhibitedActions(TestProvider::PROHIBIT_MODIFY_STATUS
|
28 TestProvider::PROHIBIT_LOAD
|
29 TestProvider::MUST_REMAIN_ENABLED
);
33 extensions::ManagementPolicy policy_
;
35 TestProvider allow_all_
;
36 TestProvider no_modify_status_
;
37 TestProvider no_load_
;
38 TestProvider must_remain_enabled_
;
39 TestProvider must_remain_disabled_
;
40 TestProvider must_remain_installed_
;
41 TestProvider restrict_all_
;
44 TEST_F(ManagementPolicyTest
, RegisterAndUnregister
) {
45 EXPECT_EQ(0, policy_
.GetNumProviders());
46 policy_
.RegisterProvider(&allow_all_
);
47 EXPECT_EQ(1, policy_
.GetNumProviders());
48 policy_
.RegisterProvider(&allow_all_
);
49 EXPECT_EQ(1, policy_
.GetNumProviders());
51 policy_
.RegisterProvider(&no_modify_status_
);
52 EXPECT_EQ(2, policy_
.GetNumProviders());
53 policy_
.UnregisterProvider(&allow_all_
);
54 EXPECT_EQ(1, policy_
.GetNumProviders());
55 policy_
.UnregisterProvider(&allow_all_
);
56 EXPECT_EQ(1, policy_
.GetNumProviders());
57 policy_
.UnregisterProvider(&no_modify_status_
);
58 EXPECT_EQ(0, policy_
.GetNumProviders());
60 policy_
.RegisterProvider(&allow_all_
);
61 policy_
.RegisterProvider(&no_modify_status_
);
62 EXPECT_EQ(2, policy_
.GetNumProviders());
63 policy_
.UnregisterAllProviders();
64 EXPECT_EQ(0, policy_
.GetNumProviders());
67 TEST_F(ManagementPolicyTest
, UserMayLoad
) {
68 // No providers registered.
70 // The extension and location are irrelevant to the
71 // TestManagementPolicyProviders.
72 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, &error
));
73 EXPECT_TRUE(error
.empty());
75 // One provider, no relevant restriction.
76 policy_
.RegisterProvider(&no_modify_status_
);
77 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, &error
));
78 EXPECT_TRUE(error
.empty());
80 // Two providers, no relevant restrictions.
81 policy_
.RegisterProvider(&must_remain_enabled_
);
82 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, &error
));
83 EXPECT_TRUE(error
.empty());
85 // Three providers, one with a relevant restriction.
86 policy_
.RegisterProvider(&no_load_
);
87 EXPECT_FALSE(policy_
.UserMayLoad(NULL
, &error
));
88 EXPECT_FALSE(error
.empty());
90 // Remove the restriction.
91 policy_
.UnregisterProvider(&no_load_
);
93 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, &error
));
94 EXPECT_TRUE(error
.empty());
96 TEST_F(ManagementPolicyTest
, UserMayModifySettings
) {
97 // No providers registered.
99 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, &error
));
100 EXPECT_TRUE(error
.empty());
102 // One provider, no relevant restriction.
103 policy_
.RegisterProvider(&allow_all_
);
104 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, &error
));
105 EXPECT_TRUE(error
.empty());
107 // Two providers, no relevant restrictions.
108 policy_
.RegisterProvider(&no_load_
);
109 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, &error
));
110 EXPECT_TRUE(error
.empty());
112 // Three providers, one with a relevant restriction.
113 policy_
.RegisterProvider(&no_modify_status_
);
114 EXPECT_FALSE(policy_
.UserMayModifySettings(NULL
, &error
));
115 EXPECT_FALSE(error
.empty());
117 // Remove the restriction.
118 policy_
.UnregisterProvider(&no_modify_status_
);
120 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, &error
));
121 EXPECT_TRUE(error
.empty());
124 TEST_F(ManagementPolicyTest
, MustRemainEnabled
) {
125 // No providers registered.
126 base::string16 error
;
127 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, &error
));
128 EXPECT_TRUE(error
.empty());
130 // One provider, no relevant restriction.
131 policy_
.RegisterProvider(&allow_all_
);
132 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, &error
));
133 EXPECT_TRUE(error
.empty());
135 // Two providers, no relevant restrictions.
136 policy_
.RegisterProvider(&no_modify_status_
);
137 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, &error
));
138 EXPECT_TRUE(error
.empty());
140 // Three providers, one with a relevant restriction.
141 policy_
.RegisterProvider(&must_remain_enabled_
);
142 EXPECT_TRUE(policy_
.MustRemainEnabled(NULL
, &error
));
143 EXPECT_FALSE(error
.empty());
145 // Remove the restriction.
146 policy_
.UnregisterProvider(&must_remain_enabled_
);
148 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, &error
));
149 EXPECT_TRUE(error
.empty());
152 TEST_F(ManagementPolicyTest
, MustRemainDisabled
) {
153 // No providers registered.
154 base::string16 error
;
155 EXPECT_FALSE(policy_
.MustRemainDisabled(NULL
, NULL
, &error
));
156 EXPECT_TRUE(error
.empty());
158 // One provider, no relevant restriction.
159 policy_
.RegisterProvider(&allow_all_
);
160 EXPECT_FALSE(policy_
.MustRemainDisabled(NULL
, NULL
, &error
));
161 EXPECT_TRUE(error
.empty());
163 // Two providers, no relevant restrictions.
164 policy_
.RegisterProvider(&no_modify_status_
);
165 EXPECT_FALSE(policy_
.MustRemainDisabled(NULL
, NULL
, &error
));
166 EXPECT_TRUE(error
.empty());
168 // Three providers, one with a relevant restriction.
169 Extension::DisableReason reason
= Extension::DISABLE_NONE
;
170 policy_
.RegisterProvider(&must_remain_disabled_
);
171 EXPECT_TRUE(policy_
.MustRemainDisabled(NULL
, &reason
, &error
));
172 EXPECT_FALSE(error
.empty());
173 EXPECT_EQ(Extension::DISABLE_SIDELOAD_WIPEOUT
, reason
);
175 // Remove the restriction.
176 policy_
.UnregisterProvider(&must_remain_disabled_
);
178 EXPECT_FALSE(policy_
.MustRemainDisabled(NULL
, NULL
, &error
));
179 EXPECT_TRUE(error
.empty());
182 TEST_F(ManagementPolicyTest
, MustRemainInstalled
) {
183 // No providers registered.
184 base::string16 error
;
185 EXPECT_FALSE(policy_
.MustRemainInstalled(NULL
, &error
));
186 EXPECT_TRUE(error
.empty());
188 // One provider, no relevant restriction.
189 policy_
.RegisterProvider(&allow_all_
);
190 EXPECT_FALSE(policy_
.MustRemainInstalled(NULL
, &error
));
191 EXPECT_TRUE(error
.empty());
193 // Two providers, no relevant restrictions.
194 policy_
.RegisterProvider(&no_modify_status_
);
195 EXPECT_FALSE(policy_
.MustRemainInstalled(NULL
, &error
));
196 EXPECT_TRUE(error
.empty());
198 // Three providers, one with a relevant restriction.
199 policy_
.RegisterProvider(&must_remain_installed_
);
200 EXPECT_TRUE(policy_
.MustRemainInstalled(NULL
, &error
));
201 EXPECT_FALSE(error
.empty());
203 // Remove the restriction.
204 policy_
.UnregisterProvider(&must_remain_installed_
);
206 EXPECT_FALSE(policy_
.MustRemainInstalled(NULL
, &error
));
207 EXPECT_TRUE(error
.empty());
210 // Tests error handling in the ManagementPolicy.
211 TEST_F(ManagementPolicyTest
, ErrorHandling
) {
212 // The error parameter should be unchanged if no restriction was found.
213 std::string original_error
= "Ceci est en effet une erreur.";
214 base::string16 original_error16
= base::UTF8ToUTF16(original_error
);
215 base::string16 error
= original_error16
;
216 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, &error
));
217 EXPECT_EQ(original_error
, base::UTF16ToUTF8(error
));
218 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, &error
));
219 EXPECT_EQ(original_error
, base::UTF16ToUTF8(error
));
220 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, &error
));
221 EXPECT_EQ(original_error
, base::UTF16ToUTF8(error
));
223 // Ensure no crashes if no error message was requested.
224 EXPECT_TRUE(policy_
.UserMayLoad(NULL
, NULL
));
225 EXPECT_TRUE(policy_
.UserMayModifySettings(NULL
, NULL
));
226 EXPECT_FALSE(policy_
.MustRemainEnabled(NULL
, NULL
));
227 policy_
.RegisterProvider(&restrict_all_
);
228 EXPECT_FALSE(policy_
.UserMayLoad(NULL
, NULL
));
229 EXPECT_FALSE(policy_
.UserMayModifySettings(NULL
, NULL
));
230 EXPECT_TRUE(policy_
.MustRemainEnabled(NULL
, NULL
));
232 // Make sure returned error is correct.
233 error
= original_error16
;
234 EXPECT_FALSE(policy_
.UserMayLoad(NULL
, &error
));
235 EXPECT_EQ(base::UTF8ToUTF16(TestProvider::expected_error()), error
);
236 error
= original_error16
;
237 EXPECT_FALSE(policy_
.UserMayModifySettings(NULL
, &error
));
238 EXPECT_EQ(base::UTF8ToUTF16(TestProvider::expected_error()), error
);
239 error
= original_error16
;
240 EXPECT_TRUE(policy_
.MustRemainEnabled(NULL
, &error
));
241 EXPECT_EQ(base::UTF8ToUTF16(TestProvider::expected_error()), error
);