OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/cloud/component_cloud_policy_store.h" | 5 #include "components/policy/core/common/cloud/component_cloud_policy_store.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 } | 65 } |
66 | 66 |
67 const DomainConstants* GetDomainConstantsForType(const std::string& type) { | 67 const DomainConstants* GetDomainConstantsForType(const std::string& type) { |
68 for (const DomainConstants& constants : kDomains) { | 68 for (const DomainConstants& constants : kDomains) { |
69 if (constants.policy_type == type) | 69 if (constants.policy_type == type) |
70 return &constants; | 70 return &constants; |
71 } | 71 } |
72 return nullptr; | 72 return nullptr; |
73 } | 73 } |
74 | 74 |
75 base::Time GetTimeFromPolicyTimestamp(int64_t timestamp) { | |
76 return base::Time::UnixEpoch() + base::TimeDelta::FromMilliseconds(timestamp); | |
77 } | |
78 | |
79 } // namespace | 75 } // namespace |
80 | 76 |
81 ComponentCloudPolicyStore::Delegate::~Delegate() {} | 77 ComponentCloudPolicyStore::Delegate::~Delegate() {} |
82 | 78 |
83 ComponentCloudPolicyStore::ComponentCloudPolicyStore(Delegate* delegate, | 79 ComponentCloudPolicyStore::ComponentCloudPolicyStore(Delegate* delegate, |
84 ResourceCache* cache) | 80 ResourceCache* cache) |
85 : delegate_(delegate), cache_(cache) { | 81 : delegate_(delegate), cache_(cache) { |
86 // Allow the store to be created on a different thread than the thread that | 82 // Allow the store to be created on a different thread than the thread that |
87 // will end up using it. | 83 // will end up using it. |
88 DetachFromThread(); | 84 DetachFromThread(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 160 |
165 // The protobuf looks good; load the policy data. | 161 // The protobuf looks good; load the policy data. |
166 std::string data; | 162 std::string data; |
167 PolicyMap policy; | 163 PolicyMap policy; |
168 if (cache_->Load(constants.data_cache_key, id, &data) && | 164 if (cache_->Load(constants.data_cache_key, id, &data) && |
169 ValidateData(data, payload.secure_hash(), &policy)) { | 165 ValidateData(data, payload.secure_hash(), &policy)) { |
170 // The data is also good; expose the policies. | 166 // The data is also good; expose the policies. |
171 policy_bundle_.Get(ns).Swap(&policy); | 167 policy_bundle_.Get(ns).Swap(&policy); |
172 cached_hashes_[ns] = payload.secure_hash(); | 168 cached_hashes_[ns] = payload.secure_hash(); |
173 stored_policy_times_[ns] = | 169 stored_policy_times_[ns] = |
174 GetTimeFromPolicyTimestamp(policy_data.timestamp()); | 170 base::Time::FromJavaTime(policy_data.timestamp()); |
175 } else { | 171 } else { |
176 // The data for this proto couldn't be loaded or is corrupted. | 172 // The data for this proto couldn't be loaded or is corrupted. |
177 Delete(ns); | 173 Delete(ns); |
178 } | 174 } |
179 } | 175 } |
180 } | 176 } |
181 } | 177 } |
182 | 178 |
183 bool ComponentCloudPolicyStore::Store( | 179 bool ComponentCloudPolicyStore::Store( |
184 const PolicyNamespace& ns, | 180 const PolicyNamespace& ns, |
185 const std::string& serialized_policy, | 181 const std::string& serialized_policy, |
186 std::unique_ptr<em::PolicyData> policy_data, | 182 std::unique_ptr<em::PolicyData> policy_data, |
187 const std::string& secure_hash, | 183 const std::string& secure_hash, |
188 const std::string& data) { | 184 const std::string& data) { |
189 DCHECK(CalledOnValidThread()); | 185 DCHECK(CalledOnValidThread()); |
190 const DomainConstants* constants = GetDomainConstants(ns.domain); | 186 const DomainConstants* constants = GetDomainConstants(ns.domain); |
191 PolicyMap policy; | 187 PolicyMap policy; |
192 // |serialized_policy| has already been validated; validate the data now. | 188 // |serialized_policy| has already been validated; validate the data now. |
193 if (!constants) | 189 if (!constants) |
194 return false; | 190 return false; |
195 if (!ValidateData(data, secure_hash, &policy)) | 191 if (!ValidateData(data, secure_hash, &policy)) |
196 return false; | 192 return false; |
197 | 193 |
198 // Flush the proto and the data to the cache. | 194 // Flush the proto and the data to the cache. |
199 cache_->Store(constants->proto_cache_key, ns.component_id, serialized_policy); | 195 cache_->Store(constants->proto_cache_key, ns.component_id, serialized_policy); |
200 cache_->Store(constants->data_cache_key, ns.component_id, data); | 196 cache_->Store(constants->data_cache_key, ns.component_id, data); |
201 // And expose the policy. | 197 // And expose the policy. |
202 policy_bundle_.Get(ns).Swap(&policy); | 198 policy_bundle_.Get(ns).Swap(&policy); |
203 cached_hashes_[ns] = secure_hash; | 199 cached_hashes_[ns] = secure_hash; |
204 stored_policy_times_[ns] = | 200 stored_policy_times_[ns] = base::Time::FromJavaTime(policy_data->timestamp()); |
205 GetTimeFromPolicyTimestamp(policy_data->timestamp()); | |
206 delegate_->OnComponentCloudPolicyStoreUpdated(); | 201 delegate_->OnComponentCloudPolicyStoreUpdated(); |
207 return true; | 202 return true; |
208 } | 203 } |
209 | 204 |
210 void ComponentCloudPolicyStore::Delete(const PolicyNamespace& ns) { | 205 void ComponentCloudPolicyStore::Delete(const PolicyNamespace& ns) { |
211 DCHECK(CalledOnValidThread()); | 206 DCHECK(CalledOnValidThread()); |
212 const DomainConstants* constants = GetDomainConstants(ns.domain); | 207 const DomainConstants* constants = GetDomainConstants(ns.domain); |
213 if (!constants) | 208 if (!constants) |
214 return; | 209 return; |
215 | 210 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 // this must support a configurable scope; assuming POLICY_SCOPE_USER is | 397 // this must support a configurable scope; assuming POLICY_SCOPE_USER is |
403 // fine for now. | 398 // fine for now. |
404 policy->Set(it.key(), level, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 399 policy->Set(it.key(), level, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
405 std::move(value), nullptr); | 400 std::move(value), nullptr); |
406 } | 401 } |
407 | 402 |
408 return true; | 403 return true; |
409 } | 404 } |
410 | 405 |
411 } // namespace policy | 406 } // namespace policy |
OLD | NEW |