| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/policy/policy_loader_win.h" | 5 #include "chrome/browser/policy/policy_loader_win.h" |
| 6 | 6 |
| 7 #include <userenv.h> | 7 #include <userenv.h> |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 public AppliedGPOListProvider { | 247 public AppliedGPOListProvider { |
| 248 public: | 248 public: |
| 249 RegistryTestHarness(HKEY hive, PolicyScope scope); | 249 RegistryTestHarness(HKEY hive, PolicyScope scope); |
| 250 virtual ~RegistryTestHarness(); | 250 virtual ~RegistryTestHarness(); |
| 251 | 251 |
| 252 // PolicyProviderTestHarness: | 252 // PolicyProviderTestHarness: |
| 253 virtual void SetUp() OVERRIDE; | 253 virtual void SetUp() OVERRIDE; |
| 254 | 254 |
| 255 virtual ConfigurationPolicyProvider* CreateProvider( | 255 virtual ConfigurationPolicyProvider* CreateProvider( |
| 256 SchemaRegistry* registry, | 256 SchemaRegistry* registry, |
| 257 scoped_refptr<base::SequencedTaskRunner> task_runner, | 257 scoped_refptr<base::SequencedTaskRunner> task_runner) OVERRIDE; |
| 258 const PolicyDefinitionList* policy_list) OVERRIDE; | |
| 259 | 258 |
| 260 virtual void InstallEmptyPolicy() OVERRIDE; | 259 virtual void InstallEmptyPolicy() OVERRIDE; |
| 261 virtual void InstallStringPolicy(const std::string& policy_name, | 260 virtual void InstallStringPolicy(const std::string& policy_name, |
| 262 const std::string& policy_value) OVERRIDE; | 261 const std::string& policy_value) OVERRIDE; |
| 263 virtual void InstallIntegerPolicy(const std::string& policy_name, | 262 virtual void InstallIntegerPolicy(const std::string& policy_name, |
| 264 int policy_value) OVERRIDE; | 263 int policy_value) OVERRIDE; |
| 265 virtual void InstallBooleanPolicy(const std::string& policy_name, | 264 virtual void InstallBooleanPolicy(const std::string& policy_name, |
| 266 bool policy_value) OVERRIDE; | 265 bool policy_value) OVERRIDE; |
| 267 virtual void InstallStringListPolicy( | 266 virtual void InstallStringListPolicy( |
| 268 const std::string& policy_name, | 267 const std::string& policy_name, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 299 public AppliedGPOListProvider { | 298 public AppliedGPOListProvider { |
| 300 public: | 299 public: |
| 301 PRegTestHarness(); | 300 PRegTestHarness(); |
| 302 virtual ~PRegTestHarness(); | 301 virtual ~PRegTestHarness(); |
| 303 | 302 |
| 304 // PolicyProviderTestHarness: | 303 // PolicyProviderTestHarness: |
| 305 virtual void SetUp() OVERRIDE; | 304 virtual void SetUp() OVERRIDE; |
| 306 | 305 |
| 307 virtual ConfigurationPolicyProvider* CreateProvider( | 306 virtual ConfigurationPolicyProvider* CreateProvider( |
| 308 SchemaRegistry* registry, | 307 SchemaRegistry* registry, |
| 309 scoped_refptr<base::SequencedTaskRunner> task_runner, | 308 scoped_refptr<base::SequencedTaskRunner> task_runner) OVERRIDE; |
| 310 const PolicyDefinitionList* policy_list) OVERRIDE; | |
| 311 | 309 |
| 312 virtual void InstallEmptyPolicy() OVERRIDE; | 310 virtual void InstallEmptyPolicy() OVERRIDE; |
| 313 virtual void InstallStringPolicy(const std::string& policy_name, | 311 virtual void InstallStringPolicy(const std::string& policy_name, |
| 314 const std::string& policy_value) OVERRIDE; | 312 const std::string& policy_value) OVERRIDE; |
| 315 virtual void InstallIntegerPolicy(const std::string& policy_name, | 313 virtual void InstallIntegerPolicy(const std::string& policy_name, |
| 316 int policy_value) OVERRIDE; | 314 int policy_value) OVERRIDE; |
| 317 virtual void InstallBooleanPolicy(const std::string& policy_name, | 315 virtual void InstallBooleanPolicy(const std::string& policy_name, |
| 318 bool policy_value) OVERRIDE; | 316 bool policy_value) OVERRIDE; |
| 319 virtual void InstallStringListPolicy( | 317 virtual void InstallStringListPolicy( |
| 320 const std::string& policy_name, | 318 const std::string& policy_name, |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 | 415 |
| 418 RegistryTestHarness::RegistryTestHarness(HKEY hive, PolicyScope scope) | 416 RegistryTestHarness::RegistryTestHarness(HKEY hive, PolicyScope scope) |
| 419 : PolicyProviderTestHarness(POLICY_LEVEL_MANDATORY, scope), hive_(hive) {} | 417 : PolicyProviderTestHarness(POLICY_LEVEL_MANDATORY, scope), hive_(hive) {} |
| 420 | 418 |
| 421 RegistryTestHarness::~RegistryTestHarness() {} | 419 RegistryTestHarness::~RegistryTestHarness() {} |
| 422 | 420 |
| 423 void RegistryTestHarness::SetUp() {} | 421 void RegistryTestHarness::SetUp() {} |
| 424 | 422 |
| 425 ConfigurationPolicyProvider* RegistryTestHarness::CreateProvider( | 423 ConfigurationPolicyProvider* RegistryTestHarness::CreateProvider( |
| 426 SchemaRegistry* registry, | 424 SchemaRegistry* registry, |
| 427 scoped_refptr<base::SequencedTaskRunner> task_runner, | 425 scoped_refptr<base::SequencedTaskRunner> task_runner) { |
| 428 const PolicyDefinitionList* policy_list) { | 426 scoped_ptr<AsyncPolicyLoader> loader( |
| 429 scoped_ptr<AsyncPolicyLoader> loader(new PolicyLoaderWin( | 427 new PolicyLoaderWin(task_runner, kRegistryChromePolicyKey, this)); |
| 430 task_runner, policy_list, kRegistryChromePolicyKey, this)); | |
| 431 return new AsyncPolicyProvider(registry, loader.Pass()); | 428 return new AsyncPolicyProvider(registry, loader.Pass()); |
| 432 } | 429 } |
| 433 | 430 |
| 434 void RegistryTestHarness::InstallEmptyPolicy() {} | 431 void RegistryTestHarness::InstallEmptyPolicy() {} |
| 435 | 432 |
| 436 void RegistryTestHarness::InstallStringPolicy( | 433 void RegistryTestHarness::InstallStringPolicy( |
| 437 const std::string& policy_name, | 434 const std::string& policy_name, |
| 438 const std::string& policy_value) { | 435 const std::string& policy_value) { |
| 439 RegKey key(hive_, kRegistryChromePolicyKey, KEY_ALL_ACCESS); | 436 RegKey key(hive_, kRegistryChromePolicyKey, KEY_ALL_ACCESS); |
| 440 ASSERT_TRUE(key.Valid()); | 437 ASSERT_TRUE(key.Valid()); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 ASSERT_TRUE(file_util::WriteFile(preg_file_path_, | 547 ASSERT_TRUE(file_util::WriteFile(preg_file_path_, |
| 551 preg_parser::kPRegFileHeader, | 548 preg_parser::kPRegFileHeader, |
| 552 arraysize(preg_parser::kPRegFileHeader))); | 549 arraysize(preg_parser::kPRegFileHeader))); |
| 553 | 550 |
| 554 memset(&gpo_, 0, sizeof(GROUP_POLICY_OBJECT)); | 551 memset(&gpo_, 0, sizeof(GROUP_POLICY_OBJECT)); |
| 555 gpo_.lpFileSysPath = const_cast<wchar_t*>(temp_dir_.path().value().c_str()); | 552 gpo_.lpFileSysPath = const_cast<wchar_t*>(temp_dir_.path().value().c_str()); |
| 556 } | 553 } |
| 557 | 554 |
| 558 ConfigurationPolicyProvider* PRegTestHarness::CreateProvider( | 555 ConfigurationPolicyProvider* PRegTestHarness::CreateProvider( |
| 559 SchemaRegistry* registry, | 556 SchemaRegistry* registry, |
| 560 scoped_refptr<base::SequencedTaskRunner> task_runner, | 557 scoped_refptr<base::SequencedTaskRunner> task_runner) { |
| 561 const PolicyDefinitionList* policy_list) { | 558 scoped_ptr<AsyncPolicyLoader> loader( |
| 562 scoped_ptr<AsyncPolicyLoader> loader(new PolicyLoaderWin( | 559 new PolicyLoaderWin(task_runner, kRegistryChromePolicyKey, this)); |
| 563 task_runner, policy_list, kRegistryChromePolicyKey, this)); | |
| 564 return new AsyncPolicyProvider(registry, loader.Pass()); | 560 return new AsyncPolicyProvider(registry, loader.Pass()); |
| 565 } | 561 } |
| 566 | 562 |
| 567 void PRegTestHarness::InstallEmptyPolicy() {} | 563 void PRegTestHarness::InstallEmptyPolicy() {} |
| 568 | 564 |
| 569 void PRegTestHarness::InstallStringPolicy(const std::string& policy_name, | 565 void PRegTestHarness::InstallStringPolicy(const std::string& policy_name, |
| 570 const std::string& policy_value) { | 566 const std::string& policy_value) { |
| 571 AppendStringToPRegFile(kRegistryChromePolicyKey, policy_name, policy_value); | 567 AppendStringToPRegFile(kRegistryChromePolicyKey, policy_name, policy_value); |
| 572 } | 568 } |
| 573 | 569 |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 834 GROUP_POLICY_OBJECT* next, | 830 GROUP_POLICY_OBJECT* next, |
| 835 GROUP_POLICY_OBJECT* prev) { | 831 GROUP_POLICY_OBJECT* prev) { |
| 836 memset(gpo, 0, sizeof(GROUP_POLICY_OBJECT)); | 832 memset(gpo, 0, sizeof(GROUP_POLICY_OBJECT)); |
| 837 gpo->dwOptions = options; | 833 gpo->dwOptions = options; |
| 838 gpo->lpFileSysPath = const_cast<wchar_t*>(path.value().c_str()); | 834 gpo->lpFileSysPath = const_cast<wchar_t*>(path.value().c_str()); |
| 839 gpo->pNext = next; | 835 gpo->pNext = next; |
| 840 gpo->pPrev = prev; | 836 gpo->pPrev = prev; |
| 841 } | 837 } |
| 842 | 838 |
| 843 bool Matches(const PolicyBundle& expected) { | 839 bool Matches(const PolicyBundle& expected) { |
| 844 PolicyLoaderWin loader(loop_.message_loop_proxy(), | 840 PolicyLoaderWin loader(loop_.message_loop_proxy(), kTestPolicyKey, this); |
| 845 &test_policy_definitions::kList, kTestPolicyKey, | |
| 846 this); | |
| 847 scoped_ptr<PolicyBundle> loaded( | 841 scoped_ptr<PolicyBundle> loaded( |
| 848 loader.InitialLoad(schema_registry_.schema_map())); | 842 loader.InitialLoad(schema_registry_.schema_map())); |
| 849 return loaded->Equals(expected); | 843 return loaded->Equals(expected); |
| 850 } | 844 } |
| 851 | 845 |
| 852 void InstallRegistrySentinel() { | 846 void InstallRegistrySentinel() { |
| 853 RegKey hklm_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); | 847 RegKey hklm_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); |
| 854 ASSERT_TRUE(hklm_key.Valid()); | 848 ASSERT_TRUE(hklm_key.Valid()); |
| 855 hklm_key.WriteValue( | 849 hklm_key.WriteValue( |
| 856 UTF8ToUTF16(test_policy_definitions::kKeyString).c_str(), | 850 UTF8ToUTF16(test_keys::kKeyString).c_str(), |
| 857 UTF8ToUTF16("registry").c_str()); | 851 UTF8ToUTF16("registry").c_str()); |
| 858 } | 852 } |
| 859 | 853 |
| 860 bool MatchesRegistrySentinel() { | 854 bool MatchesRegistrySentinel() { |
| 861 base::DictionaryValue expected_policy; | 855 base::DictionaryValue expected_policy; |
| 862 expected_policy.SetString(test_policy_definitions::kKeyString, "registry"); | 856 expected_policy.SetString(test_keys::kKeyString, "registry"); |
| 863 PolicyBundle expected; | 857 PolicyBundle expected; |
| 864 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 858 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 865 .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER); | 859 .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER); |
| 866 return Matches(expected); | 860 return Matches(expected); |
| 867 } | 861 } |
| 868 | 862 |
| 869 bool MatchesTestBundle() { | 863 bool MatchesTestBundle() { |
| 870 base::DictionaryValue expected_policy; | 864 base::DictionaryValue expected_policy; |
| 871 expected_policy.SetBoolean(test_policy_definitions::kKeyBoolean, true); | 865 expected_policy.SetBoolean(test_keys::kKeyBoolean, true); |
| 872 expected_policy.SetString(test_policy_definitions::kKeyString, "GPO"); | 866 expected_policy.SetString(test_keys::kKeyString, "GPO"); |
| 873 expected_policy.SetInteger(test_policy_definitions::kKeyInteger, 42); | 867 expected_policy.SetInteger(test_keys::kKeyInteger, 42); |
| 874 scoped_ptr<base::ListValue> list(new base::ListValue()); | 868 scoped_ptr<base::ListValue> list(new base::ListValue()); |
| 875 list->AppendString("GPO 1"); | 869 list->AppendString("GPO 1"); |
| 876 list->AppendString("GPO 2"); | 870 list->AppendString("GPO 2"); |
| 877 expected_policy.Set(test_policy_definitions::kKeyStringList, | 871 expected_policy.Set(test_keys::kKeyStringList, list.release()); |
| 878 list.release()); | |
| 879 PolicyBundle expected; | 872 PolicyBundle expected; |
| 880 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 873 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 881 .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY, | 874 .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY, |
| 882 POLICY_SCOPE_MACHINE); | 875 POLICY_SCOPE_MACHINE); |
| 883 return Matches(expected); | 876 return Matches(expected); |
| 884 } | 877 } |
| 885 | 878 |
| 886 ScopedGroupPolicyRegistrySandbox registry_sandbox_; | 879 ScopedGroupPolicyRegistrySandbox registry_sandbox_; |
| 887 PGROUP_POLICY_OBJECT gpo_list_; | 880 PGROUP_POLICY_OBJECT gpo_list_; |
| 888 DWORD gpo_list_status_; | 881 DWORD gpo_list_status_; |
| 889 base::FilePath test_data_dir_; | 882 base::FilePath test_data_dir_; |
| 890 }; | 883 }; |
| 891 | 884 |
| 892 const char16 PolicyLoaderWinTest::kTestPolicyKey[] = | 885 const char16 PolicyLoaderWinTest::kTestPolicyKey[] = |
| 893 L"SOFTWARE\\Policies\\Chromium"; | 886 L"SOFTWARE\\Policies\\Chromium"; |
| 894 | 887 |
| 895 TEST_F(PolicyLoaderWinTest, HKLMOverHKCU) { | 888 TEST_F(PolicyLoaderWinTest, HKLMOverHKCU) { |
| 896 RegKey hklm_key(HKEY_LOCAL_MACHINE, kTestPolicyKey, KEY_ALL_ACCESS); | 889 RegKey hklm_key(HKEY_LOCAL_MACHINE, kTestPolicyKey, KEY_ALL_ACCESS); |
| 897 ASSERT_TRUE(hklm_key.Valid()); | 890 ASSERT_TRUE(hklm_key.Valid()); |
| 898 hklm_key.WriteValue(UTF8ToUTF16(test_policy_definitions::kKeyString).c_str(), | 891 hklm_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), |
| 899 UTF8ToUTF16("hklm").c_str()); | 892 UTF8ToUTF16("hklm").c_str()); |
| 900 RegKey hkcu_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); | 893 RegKey hkcu_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); |
| 901 ASSERT_TRUE(hkcu_key.Valid()); | 894 ASSERT_TRUE(hkcu_key.Valid()); |
| 902 hkcu_key.WriteValue(UTF8ToUTF16(test_policy_definitions::kKeyString).c_str(), | 895 hkcu_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), |
| 903 UTF8ToUTF16("hkcu").c_str()); | 896 UTF8ToUTF16("hkcu").c_str()); |
| 904 | 897 |
| 905 PolicyBundle expected; | 898 PolicyBundle expected; |
| 906 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 899 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 907 .Set(test_policy_definitions::kKeyString, | 900 .Set(test_keys::kKeyString, |
| 908 POLICY_LEVEL_MANDATORY, | 901 POLICY_LEVEL_MANDATORY, |
| 909 POLICY_SCOPE_MACHINE, | 902 POLICY_SCOPE_MACHINE, |
| 910 base::Value::CreateStringValue("hklm"), NULL); | 903 base::Value::CreateStringValue("hklm"), NULL); |
| 911 EXPECT_TRUE(Matches(expected)); | 904 EXPECT_TRUE(Matches(expected)); |
| 912 } | 905 } |
| 913 | 906 |
| 914 TEST_F(PolicyLoaderWinTest, Load3rdPartyWithoutSchema) { | 907 TEST_F(PolicyLoaderWinTest, Load3rdPartyWithoutSchema) { |
| 915 base::DictionaryValue dict; | 908 base::DictionaryValue dict; |
| 916 dict.SetString("str", "string value"); | 909 dict.SetString("str", "string value"); |
| 917 dict.SetInteger("int", 123); | 910 dict.SetInteger("int", 123); |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1216 .LoadFrom(&expected_a, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); | 1209 .LoadFrom(&expected_a, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); |
| 1217 base::DictionaryValue expected_b; | 1210 base::DictionaryValue expected_b; |
| 1218 expected_b.SetInteger("policy 1", 2); | 1211 expected_b.SetInteger("policy 1", 2); |
| 1219 expected.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 1212 expected.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
| 1220 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) | 1213 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) |
| 1221 .LoadFrom(&expected_b, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); | 1214 .LoadFrom(&expected_b, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); |
| 1222 EXPECT_TRUE(Matches(expected)); | 1215 EXPECT_TRUE(Matches(expected)); |
| 1223 } | 1216 } |
| 1224 | 1217 |
| 1225 } // namespace policy | 1218 } // namespace policy |
| OLD | NEW |