15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <CoreFoundation/CoreFoundation.h>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/files/file_path.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_cftyperef.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/sys_string_conversions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/async_policy_provider.h"
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/configuration_policy_provider_test.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_bundle.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_loader_mac.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/policy/core/common/policy_test_utils.h"
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/preferences_mock_mac.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing base::ScopedCFTypeRef;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestHarness : public PolicyProviderTestHarness {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestHarness();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestHarness();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ConfigurationPolicyProvider* CreateProvider(
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SchemaRegistry* registry,
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      scoped_refptr<base::SequencedTaskRunner> task_runner) OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallEmptyPolicy() OVERRIDE;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallStringPolicy(const std::string& policy_name,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const std::string& policy_value) OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallIntegerPolicy(const std::string& policy_name,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int policy_value) OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallBooleanPolicy(const std::string& policy_name,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bool policy_value) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallStringListPolicy(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& policy_name,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::ListValue* policy_value) OVERRIDE;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InstallDictionaryPolicy(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& policy_name,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::DictionaryValue* policy_value) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static PolicyProviderTestHarness* Create();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockPreferences* prefs_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestHarness);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestHarness::TestHarness()
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : PolicyProviderTestHarness(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER) {}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestHarness::~TestHarness() {}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::SetUp() {}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfigurationPolicyProvider* TestHarness::CreateProvider(
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SchemaRegistry* registry,
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_refptr<base::SequencedTaskRunner> task_runner) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_ = new MockPreferences();
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<AsyncPolicyLoader> loader(
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new PolicyLoaderMac(task_runner, base::FilePath(), prefs_));
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return new AsyncPolicyProvider(registry, loader.Pass());
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallEmptyPolicy() {}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallStringPolicy(const std::string& policy_name,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const std::string& policy_value) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(base::SysUTF8ToCFStringRef(policy_name));
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> value(base::SysUTF8ToCFStringRef(policy_value));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, value, true);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallIntegerPolicy(const std::string& policy_name,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       int policy_value) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(base::SysUTF8ToCFStringRef(policy_name));
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFNumberRef> value(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CFNumberCreate(NULL, kCFNumberIntType, &policy_value));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, value, true);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallBooleanPolicy(const std::string& policy_name,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       bool policy_value) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(base::SysUTF8ToCFStringRef(policy_name));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      policy_value ? kCFBooleanTrue : kCFBooleanFalse,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      true);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallStringListPolicy(const std::string& policy_name,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const base::ListValue* policy_value) {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(base::SysUTF8ToCFStringRef(policy_name));
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ScopedCFTypeRef<CFPropertyListRef> array(ValueToProperty(policy_value));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(array);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, array, true);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestHarness::InstallDictionaryPolicy(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& policy_name,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::DictionaryValue* policy_value) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(base::SysUTF8ToCFStringRef(policy_name));
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ScopedCFTypeRef<CFPropertyListRef> dict(ValueToProperty(policy_value));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, dict, true);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyProviderTestHarness* TestHarness::Create() {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new TestHarness();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Instantiate abstract test case for basic policy reading tests.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PolicyProviderMacTest,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ConfigurationPolicyProviderTest,
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    testing::Values(TestHarness::Create));
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(joaodasilva): instantiate Configuration3rdPartyPolicyProviderTest too
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// once the mac loader supports 3rd party policy. http://crbug.com/108995
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Special test cases for some mac preferences details.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PolicyLoaderMacTest : public PolicyTestBase {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyLoaderMacTest()
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      : prefs_(new MockPreferences()) {}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PolicyLoaderMacTest() {}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PolicyTestBase::SetUp();
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_ptr<AsyncPolicyLoader> loader(new PolicyLoaderMac(
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        loop_.message_loop_proxy(), base::FilePath(), prefs_));
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    provider_.reset(new AsyncPolicyProvider(&schema_registry_, loader.Pass()));
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    provider_->Init(&schema_registry_);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    provider_->Shutdown();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PolicyTestBase::TearDown();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockPreferences* prefs_;
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<AsyncPolicyProvider> provider_;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyLoaderMacTest, Invalid) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      base::SysUTF8ToCFStringRef(test_keys::kKeyString));
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char buffer[] = "binary \xde\xad\xbe\xef data";
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFDataRef> invalid_data(
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CFDataCreate(kCFAllocatorDefault,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   reinterpret_cast<const UInt8 *>(buffer),
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   arraysize(buffer)));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(invalid_data);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, invalid_data.get(), true);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, invalid_data.get(), false);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make the provider read the updated |prefs_|.
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_->RefreshPolicies();
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PolicyBundle kEmptyBundle;
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PolicyLoaderMacTest, TestNonForcedValue) {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFStringRef> name(
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      base::SysUTF8ToCFStringRef(test_keys::kKeyString));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedCFTypeRef<CFPropertyListRef> test_value(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::SysUTF8ToCFStringRef("string value"));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_value.get());
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_->AddTestItem(name, test_value.get(), false);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make the provider read the updated |prefs_|.
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_->RefreshPolicies();
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyBundle expected_bundle;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      .Set(test_keys::kKeyString,
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           POLICY_LEVEL_RECOMMENDED,
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           POLICY_SCOPE_USER,
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)           new base::StringValue("string value"),
1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch           NULL);
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(provider_->policies().Equals(expected_bundle));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
201