11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file.
41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <string>
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/compiler_specific.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/pref_value_map.h"
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string_number_conversions.h"
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/values.h"
131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/prefs/session_startup_pref.h"
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/common/pref_names.h"
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/configuration_policy_handler.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/components_strings.h"
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "policy/policy_constants.h"
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace policy {
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class RestoreOnStartupPolicyHandlerTest : public testing::Test {
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected:
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void SetPolicyValue(const std::string& policy, base::Value* value) {
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    policies_.Set(
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        policy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value, NULL);
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  bool CheckPolicySettings() {
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return handler_.CheckPolicySettings(policies_, &errors_);
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void ApplyPolicySettings() {
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    handler_.ApplyPolicySettings(policies_, &prefs_);
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PolicyErrorMap& errors() { return errors_; }
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PrefValueMap& prefs() { return prefs_; }
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private:
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PolicyMap policies_;
431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PolicyErrorMap errors_;
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  PrefValueMap prefs_;
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  RestoreOnStartupPolicyHandler handler_;
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_FailsTypeCheck) {
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Handler expects an int; pass it a bool.
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kRestoreOnStartup, new base::FundamentalValue(false));
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should fail and add an error to the error map.
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(CheckPolicySettings());
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, errors().size());
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF16(
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                IDS_POLICY_TYPE_ERROR,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::ASCIIToUTF16(
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    ConfigurationPolicyHandler::ValueTypeToString(
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        base::Value::TYPE_INTEGER))),
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            errors().begin()->second);
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_Unspecified) {
631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Don't specify a value for the policy.
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed with no errors.
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(0U, errors().size());
671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_UnknownValue) {
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify an unknown value for the policy.
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int impossible_value = SessionStartupPref::kPrefValueHomePage +
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                         SessionStartupPref::kPrefValueLast +
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                         SessionStartupPref::kPrefValueURLs +
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                         SessionStartupPref::kPrefValueNewTab;
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kRestoreOnStartup,
761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                 new base::FundamentalValue(impossible_value));
771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed but add an error to the error map.
781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, errors().size());
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF16(
811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                IDS_POLICY_OUT_OF_RANGE_ERROR,
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::ASCIIToUTF16(base::IntToString(impossible_value))),
831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            errors().begin()->second);
841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_HomePage) {
871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value.
881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed but add an error to the error map.
921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, errors().size());
941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_POLICY_VALUE_DEPRECATED),
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            errors().begin()->second);
961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       CheckPolicySettings_RestoreLastSession_SessionCookies) {
1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the Last value and the Session-Only Cookies value.
1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  scoped_ptr<base::ListValue> urls(new base::ListValue);
1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  urls->AppendString("http://foo.com");
1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kCookiesSessionOnlyForUrls, urls.release());
1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed but add an error to the error map.
1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, errors().size());
1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(key::kCookiesSessionOnlyForUrls == errors().begin()->first);
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF16(
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                IDS_POLICY_OVERRIDDEN,
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::ASCIIToUTF16(key::kRestoreOnStartup)),
1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            errors().begin()->second);
1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       CheckPolicySettings_RestoreLastSession_ClearDataOnExit) {
1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the Last value and the Clear-Data-On-Exit value.
1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kClearSiteDataOnExit, new base::FundamentalValue(true));
1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed but add an error to the error map.
1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, errors().size());
1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(key::kClearSiteDataOnExit == errors().begin()->first);
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF16(
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                IDS_POLICY_OVERRIDDEN,
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::ASCIIToUTF16(key::kRestoreOnStartup)),
1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            errors().begin()->second);
1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       CheckPolicySettings_RestoreLastSession) {
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the Last value without the conflicts.
1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueLast));
1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed with no errors.
1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
1421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(0U, errors().size());
1431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_URLs) {
1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the URLs value.
1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueURLs));
1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed with no errors.
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(0U, errors().size());
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, CheckPolicySettings_NewTab) {
1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the NewTab value.
1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueNewTab));
1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Checking should succeed with no errors.
1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(CheckPolicySettings());
1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(0U, errors().size());
1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_NoValue) {
1661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Don't specify a value for the policy.
1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
1691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_WrongType) {
1731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Handler expects an int; pass it a bool.
1741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kRestoreOnStartup, new base::FundamentalValue(false));
1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest, ApplyPolicySettings_NotHomePage) {
1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify anything except the HomePage value.
1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int not_home_page = SessionStartupPref::kPrefValueHomePage + 1;
1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kRestoreOnStartup,
1831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                 new base::FundamentalValue(not_home_page));
1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should have the value we specified.
1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int result;
1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(not_home_page, result);
1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_NoHomePageValue) {
1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value but no HomePageIsNewTabPage value.
1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
1981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
1991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
2001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_HomePageValueIsWrongType) {
2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value and an integer for the home page value.
2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kHomepageIsNewTabPage,
2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(314159));
2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
2121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_HomePageIsNewTabPage) {
2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value and the home page as the new tab page.
2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
2221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kHomepageIsNewTabPage,
2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(true));
2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should have the restore value as NTP.
2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int result;
2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int expected = SessionStartupPref::kPrefValueNewTab;
2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(expected, result);
2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage_NotDefined) {
2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value but don't specify the home page to use.
2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kHomepageIsNewTabPage,
2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(false));
2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage_WrongType) {
2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Specify the HomePage value but specify a boolean as the home page.
2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kHomepageIsNewTabPage,
2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(false));
2561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kHomepageLocation,
2581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(false));
2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
2601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should be empty.
2611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().begin() == prefs().end());
2621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RestoreOnStartupPolicyHandlerTest,
2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       ApplyPolicySettings_HomePage_HomePageIsNotNewTabPage) {
2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(
2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      key::kRestoreOnStartup,
2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      new base::FundamentalValue(SessionStartupPref::kPrefValueHomePage));
2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kHomepageIsNewTabPage, new base::FundamentalValue(false));
2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SetPolicyValue(key::kHomepageLocation,
2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                 new base::StringValue("http://foo.com"));
2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ApplyPolicySettings();
2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should have have URLs specified for startup.
2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int result;
2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().GetInteger(prefs::kRestoreOnStartup, &result));
2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int expected = SessionStartupPref::kPrefValueURLs;
2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(expected, result);
2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The resulting prefs should have the URL we specified as the home page.
2811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::Value* url_result;
2821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(prefs().GetValue(prefs::kURLsToRestoreOnStartup, &url_result));
2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::ListValue* url_list_result;
2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(url_result->GetAsList(&url_list_result));
2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(1U, url_list_result->GetSize());
2861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::string expected_url;
2871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(url_list_result->GetString(0, &expected_url));
2881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(std::string("http://foo.com"), expected_url);
2891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace policy
292