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.
7 #include "base/compiler_specific.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/prefs/pref_value_map.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h"
13 #include "chrome/browser/policy/configuration_policy_handler.h"
14 #include "chrome/browser/policy/policy_error_map.h"
15 #include "chrome/browser/policy/policy_map.h"
16 #include "chrome/browser/prefs/session_startup_pref.h"
17 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
18 #include "chrome/common/pref_names.h"
19 #include "grit/generated_resources.h"
20 #include "policy/policy_constants.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22 #include "ui/base/l10n/l10n_util.h"
26 class RestoreOnStartupPolicyHandlerTest : public testing::Test {
28 void SetPolicyValue(const std::string& policy, base::Value* value) {
30 policy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value, NULL);
32 bool CheckPolicySettings() {
33 return handler_.CheckPolicySettings(policies_, &errors_);
35 void ApplyPolicySettings() {
36 handler_.ApplyPolicySettings(policies_, &prefs_);
38 PolicyErrorMap& errors() { return errors_; }
39 PrefValueMap& prefs() { return prefs_; }
43 PolicyErrorMap errors_;
45 RestoreOnStartupPolicyHandler handler_;
48 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_FailsTypeCheck) {
49 // Handler expects an int; pass it a bool.
50 SetPolicyValue(key::kRestoreOnStartup, new base::FundamentalValue(false));
51 // Checking should fail and add an error to the error map.
52 EXPECT_FALSE(CheckPolicySettings());
53 EXPECT_EQ(1U, errors().size());
54 EXPECT_EQ(l10n_util::GetStringFUTF16(
55 IDS_POLICY_TYPE_ERROR,
56 ASCIIToUTF16(ConfigurationPolicyHandler::ValueTypeToString(
57 Value::TYPE_INTEGER))),
58 errors().begin()->second);
61 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_Unspecified) {
62 // Don't specify a value for the policy.
63 // Checking should succeed with no errors.
64 EXPECT_TRUE(CheckPolicySettings());
65 EXPECT_EQ(0U, errors().size());
68 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_UnknownValue) {
69 // Specify an unknown value for the policy.
70 int impossible_value = SessionStartupPref::kPrefValueHomePage +
71 SessionStartupPref::kPrefValueLast +
72 SessionStartupPref::kPrefValueURLs +
73 SessionStartupPref::kPrefValueNewTab;
74 SetPolicyValue(key::kRestoreOnStartup,
75 new base::FundamentalValue(impossible_value));
76 // Checking should succeed but add an error to the error map.
77 EXPECT_TRUE(CheckPolicySettings());
78 EXPECT_EQ(1U, errors().size());
79 EXPECT_EQ(l10n_util::GetStringFUTF16(
80 IDS_POLICY_OUT_OF_RANGE_ERROR,
81 ASCIIToUTF16(base::IntToString(impossible_value))),
82 errors().begin()->second);
85 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_HomePage) {
86 // Specify the HomePage value.
88 key::kRestoreOnStartup,
89 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
90 // Checking should succeed but add an error to the error map.
91 EXPECT_TRUE(CheckPolicySettings());
92 EXPECT_EQ(1U, errors().size());
93 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_POLICY_VALUE_DEPRECATED),
94 errors().begin()->second);
97 TEST_F(RestoreOnStartupPolicyHandlerTest,
98 CheckPolicySettings_RestoreLastSession_SessionCookies) {
99 // Specify the Last value and the Session-Only Cookies value.
101 key::kRestoreOnStartup,
102 new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
103 scoped_ptr<base::ListValue> urls(new base::ListValue);
104 urls->AppendString("http://foo.com");
105 SetPolicyValue(key::kCookiesSessionOnlyForUrls, urls.release());
106 // Checking should succeed but add an error to the error map.
107 EXPECT_TRUE(CheckPolicySettings());
108 EXPECT_EQ(1U, errors().size());
109 EXPECT_TRUE(key::kCookiesSessionOnlyForUrls == errors().begin()->first);
110 EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_POLICY_OVERRIDDEN,
111 ASCIIToUTF16(key::kRestoreOnStartup)),
112 errors().begin()->second);
115 TEST_F(RestoreOnStartupPolicyHandlerTest,
116 CheckPolicySettings_RestoreLastSession_ClearDataOnExit) {
117 // Specify the Last value and the Clear-Data-On-Exit value.
119 key::kRestoreOnStartup,
120 new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
121 SetPolicyValue(key::kClearSiteDataOnExit, new base::FundamentalValue(true));
122 // Checking should succeed but add an error to the error map.
123 EXPECT_TRUE(CheckPolicySettings());
124 EXPECT_EQ(1U, errors().size());
125 EXPECT_TRUE(key::kClearSiteDataOnExit == errors().begin()->first);
126 EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_POLICY_OVERRIDDEN,
127 ASCIIToUTF16(key::kRestoreOnStartup)),
128 errors().begin()->second);
131 TEST_F(RestoreOnStartupPolicyHandlerTest,
132 CheckPolicySettings_RestoreLastSession) {
133 // Specify the Last value without the conflicts.
135 key::kRestoreOnStartup,
136 new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
137 // Checking should succeed with no errors.
138 EXPECT_TRUE(CheckPolicySettings());
139 EXPECT_EQ(0U, errors().size());
142 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_URLs) {
143 // Specify the URLs value.
145 key::kRestoreOnStartup,
146 new base::FundamentalValue(SessionStartupPref::kPrefValueURLs));
147 // Checking should succeed with no errors.
148 EXPECT_TRUE(CheckPolicySettings());
149 EXPECT_EQ(0U, errors().size());
152 TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_NewTab) {
153 // Specify the NewTab value.
155 key::kRestoreOnStartup,
156 new base::FundamentalValue(SessionStartupPref::kPrefValueNewTab));
157 // Checking should succeed with no errors.
158 EXPECT_TRUE(CheckPolicySettings());
159 EXPECT_EQ(0U, errors().size());
162 TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_NoValue) {
163 // Don't specify a value for the policy.
164 ApplyPolicySettings();
165 // The resulting prefs should be empty.
166 EXPECT_TRUE(prefs().begin() == prefs().end());
169 TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_WrongType) {
170 // Handler expects an int; pass it a bool.
171 SetPolicyValue(key::kRestoreOnStartup, new base::FundamentalValue(false));
172 // The resulting prefs should be empty.
173 EXPECT_TRUE(prefs().begin() == prefs().end());
176 TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_NotHomePage) {
177 // Specify anything except the HomePage value.
178 int not_home_page = SessionStartupPref::kPrefValueHomePage + 1;
179 SetPolicyValue(key::kRestoreOnStartup,
180 new base::FundamentalValue(not_home_page));
181 ApplyPolicySettings();
182 // The resulting prefs should have the value we specified.
184 EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
185 EXPECT_EQ(not_home_page, result);
188 TEST_F(RestoreOnStartupPolicyHandlerTest,
189 ApplyPolicySettings_HomePage_NoHomePageValue) {
190 // Specify the HomePage value but no HomePageIsNewTabPage value.
192 key::kRestoreOnStartup,
193 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
194 ApplyPolicySettings();
195 // The resulting prefs should be empty.
196 EXPECT_TRUE(prefs().begin() == prefs().end());
199 TEST_F(RestoreOnStartupPolicyHandlerTest,
200 ApplyPolicySettings_HomePage_HomePageValueIsWrongType) {
201 // Specify the HomePage value and an integer for the home page value.
203 key::kRestoreOnStartup,
204 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
206 key::kHomepageIsNewTabPage,
207 new base::FundamentalValue(314159));
208 ApplyPolicySettings();
209 // The resulting prefs should be empty.
210 EXPECT_TRUE(prefs().begin() == prefs().end());
213 TEST_F(RestoreOnStartupPolicyHandlerTest,
214 ApplyPolicySettings_HomePage_HomePageIsNewTabPage) {
215 // Specify the HomePage value and the home page as the new tab page.
217 key::kRestoreOnStartup,
218 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
220 key::kHomepageIsNewTabPage,
221 new base::FundamentalValue(true));
222 ApplyPolicySettings();
223 // The resulting prefs should have the restore value as NTP.
225 EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
226 int expected = SessionStartupPref::kPrefValueNewTab;
227 EXPECT_EQ(expected, result);
230 TEST_F(RestoreOnStartupPolicyHandlerTest,
231 ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage_NotDefined) {
232 // Specify the HomePage value but don't specify the home page to use.
234 key::kRestoreOnStartup,
235 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
237 key::kHomepageIsNewTabPage,
238 new base::FundamentalValue(false));
239 ApplyPolicySettings();
240 // The resulting prefs should be empty.
241 EXPECT_TRUE(prefs().begin() == prefs().end());
244 TEST_F(RestoreOnStartupPolicyHandlerTest,
245 ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage_WrongType) {
246 // Specify the HomePage value but specify a boolean as the home page.
248 key::kRestoreOnStartup,
249 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
251 key::kHomepageIsNewTabPage,
252 new base::FundamentalValue(false));
254 key::kHomepageLocation,
255 new base::FundamentalValue(false));
256 ApplyPolicySettings();
257 // The resulting prefs should be empty.
258 EXPECT_TRUE(prefs().begin() == prefs().end());
261 TEST_F(RestoreOnStartupPolicyHandlerTest,
262 ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage) {
264 key::kRestoreOnStartup,
265 new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
266 SetPolicyValue(key::kHomepageIsNewTabPage, new base::FundamentalValue(false));
267 SetPolicyValue(key::kHomepageLocation,
268 new base::StringValue("http://foo.com"));
269 ApplyPolicySettings();
271 // The resulting prefs should have have URLs specified for startup.
273 EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
274 int expected = SessionStartupPref::kPrefValueURLs;
275 EXPECT_EQ(expected, result);
277 // The resulting prefs should have the URL we specified as the home page.
278 base::Value* url_result;
279 EXPECT_TRUE(prefs().GetValue(prefs::kURLsToRestoreOnStartup, &url_result));
280 base::ListValue* url_list_result;
281 EXPECT_TRUE(url_result->GetAsList(&url_list_result));
282 EXPECT_EQ(1U, url_list_result->GetSize());
283 std::string expected_url;
284 EXPECT_TRUE(url_list_result->GetString(0, &expected_url));
285 EXPECT_EQ(std::string("http://foo.com"), expected_url);
288 } // namespace policy