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 "components/policy/core/common/policy_loader_win.h" | 5 #include "components/policy/core/common/policy_loader_win.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <userenv.h> | 10 #include <userenv.h> |
11 | 11 |
12 #include <algorithm> | 12 #include <algorithm> |
13 #include <cstring> | 13 #include <cstring> |
14 #include <functional> | 14 #include <functional> |
15 #include <iterator> | 15 #include <iterator> |
16 #include <utility> | 16 #include <utility> |
17 #include <vector> | 17 #include <vector> |
18 | 18 |
19 #include "base/base_paths.h" | 19 #include "base/base_paths.h" |
20 #include "base/callback.h" | 20 #include "base/callback.h" |
21 #include "base/files/file_path.h" | 21 #include "base/files/file_path.h" |
22 #include "base/files/file_util.h" | 22 #include "base/files/file_util.h" |
23 #include "base/files/scoped_temp_dir.h" | 23 #include "base/files/scoped_temp_dir.h" |
24 #include "base/json/json_writer.h" | 24 #include "base/json/json_writer.h" |
25 #include "base/macros.h" | 25 #include "base/macros.h" |
| 26 #include "base/memory/ptr_util.h" |
26 #include "base/path_service.h" | 27 #include "base/path_service.h" |
27 #include "base/process/process_handle.h" | 28 #include "base/process/process_handle.h" |
28 #include "base/strings/string16.h" | 29 #include "base/strings/string16.h" |
29 #include "base/strings/string_number_conversions.h" | 30 #include "base/strings/string_number_conversions.h" |
30 #include "base/strings/string_util.h" | 31 #include "base/strings/string_util.h" |
31 #include "base/strings/stringprintf.h" | 32 #include "base/strings/stringprintf.h" |
32 #include "base/strings/utf_string_conversions.h" | 33 #include "base/strings/utf_string_conversions.h" |
33 #include "base/sys_byteorder.h" | 34 #include "base/sys_byteorder.h" |
34 #include "base/win/registry.h" | 35 #include "base/win/registry.h" |
35 #include "base/win/win_util.h" | 36 #include "base/win/win_util.h" |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 ASSERT_TRUE(hklm_key.Valid()); | 804 ASSERT_TRUE(hklm_key.Valid()); |
804 hklm_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), | 805 hklm_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), |
805 UTF8ToUTF16("hklm").c_str()); | 806 UTF8ToUTF16("hklm").c_str()); |
806 RegKey hkcu_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); | 807 RegKey hkcu_key(HKEY_CURRENT_USER, kTestPolicyKey, KEY_ALL_ACCESS); |
807 ASSERT_TRUE(hkcu_key.Valid()); | 808 ASSERT_TRUE(hkcu_key.Valid()); |
808 hkcu_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), | 809 hkcu_key.WriteValue(UTF8ToUTF16(test_keys::kKeyString).c_str(), |
809 UTF8ToUTF16("hkcu").c_str()); | 810 UTF8ToUTF16("hkcu").c_str()); |
810 | 811 |
811 PolicyBundle expected; | 812 PolicyBundle expected; |
812 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 813 expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
813 .Set(test_keys::kKeyString, | 814 .Set(test_keys::kKeyString, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
814 POLICY_LEVEL_MANDATORY, | |
815 POLICY_SCOPE_MACHINE, | |
816 POLICY_SOURCE_PLATFORM, | 815 POLICY_SOURCE_PLATFORM, |
817 new base::StringValue("hklm"), | 816 base::WrapUnique(new base::StringValue("hklm")), nullptr); |
818 NULL); | |
819 EXPECT_TRUE(Matches(expected)); | 817 EXPECT_TRUE(Matches(expected)); |
820 } | 818 } |
821 | 819 |
822 TEST_F(PolicyLoaderWinTest, Merge3rdPartyPolicies) { | 820 TEST_F(PolicyLoaderWinTest, Merge3rdPartyPolicies) { |
823 // Policy for the same extension will be provided at the 4 level/scope | 821 // Policy for the same extension will be provided at the 4 level/scope |
824 // combinations, to verify that they overlap as expected. | 822 // combinations, to verify that they overlap as expected. |
825 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "merge"); | 823 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "merge"); |
826 ASSERT_TRUE(RegisterSchema( | 824 ASSERT_TRUE(RegisterSchema( |
827 ns, | 825 ns, |
828 "{" | 826 "{" |
(...skipping 29 matching lines...) Expand all Loading... |
858 kPathSuffix, kRecommended)); | 856 kPathSuffix, kRecommended)); |
859 policy.SetString("a", kUserRecommended); | 857 policy.SetString("a", kUserRecommended); |
860 policy.SetString("b", kUserRecommended); | 858 policy.SetString("b", kUserRecommended); |
861 policy.SetString("c", kUserRecommended); | 859 policy.SetString("c", kUserRecommended); |
862 policy.SetString("d", kUserRecommended); | 860 policy.SetString("d", kUserRecommended); |
863 EXPECT_TRUE(InstallValue(policy, HKEY_CURRENT_USER, | 861 EXPECT_TRUE(InstallValue(policy, HKEY_CURRENT_USER, |
864 kPathSuffix, kRecommended)); | 862 kPathSuffix, kRecommended)); |
865 | 863 |
866 PolicyBundle expected; | 864 PolicyBundle expected; |
867 PolicyMap& expected_policy = expected.Get(ns); | 865 PolicyMap& expected_policy = expected.Get(ns); |
868 expected_policy.Set("a", | 866 expected_policy.Set( |
869 POLICY_LEVEL_MANDATORY, | 867 "a", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, |
870 POLICY_SCOPE_MACHINE, | 868 base::WrapUnique(new base::StringValue(kMachineMandatory)), nullptr); |
871 POLICY_SOURCE_PLATFORM, | 869 expected_policy.Set( |
872 new base::StringValue(kMachineMandatory), | 870 "b", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM, |
873 NULL); | 871 base::WrapUnique(new base::StringValue(kUserMandatory)), nullptr); |
874 expected_policy.Set("b", | 872 expected_policy.Set( |
875 POLICY_LEVEL_MANDATORY, | 873 "c", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, |
876 POLICY_SCOPE_USER, | 874 POLICY_SOURCE_PLATFORM, |
877 POLICY_SOURCE_PLATFORM, | 875 base::WrapUnique(new base::StringValue(kMachineRecommended)), nullptr); |
878 new base::StringValue(kUserMandatory), | 876 expected_policy.Set( |
879 NULL); | 877 "d", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM, |
880 expected_policy.Set("c", | 878 base::WrapUnique(new base::StringValue(kUserRecommended)), nullptr); |
881 POLICY_LEVEL_RECOMMENDED, | |
882 POLICY_SCOPE_MACHINE, | |
883 POLICY_SOURCE_PLATFORM, | |
884 new base::StringValue(kMachineRecommended), | |
885 NULL); | |
886 expected_policy.Set("d", | |
887 POLICY_LEVEL_RECOMMENDED, | |
888 POLICY_SCOPE_USER, | |
889 POLICY_SOURCE_PLATFORM, | |
890 new base::StringValue(kUserRecommended), | |
891 NULL); | |
892 EXPECT_TRUE(Matches(expected)); | 879 EXPECT_TRUE(Matches(expected)); |
893 } | 880 } |
894 | 881 |
895 TEST_F(PolicyLoaderWinTest, LoadStringEncodedValues) { | 882 TEST_F(PolicyLoaderWinTest, LoadStringEncodedValues) { |
896 // Create a dictionary with all the types that can be stored encoded in a | 883 // Create a dictionary with all the types that can be stored encoded in a |
897 // string. | 884 // string. |
898 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "string"); | 885 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "string"); |
899 ASSERT_TRUE(RegisterSchema( | 886 ASSERT_TRUE(RegisterSchema( |
900 ns, | 887 ns, |
901 "{" | 888 "{" |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1227 policy.Set("url_list", list.DeepCopy()); | 1214 policy.Set("url_list", list.DeepCopy()); |
1228 policy.SetString("alternative_browser_path", "c:\\legacy\\browser.exe"); | 1215 policy.SetString("alternative_browser_path", "c:\\legacy\\browser.exe"); |
1229 base::DictionaryValue root; | 1216 base::DictionaryValue root; |
1230 root.Set(base::UTF16ToUTF8(kMandatory), policy.DeepCopy()); | 1217 root.Set(base::UTF16ToUTF8(kMandatory), policy.DeepCopy()); |
1231 root.SetString(kSchema, kIncompleteSchema); | 1218 root.SetString(kSchema, kIncompleteSchema); |
1232 EXPECT_TRUE(InstallValue(root, HKEY_LOCAL_MACHINE, | 1219 EXPECT_TRUE(InstallValue(root, HKEY_LOCAL_MACHINE, |
1233 kPathSuffix, base::ASCIIToUTF16(ns.component_id))); | 1220 kPathSuffix, base::ASCIIToUTF16(ns.component_id))); |
1234 | 1221 |
1235 PolicyBundle expected; | 1222 PolicyBundle expected; |
1236 PolicyMap& expected_policy = expected.Get(ns); | 1223 PolicyMap& expected_policy = expected.Get(ns); |
1237 expected_policy.Set("alternative_browser_path", | 1224 expected_policy.Set( |
1238 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 1225 "alternative_browser_path", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
1239 POLICY_SOURCE_PLATFORM, | 1226 POLICY_SOURCE_PLATFORM, |
1240 new base::StringValue("c:\\legacy\\browser.exe"), NULL); | 1227 base::WrapUnique(new base::StringValue("c:\\legacy\\browser.exe")), |
| 1228 nullptr); |
1241 expected_policy.Set("url_list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 1229 expected_policy.Set("url_list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
1242 POLICY_SOURCE_PLATFORM, list.DeepCopy(), nullptr); | 1230 POLICY_SOURCE_PLATFORM, list.CreateDeepCopy(), nullptr); |
1243 EXPECT_TRUE(Matches(expected)); | 1231 EXPECT_TRUE(Matches(expected)); |
1244 } | 1232 } |
1245 | 1233 |
1246 } // namespace policy | 1234 } // namespace policy |
OLD | NEW |