1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/configuration_policy_provider_test.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/configuration_policy_provider.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_bundle.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_namespace.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Mock;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kTestChromeSchema[] =
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "{"
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "  \"type\": \"object\","
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "  \"properties\": {"
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    \"StringPolicy\": { \"type\": \"string\" },"
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    \"BooleanPolicy\": { \"type\": \"boolean\" },"
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    \"IntegerPolicy\": { \"type\": \"integer\" },"
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    \"StringListPolicy\": {"
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "      \"type\": \"array\","
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "      \"items\": { \"type\": \"string\" }"
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    },"
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    \"DictionaryPolicy\": {"
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "      \"type\": \"object\","
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "      \"properties\": {"
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"bool\": { \"type\": \"boolean\" },"
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"double\": { \"type\": \"number\" },"
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"int\": { \"type\": \"integer\" },"
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"string\": { \"type\": \"string\" },"
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"array\": {"
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"type\": \"array\","
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"items\": { \"type\": \"string\" }"
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        },"
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"dictionary\": {"
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"type\": \"object\","
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"properties\": {"
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"sub\": { \"type\": \"string\" },"
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"sublist\": {"
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"type\": \"array\","
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"items\": {"
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"type\": \"object\","
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"properties\": {"
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"aaa\": { \"type\": \"integer\" },"
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"bbb\": { \"type\": \"integer\" },"
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"ccc\": { \"type\": \"string\" },"
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"ddd\": { \"type\": \"string\" }"
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                }"
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              }"
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            }"
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          }"
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        },"
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"list\": {"
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"type\": \"array\","
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"items\": {"
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"type\": \"object\","
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"properties\": {"
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"subdictindex\": { \"type\": \"integer\" },"
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"subdict\": {"
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"type\": \"object\","
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"properties\": {"
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"bool\": { \"type\": \"boolean\" },"
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"double\": { \"type\": \"number\" },"
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"int\": { \"type\": \"integer\" },"
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"string\": { \"type\": \"string\" }"
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                }"
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              }"
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            }"
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          }"
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        },"
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        \"dict\": {"
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"type\": \"object\","
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          \"properties\": {"
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"bool\": { \"type\": \"boolean\" },"
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"double\": { \"type\": \"number\" },"
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"int\": { \"type\": \"integer\" },"
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"string\": { \"type\": \"string\" },"
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            \"list\": {"
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"type\": \"array\","
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              \"items\": {"
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"type\": \"object\","
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                \"properties\": {"
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"subdictindex\": { \"type\": \"integer\" },"
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  \"subdict\": {"
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                    \"type\": \"object\","
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                    \"properties\": {"
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                      \"bool\": { \"type\": \"boolean\" },"
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                      \"double\": { \"type\": \"number\" },"
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                      \"int\": { \"type\": \"integer\" },"
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                      \"string\": { \"type\": \"string\" }"
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                    }"
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                  }"
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "                }"
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "              }"
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "            }"
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "          }"
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "        }"
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "      }"
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "    }"
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "  }"
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    "}";
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace test_keys {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyString[] = "StringPolicy";
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyBoolean[] = "BooleanPolicy";
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyInteger[] = "IntegerPolicy";
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyStringList[] = "StringListPolicy";
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyDictionary[] = "DictionaryPolicy";
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace test_keys
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)PolicyTestBase::PolicyTestBase() {}
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyTestBase::~PolicyTestBase() {}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PolicyTestBase::SetUp() {
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const PolicyNamespace ns(POLICY_DOMAIN_CHROME, "");
130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(RegisterSchema(ns, kTestChromeSchema));
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PolicyTestBase::TearDown() {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool PolicyTestBase::RegisterSchema(const PolicyNamespace& ns,
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    const std::string& schema_string) {
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string error;
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Schema schema = Schema::Parse(schema_string, &error);
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (schema.valid()) {
142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    schema_registry_.RegisterComponent(ns, schema);
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return true;
144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ADD_FAILURE() << error;
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return false;
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyProviderTestHarness::PolicyProviderTestHarness(PolicyLevel level,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     PolicyScope scope)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : level_(level), scope_(scope) {}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyProviderTestHarness::~PolicyProviderTestHarness() {}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyLevel PolicyProviderTestHarness::policy_level() const {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return level_;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyScope PolicyProviderTestHarness::policy_scope() const {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return scope_;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PolicyProviderTestHarness::Install3rdPartyPolicy(
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::DictionaryValue* policies) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FAIL();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfigurationPolicyProviderTest::ConfigurationPolicyProviderTest() {}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfigurationPolicyProviderTest::~ConfigurationPolicyProviderTest() {}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::SetUp() {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyTestBase::SetUp();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_harness_.reset((*GetParam())());
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_harness_->SetUp();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Schema chrome_schema = *schema_registry_.schema_map()->GetSchema(chrome_ns);
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Schema extension_schema =
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome_schema.GetKnownProperty(test_keys::kKeyDictionary);
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(extension_schema.valid());
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  schema_registry_.RegisterComponent(
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_schema);
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  schema_registry_.RegisterComponent(
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"),
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_schema);
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  schema_registry_.RegisterComponent(
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      "cccccccccccccccccccccccccccccccc"),
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      extension_schema);
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_.reset(test_harness_->CreateProvider(&schema_registry_,
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                loop_.message_loop_proxy()));
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_->Init(&schema_registry_);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Some providers do a reload on init. Make sure any notifications generated
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // are fired now.
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PolicyBundle kEmptyBundle;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle));
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::TearDown() {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Give providers the chance to clean up after themselves on the file thread.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->Shutdown();
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_.reset();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyTestBase::TearDown();
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::CheckValue(
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* policy_name,
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Value& expected_value,
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Closure install_value) {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Install the value, reload policy and check the provider for the value.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  install_value.Run();
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RefreshPolicies();
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyBundle expected_bundle;
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Set(policy_name,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           test_harness_->policy_level(),
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           test_harness_->policy_scope(),
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch           expected_value.DeepCopy(),
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch           NULL);
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(expected_bundle));
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(joaodasilva): set the policy in the POLICY_DOMAIN_EXTENSIONS too,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and extend the |expected_bundle|, once all providers are ready.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, Empty) {
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RefreshPolicies();
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PolicyBundle kEmptyBundle;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle));
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, StringValue) {
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kTestString[] = "string_value";
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringValue expected_value(kTestString);
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CheckValue(test_keys::kKeyString,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             expected_value,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             base::Bind(&PolicyProviderTestHarness::InstallStringPolicy,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        base::Unretained(test_harness_.get()),
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        test_keys::kKeyString,
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        kTestString));
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, BooleanValue) {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue expected_value(true);
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CheckValue(test_keys::kKeyBoolean,
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             expected_value,
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             base::Bind(&PolicyProviderTestHarness::InstallBooleanPolicy,
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        base::Unretained(test_harness_.get()),
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        test_keys::kKeyBoolean,
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        true));
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, IntegerValue) {
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue expected_value(42);
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CheckValue(test_keys::kKeyInteger,
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             expected_value,
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             base::Bind(&PolicyProviderTestHarness::InstallIntegerPolicy,
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        base::Unretained(test_harness_.get()),
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        test_keys::kKeyInteger,
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        42));
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, StringListValue) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue expected_value;
2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  expected_value.Set(0U, new base::StringValue("first"));
2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  expected_value.Set(1U, new base::StringValue("second"));
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CheckValue(test_keys::kKeyStringList,
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             expected_value,
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             base::Bind(&PolicyProviderTestHarness::InstallStringListPolicy,
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        base::Unretained(test_harness_.get()),
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        test_keys::kKeyStringList,
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        &expected_value));
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, DictionaryValue) {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::DictionaryValue expected_value;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_value.SetBoolean("bool", true);
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected_value.SetDouble("double", 123.456);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_value.SetInteger("int", 123);
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected_value.SetString("string", "omg");
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue* list = new base::ListValue();
2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  list->Set(0U, new base::StringValue("first"));
2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  list->Set(1U, new base::StringValue("second"));
295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected_value.Set("array", list);
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::DictionaryValue* dict = new base::DictionaryValue();
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->SetString("sub", "value");
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list = new base::ListValue();
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::DictionaryValue* sub = new base::DictionaryValue();
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sub->SetInteger("aaa", 111);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sub->SetInteger("bbb", 222);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list->Append(sub);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sub = new base::DictionaryValue();
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sub->SetString("ccc", "333");
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sub->SetString("ddd", "444");
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list->Append(sub);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict->Set("sublist", list);
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected_value.Set("dictionary", dict);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CheckValue(test_keys::kKeyDictionary,
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             expected_value,
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             base::Bind(&PolicyProviderTestHarness::InstallDictionaryPolicy,
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        base::Unretained(test_harness_.get()),
315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        test_keys::kKeyDictionary,
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        &expected_value));
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, RefreshPolicies) {
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyBundle bundle;
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(bundle));
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OnUpdatePolicy is called even when there are no changes.
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockConfigurationPolicyObserver observer;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->AddObserver(&observer);
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RefreshPolicies();
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(bundle));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OnUpdatePolicy is called when there are changes.
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_harness_->InstallStringPolicy(test_keys::kKeyString, "value");
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1);
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RefreshPolicies();
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Mock::VerifyAndClearExpectations(&observer);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      .Set(test_keys::kKeyString,
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           test_harness_->policy_level(),
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           test_harness_->policy_scope(),
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           new base::StringValue("value"),
3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch           NULL);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(bundle));
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RemoveObserver(&observer);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Configuration3rdPartyPolicyProviderTest::
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Configuration3rdPartyPolicyProviderTest() {}
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Configuration3rdPartyPolicyProviderTest::
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~Configuration3rdPartyPolicyProviderTest() {}
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(Configuration3rdPartyPolicyProviderTest, Load3rdParty) {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::DictionaryValue policy_dict;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_dict.SetBoolean("bool", true);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_dict.SetDouble("double", 123.456);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_dict.SetInteger("int", 789);
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  policy_dict.SetString("string", "string value");
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue* list = new base::ListValue();
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < 2; ++i) {
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::DictionaryValue* dict = new base::DictionaryValue();
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict->SetInteger("subdictindex", i);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict->Set("subdict", policy_dict.DeepCopy());
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(dict);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_dict.Set("list", list);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_dict.Set("dict", policy_dict.DeepCopy());
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Install these policies as a Chrome policy.
374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  test_harness_->InstallDictionaryPolicy(test_keys::kKeyDictionary,
375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         &policy_dict);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Install them as 3rd party policies too.
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::DictionaryValue policy_3rdparty;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_3rdparty.Set("extensions.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      policy_dict.DeepCopy());
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_3rdparty.Set("extensions.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      policy_dict.DeepCopy());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Install invalid 3rd party policies that shouldn't be loaded. These also
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // help detecting memory leaks in the code paths that detect invalid input.
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_3rdparty.Set("invalid-domain.component", policy_dict.DeepCopy());
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_3rdparty.Set("extensions.cccccccccccccccccccccccccccccccc",
3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                      new base::StringValue("invalid-value"));
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_harness_->Install3rdPartyPolicy(&policy_3rdparty);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  provider_->RefreshPolicies();
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyMap expected_policy;
393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected_policy.Set(test_keys::kKeyDictionary,
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      test_harness_->policy_level(),
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      test_harness_->policy_scope(),
3967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      policy_dict.DeepCopy(),
3977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      NULL);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyBundle expected_bundle;
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .CopyFrom(expected_policy);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_policy.Clear();
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_policy.LoadFrom(&policy_dict,
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           test_harness_->policy_level(),
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           test_harness_->policy_scope());
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .CopyFrom(expected_policy);
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"))
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .CopyFrom(expected_policy);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(expected_bundle));
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
415