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_mac.h" | 5 #include "chrome/browser/policy/policy_loader_mac.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 PolicyLoaderMac::CreateValueFromProperty( | 54 PolicyLoaderMac::CreateValueFromProperty( |
55 static_cast<CFPropertyListRef>(value)); | 55 static_cast<CFPropertyListRef>(value)); |
56 if (converted) | 56 if (converted) |
57 static_cast<base::ListValue *>(context)->Append(converted); | 57 static_cast<base::ListValue *>(context)->Append(converted); |
58 } | 58 } |
59 | 59 |
60 } // namespace | 60 } // namespace |
61 | 61 |
62 PolicyLoaderMac::PolicyLoaderMac( | 62 PolicyLoaderMac::PolicyLoaderMac( |
63 scoped_refptr<base::SequencedTaskRunner> task_runner, | 63 scoped_refptr<base::SequencedTaskRunner> task_runner, |
64 const PolicyDefinitionList* policy_list, | |
65 const base::FilePath& managed_policy_path, | 64 const base::FilePath& managed_policy_path, |
66 MacPreferences* preferences) | 65 MacPreferences* preferences) |
67 : AsyncPolicyLoader(task_runner), | 66 : AsyncPolicyLoader(task_runner), |
68 policy_list_(policy_list), | |
69 preferences_(preferences), | 67 preferences_(preferences), |
70 managed_policy_path_(managed_policy_path) {} | 68 managed_policy_path_(managed_policy_path) {} |
71 | 69 |
72 PolicyLoaderMac::~PolicyLoaderMac() {} | 70 PolicyLoaderMac::~PolicyLoaderMac() {} |
73 | 71 |
74 void PolicyLoaderMac::InitOnBackgroundThread() { | 72 void PolicyLoaderMac::InitOnBackgroundThread() { |
75 if (!managed_policy_path_.empty()) { | 73 if (!managed_policy_path_.empty()) { |
76 watcher_.Watch( | 74 watcher_.Watch( |
77 managed_policy_path_, false, | 75 managed_policy_path_, false, |
78 base::Bind(&PolicyLoaderMac::OnFileUpdated, base::Unretained(this))); | 76 base::Bind(&PolicyLoaderMac::OnFileUpdated, base::Unretained(this))); |
79 } | 77 } |
80 } | 78 } |
81 | 79 |
82 scoped_ptr<PolicyBundle> PolicyLoaderMac::Load() { | 80 scoped_ptr<PolicyBundle> PolicyLoaderMac::Load() { |
83 preferences_->AppSynchronize(kCFPreferencesCurrentApplication); | 81 preferences_->AppSynchronize(kCFPreferencesCurrentApplication); |
84 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); | 82 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); |
85 | 83 |
86 // Load Chrome's policy. | 84 // Load Chrome's policy. |
87 // TODO(joaodasilva): Use the Chrome schema instead of the | |
88 // PolicyDefinitionList. | |
89 PolicyMap& chrome_policy = | 85 PolicyMap& chrome_policy = |
90 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 86 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
91 | 87 |
92 PolicyLoadStatusSample status; | 88 PolicyLoadStatusSample status; |
93 bool policy_present = false; | 89 bool policy_present = false; |
94 const PolicyDefinitionList::Entry* current; | 90 const Schema* schema = |
95 for (current = policy_list_->begin; current != policy_list_->end; ++current) { | 91 schema_map()->GetSchema(PolicyNamespace(POLICY_DOMAIN_CHROME, "")); |
| 92 for (Schema::Iterator it = schema->GetPropertiesIterator(); |
| 93 !it.IsAtEnd(); it.Advance()) { |
96 base::ScopedCFTypeRef<CFStringRef> name( | 94 base::ScopedCFTypeRef<CFStringRef> name( |
97 base::SysUTF8ToCFStringRef(current->name)); | 95 base::SysUTF8ToCFStringRef(it.key())); |
98 base::ScopedCFTypeRef<CFPropertyListRef> value( | 96 base::ScopedCFTypeRef<CFPropertyListRef> value( |
99 preferences_->CopyAppValue(name, kCFPreferencesCurrentApplication)); | 97 preferences_->CopyAppValue(name, kCFPreferencesCurrentApplication)); |
100 if (!value.get()) | 98 if (!value.get()) |
101 continue; | 99 continue; |
102 policy_present = true; | 100 policy_present = true; |
103 bool forced = | 101 bool forced = |
104 preferences_->AppValueIsForced(name, kCFPreferencesCurrentApplication); | 102 preferences_->AppValueIsForced(name, kCFPreferencesCurrentApplication); |
105 PolicyLevel level = forced ? POLICY_LEVEL_MANDATORY : | 103 PolicyLevel level = forced ? POLICY_LEVEL_MANDATORY : |
106 POLICY_LEVEL_RECOMMENDED; | 104 POLICY_LEVEL_RECOMMENDED; |
107 // TODO(joaodasilva): figure the policy scope. | 105 // TODO(joaodasilva): figure the policy scope. |
108 base::Value* policy = CreateValueFromProperty(value); | 106 base::Value* policy = CreateValueFromProperty(value); |
109 if (policy) | 107 if (policy) |
110 chrome_policy.Set(current->name, level, POLICY_SCOPE_USER, policy, NULL); | 108 chrome_policy.Set(it.key(), level, POLICY_SCOPE_USER, policy, NULL); |
111 else | 109 else |
112 status.Add(POLICY_LOAD_STATUS_PARSE_ERROR); | 110 status.Add(POLICY_LOAD_STATUS_PARSE_ERROR); |
113 } | 111 } |
114 | 112 |
115 if (!policy_present) | 113 if (!policy_present) |
116 status.Add(POLICY_LOAD_STATUS_NO_POLICY); | 114 status.Add(POLICY_LOAD_STATUS_NO_POLICY); |
117 | 115 |
118 // Load policy for the registered components. | 116 // Load policy for the registered components. |
119 LoadPolicyForDomain(POLICY_DOMAIN_EXTENSIONS, "extensions", bundle.get()); | 117 LoadPolicyForDomain(POLICY_DOMAIN_EXTENSIONS, "extensions", bundle.get()); |
120 | 118 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 } | 226 } |
229 } | 227 } |
230 } | 228 } |
231 | 229 |
232 void PolicyLoaderMac::OnFileUpdated(const base::FilePath& path, bool error) { | 230 void PolicyLoaderMac::OnFileUpdated(const base::FilePath& path, bool error) { |
233 if (!error) | 231 if (!error) |
234 Reload(false); | 232 Reload(false); |
235 } | 233 } |
236 | 234 |
237 } // namespace policy | 235 } // namespace policy |
OLD | NEW |