172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <gtest/gtest.h>
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <windows.h>
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/message_loop.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/stl_util-inl.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string_number_conversions.h"
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string_piece.h"
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/utf_string_conversions.h"
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/win/registry.h"
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_loader.h"
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/policy/configuration_policy_pref_store.h"
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/policy/configuration_policy_provider_win.h"
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/policy/mock_configuration_policy_store.h"
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/pref_names.h"
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "policy/policy_constants.h"
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickusing base::win::RegKey;
25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace policy {
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst wchar_t kUnitTestRegistrySubKey[] = L"SOFTWARE\\Chromium Unit Tests";
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst wchar_t kUnitTestMachineOverrideSubKey[] =
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    L"SOFTWARE\\Chromium Unit Tests\\HKLM Override";
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst wchar_t kUnitTestUserOverrideSubKey[] =
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    L"SOFTWARE\\Chromium Unit Tests\\HKCU Override";
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
34513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace {
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Holds policy type, corresponding policy name string and a valid value for use
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// in parametrized value tests.
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass PolicyTestParams {
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Assumes ownership of |hklm_value| and |hkcu_value|.
41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  PolicyTestParams(ConfigurationPolicyType type,
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                   const char* policy_name,
43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                   Value* hklm_value,
44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                   Value* hkcu_value)
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      : type_(type),
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        policy_name_(policy_name),
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        hklm_value_(hklm_value),
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        hkcu_value_(hkcu_value) {}
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // testing::TestWithParam does copy the parameters, so provide copy
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // constructor and assignment operator.
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  PolicyTestParams(const PolicyTestParams& other)
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      : type_(other.type_),
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        policy_name_(other.policy_name_),
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        hklm_value_(other.hklm_value_->DeepCopy()),
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        hkcu_value_(other.hkcu_value_->DeepCopy()) {}
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const PolicyTestParams& operator=(PolicyTestParams other) {
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    swap(other);
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return *this;
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void swap(PolicyTestParams& other) {
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    std::swap(type_, other.type_);
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    std::swap(policy_name_, other.policy_name_);
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hklm_value_.swap(other.hklm_value_);
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hkcu_value_.swap(other.hkcu_value_);
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ConfigurationPolicyType type() const { return type_; }
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const char* policy_name() const { return policy_name_; }
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const Value* hklm_value() const { return hklm_value_.get(); }
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const Value* hkcu_value() const { return hkcu_value_.get(); }
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Factory methods for different value types.
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static PolicyTestParams ForStringPolicy(
77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ConfigurationPolicyType type,
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const char* policy_name) {
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return PolicyTestParams(type,
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            policy_name,
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateStringValue("string_a"),
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateStringValue("string_b"));
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static PolicyTestParams ForBooleanPolicy(
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ConfigurationPolicyType type,
86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const char* policy_name) {
87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return PolicyTestParams(type,
88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            policy_name,
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateBooleanValue(true),
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateBooleanValue(false));
91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static PolicyTestParams ForIntegerPolicy(
93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ConfigurationPolicyType type,
94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const char* policy_name) {
95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return PolicyTestParams(type,
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            policy_name,
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateIntegerValue(42),
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                            Value::CreateIntegerValue(17));
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static PolicyTestParams ForListPolicy(
101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ConfigurationPolicyType type,
102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const char* policy_name) {
103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ListValue* hklm_value = new ListValue;
104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hklm_value->Set(0U, Value::CreateStringValue("It's a plane!"));
105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ListValue* hkcu_value = new ListValue;
106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hkcu_value->Set(0U, Value::CreateStringValue("It's a bird!"));
107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    hkcu_value->Set(0U, Value::CreateStringValue("It's a flying carpet!"));
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return PolicyTestParams(type, policy_name, hklm_value, hkcu_value);
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ConfigurationPolicyType type_;
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const char* policy_name_;
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<Value> hklm_value_;
115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<Value> hkcu_value_;
116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}  // namespace
119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This test class provides sandboxing and mocking for the parts of the
121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Windows Registry implementing Group Policy. The |SetUp| method prepares
122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// two temporary sandbox keys in |kUnitTestRegistrySubKey|, one for HKLM and one
123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// for HKCU. A test's calls to the registry are redirected by Windows to these
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// sandboxes, allowing the tests to manipulate and access policy as if it
125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// were active, but without actually changing the parts of the Registry that
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// are managed by Group Policy.
127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ConfigurationPolicyProviderWinTest
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public testing::TestWithParam<PolicyTestParams> {
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ConfigurationPolicyProviderWinTest();
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // testing::Test method overrides:
133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void SetUp();
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void TearDown();
135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void ActivateOverrides();
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void DeactivateOverrides();
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Deletes the registry key created during the tests.
140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void DeleteRegistrySandbox();
141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Write a string value to the registry.
143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void WriteString(HKEY hive, const char* name, const wchar_t* value);
144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Write a DWORD value to the registry.
145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void WriteDWORD(HKEY hive, const char* name, DWORD value);
146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Write the given value to the registry.
148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void WriteValue(HKEY hive, const char* name, const Value* value);
149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Write a value that is not compatible with the given |value|.
150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void WriteInvalidValue(HKEY hive, const char* name, const Value* value);
151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected:
153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<MockConfigurationPolicyStore> store_;
154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<ConfigurationPolicyProviderWin> provider_;
155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // A message loop must be declared and instantiated for these tests,
157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // because Windows policy provider create WaitableEvents and
158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // ObjectWatchers that require the tests to have a MessageLoop associated
159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // with the thread executing the tests.
160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  MessageLoop loop_;
161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
16221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private:
16321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  BrowserThread ui_thread_;
16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  BrowserThread file_thread_;
16521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Keys are created for the lifetime of a test to contain
167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // the sandboxed HKCU and HKLM hives, respectively.
168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  RegKey temp_hkcu_hive_key_;
169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  RegKey temp_hklm_hive_key_;
170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenConfigurationPolicyProviderWinTest::ConfigurationPolicyProviderWinTest()
17321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : ui_thread_(BrowserThread::UI, &loop_),
17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      file_thread_(BrowserThread::FILE, &loop_),
17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      temp_hklm_hive_key_(HKEY_CURRENT_USER, kUnitTestMachineOverrideSubKey,
176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                          KEY_READ),
177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      temp_hkcu_hive_key_(HKEY_CURRENT_USER, kUnitTestUserOverrideSubKey,
178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                          KEY_READ) {
179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::SetUp() {
182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Cleanup any remnants of previous tests.
183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DeleteRegistrySandbox();
184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Create the subkeys to hold the overridden HKLM and HKCU
186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // policy settings.
187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  temp_hklm_hive_key_.Create(HKEY_CURRENT_USER,
188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             kUnitTestMachineOverrideSubKey,
189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             KEY_ALL_ACCESS);
190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  temp_hkcu_hive_key_.Create(HKEY_CURRENT_USER,
191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             kUnitTestUserOverrideSubKey,
192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                             KEY_ALL_ACCESS);
193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ActivateOverrides();
195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  store_.reset(new MockConfigurationPolicyStore);
197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  provider_.reset(new ConfigurationPolicyProviderWin(
198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList()));
199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::TearDown() {
202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DeactivateOverrides();
203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DeleteRegistrySandbox();
20421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::ActivateOverrides() {
208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  HRESULT result = RegOverridePredefKey(HKEY_LOCAL_MACHINE,
209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                        temp_hklm_hive_key_.Handle());
210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, result);
211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  result = RegOverridePredefKey(HKEY_CURRENT_USER,
212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                temp_hkcu_hive_key_.Handle());
213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, result);
214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::DeactivateOverrides() {
217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  uint32 result = RegOverridePredefKey(HKEY_LOCAL_MACHINE, 0);
218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, result);
219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  result = RegOverridePredefKey(HKEY_CURRENT_USER, 0);
220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, result);
221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::DeleteRegistrySandbox() {
224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  temp_hklm_hive_key_.Close();
225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  temp_hkcu_hive_key_.Close();
226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  RegKey key(HKEY_CURRENT_USER, kUnitTestRegistrySubKey, KEY_ALL_ACCESS);
227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  key.DeleteKey(L"");
228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::WriteString(HKEY hive,
231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                     const char* name,
232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                     const wchar_t* value) {
233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  RegKey key(hive, policy::kRegistrySubKey, KEY_ALL_ACCESS);
234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  key.WriteValue(UTF8ToUTF16(name).c_str(), value);
235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::WriteDWORD(HKEY hive,
238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    const char* name,
239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    DWORD value) {
240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  RegKey key(hive, policy::kRegistrySubKey, KEY_ALL_ACCESS);
241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  key.WriteValue(UTF8ToUTF16(name).c_str(), value);
242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::WriteValue(HKEY hive,
245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    const char* name,
246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                    const Value* value) {
247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  switch (value->GetType()) {
248bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    case Value::TYPE_BOOLEAN: {
249bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      bool v;
250bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      ASSERT_TRUE(value->GetAsBoolean(&v));
251bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      WriteDWORD(hive, name, v);
252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      break;
253bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    case Value::TYPE_INTEGER: {
255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      int v;
256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      ASSERT_TRUE(value->GetAsInteger(&v));
257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      WriteDWORD(hive, name, v);
258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      break;
259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    case Value::TYPE_STRING: {
261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      std::string v;
262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      ASSERT_TRUE(value->GetAsString(&v));
263bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      WriteString(hive, name, UTF8ToUTF16(v).c_str());
264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      break;
265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
266bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    case Value::TYPE_LIST: {
267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const ListValue* list = static_cast<const ListValue*>(value);
268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      RegKey key(hive,
269bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                 (string16(policy::kRegistrySubKey) + ASCIIToUTF16("\\") +
270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                  UTF8ToUTF16(name)).c_str(),
271bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                 KEY_ALL_ACCESS);
272bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      int index = 1;
273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      for (ListValue::const_iterator element(list->begin());
274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen           element != list->end(); ++element) {
275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        ASSERT_TRUE((*element)->IsType(Value::TYPE_STRING));
276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        std::string element_value;
277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        ASSERT_TRUE((*element)->GetAsString(&element_value));
278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        key.WriteValue(base::IntToString16(index++).c_str(),
279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       UTF8ToUTF16(element_value).c_str());
280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      }
281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      break;
282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    default:
284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      FAIL() << "Unsupported value type " << value->GetType();
285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      break;
286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid ConfigurationPolicyProviderWinTest::WriteInvalidValue(HKEY hive,
290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                           const char* name,
291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                                           const Value* value) {
292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (value->IsType(Value::TYPE_STRING))
293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    WriteDWORD(hive, name, -1);
294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  else
295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    WriteString(hive, name, L"bad value");
296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_P(ConfigurationPolicyProviderWinTest, Default) {
299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  provider_->Provide(store_.get());
300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_TRUE(store_->policy_map().empty());
301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_P(ConfigurationPolicyProviderWinTest, InvalidValue) {
304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteInvalidValue(HKEY_LOCAL_MACHINE,
305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                    GetParam().policy_name(),
306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                    GetParam().hklm_value());
307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteInvalidValue(HKEY_CURRENT_USER,
308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                    GetParam().policy_name(),
309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                    GetParam().hkcu_value());
31021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider_->loader()->Reload();
31121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  provider_->Provide(store_.get());
313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_TRUE(store_->policy_map().empty());
314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_P(ConfigurationPolicyProviderWinTest, HKLM) {
317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteValue(HKEY_LOCAL_MACHINE,
318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().policy_name(),
319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().hklm_value());
32021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider_->loader()->Reload();
32121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  provider_->Provide(store_.get());
323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const Value* value = store_->Get(GetParam().type());
324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(value);
325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_TRUE(value->Equals(GetParam().hklm_value()));
326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_P(ConfigurationPolicyProviderWinTest, HKCU) {
329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteValue(HKEY_CURRENT_USER,
330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().policy_name(),
331bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().hkcu_value());
33221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider_->loader()->Reload();
33321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
334bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  provider_->Provide(store_.get());
335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const Value* value = store_->Get(GetParam().type());
336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(value);
337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_TRUE(value->Equals(GetParam().hkcu_value()));
338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
340bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_P(ConfigurationPolicyProviderWinTest, HKLMOverHKCU) {
341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteValue(HKEY_LOCAL_MACHINE,
342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().policy_name(),
343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().hklm_value());
344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WriteValue(HKEY_CURRENT_USER,
345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().policy_name(),
346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen             GetParam().hkcu_value());
34721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider_->loader()->Reload();
34821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  provider_->Provide(store_.get());
350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  const Value* value = store_->Get(GetParam().type());
351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ASSERT_TRUE(value);
352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  EXPECT_TRUE(value->Equals(GetParam().hklm_value()));
353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
355bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Instantiate the test case for all supported policies.
356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenINSTANTIATE_TEST_CASE_P(
357bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ConfigurationPolicyProviderWinTestInstance,
358bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    ConfigurationPolicyProviderWinTest,
359bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    testing::Values(
360bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
36172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyHomepageLocation,
362bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kHomepageLocation),
363bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
364513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyHomepageIsNewTabPage,
365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kHomepageIsNewTabPage),
366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForIntegerPolicy(
367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyRestoreOnStartup,
368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kRestoreOnStartup),
369bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForListPolicy(
37072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyRestoreOnStartupURLs,
37172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kRestoreOnStartupURLs),
372731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        PolicyTestParams::ForBooleanPolicy(
373513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderEnabled,
374731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            key::kDefaultSearchProviderEnabled),
375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderName,
377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderName),
378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
379513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderKeyword,
380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderKeyword),
381bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
382513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderSearchURL,
383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderSearchURL),
384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderSuggestURL,
386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderSuggestURL),
387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
38872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyDefaultSearchProviderInstantURL,
38972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kDefaultSearchProviderInstantURL),
39072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForStringPolicy(
391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderIconURL,
392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderIconURL),
393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
394513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDefaultSearchProviderEncodings,
395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDefaultSearchProviderEncodings),
39672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForStringPolicy(
39721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            kPolicyProxyMode,
39821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            key::kProxyMode),
39972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForIntegerPolicy(
40072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyProxyServerMode,
40172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kProxyServerMode),
402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
403513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyProxyServer,
404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kProxyServer),
405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
406513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyProxyPacUrl,
407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kProxyPacUrl),
408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
409513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyProxyBypassList,
410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kProxyBypassList),
411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
412513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyAlternateErrorPagesEnabled,
413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kAlternateErrorPagesEnabled),
414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
415513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicySearchSuggestEnabled,
416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kSearchSuggestEnabled),
417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
418513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDnsPrefetchingEnabled,
419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDnsPrefetchingEnabled),
420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
421513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicySafeBrowsingEnabled,
422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kSafeBrowsingEnabled),
423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
424513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyMetricsReportingEnabled,
425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kMetricsReportingEnabled),
426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
427513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyPasswordManagerEnabled,
428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kPasswordManagerEnabled),
429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForListPolicy(
430513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyDisabledPlugins,
431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kDisabledPlugins),
432dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        PolicyTestParams::ForListPolicy(
433dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            kPolicyDisabledPluginsExceptions,
434dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            key::kDisabledPluginsExceptions),
435dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        PolicyTestParams::ForListPolicy(
436dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            kPolicyEnabledPlugins,
437dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen            key::kEnabledPlugins),
438bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
439513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyAutoFillEnabled,
440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kAutoFillEnabled),
441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
442513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicySyncDisabled,
443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kSyncDisabled),
444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForStringPolicy(
44572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyApplicationLocaleValue,
446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kApplicationLocaleValue),
447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForListPolicy(
44872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyExtensionInstallWhitelist,
44972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kExtensionInstallWhitelist),
450bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForListPolicy(
45172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyExtensionInstallBlacklist,
45272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kExtensionInstallBlacklist),
453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
454513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyShowHomeButton,
455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen            key::kShowHomeButton),
456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
457513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch            kPolicyPrintingEnabled,
45872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kPrintingEnabled),
45972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForIntegerPolicy(
46072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyPolicyRefreshRate,
46172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kPolicyRefreshRate),
46272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
46372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyInstantEnabled,
46472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kInstantEnabled),
46572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
46672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyIncognitoEnabled,
46772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            key::kIncognitoEnabled),
46872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyDisablePluginFinder,
470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kDisablePluginFinder),
471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyClearSiteDataOnExit,
473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kClearSiteDataOnExit),
474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForStringPolicy(
475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyDownloadDirectory,
476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kDownloadDirectory),
477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyDefaultBrowserSettingEnabled,
479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kDefaultBrowserSettingEnabled),
480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
48172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            kPolicyCloudPrintProxyEnabled,
482ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kCloudPrintProxyEnabled),
483ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
484ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyTranslateEnabled,
485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kTranslateEnabled),
486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyAllowOutdatedPlugins,
488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kAllowOutdatedPlugins),
489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyBookmarkBarEnabled,
491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kBookmarkBarEnabled),
492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyEditBookmarksEnabled,
494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kEditBookmarksEnabled),
495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForBooleanPolicy(
496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyAllowFileSelectionDialogs,
497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kAllowFileSelectionDialogs),
498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        PolicyTestParams::ForListPolicy(
499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            kPolicyDisabledSchemes,
500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            key::kDisabledSchemes)));
501bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}  // namespace policy
503