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
3 // found in the LICENSE file.
4
5 #include "components/policy/core/common/cloud/cloud_policy_store.h"
6
7 #include "base/logging.h"
8 #include "components/policy/core/common/cloud/cloud_external_data_manager.h"
9
10 namespace policy {
11
~Observer()12 CloudPolicyStore::Observer::~Observer() {}
13
CloudPolicyStore()14 CloudPolicyStore::CloudPolicyStore()
15 : status_(STATUS_OK),
16 validation_status_(CloudPolicyValidatorBase::VALIDATION_OK),
17 invalidation_version_(0),
18 is_initialized_(false) {}
19
~CloudPolicyStore()20 CloudPolicyStore::~CloudPolicyStore() {
21 DCHECK(!external_data_manager_);
22 }
23
Store(const enterprise_management::PolicyFetchResponse & policy,int64 invalidation_version)24 void CloudPolicyStore::Store(
25 const enterprise_management::PolicyFetchResponse& policy,
26 int64 invalidation_version) {
27 invalidation_version_ = invalidation_version;
28 Store(policy);
29 }
30
AddObserver(CloudPolicyStore::Observer * observer)31 void CloudPolicyStore::AddObserver(CloudPolicyStore::Observer* observer) {
32 observers_.AddObserver(observer);
33 }
34
RemoveObserver(CloudPolicyStore::Observer * observer)35 void CloudPolicyStore::RemoveObserver(CloudPolicyStore::Observer* observer) {
36 observers_.RemoveObserver(observer);
37 }
38
NotifyStoreLoaded()39 void CloudPolicyStore::NotifyStoreLoaded() {
40 is_initialized_ = true;
41 // The |external_data_manager_| must be notified first so that when other
42 // observers are informed about the changed policies and try to fetch external
43 // data referenced by these, the |external_data_manager_| has the required
44 // metadata already.
45 if (external_data_manager_)
46 external_data_manager_->OnPolicyStoreLoaded();
47 FOR_EACH_OBSERVER(Observer, observers_, OnStoreLoaded(this));
48 }
49
NotifyStoreError()50 void CloudPolicyStore::NotifyStoreError() {
51 is_initialized_ = true;
52 FOR_EACH_OBSERVER(Observer, observers_, OnStoreError(this));
53 }
54
SetExternalDataManager(base::WeakPtr<CloudExternalDataManager> external_data_manager)55 void CloudPolicyStore::SetExternalDataManager(
56 base::WeakPtr<CloudExternalDataManager> external_data_manager) {
57 DCHECK(!external_data_manager_);
58 external_data_manager_ = external_data_manager;
59 if (is_initialized_)
60 external_data_manager_->OnPolicyStoreLoaded();
61 }
62
SetPolicyMapForTesting(const PolicyMap & policy_map)63 void CloudPolicyStore::SetPolicyMapForTesting(const PolicyMap& policy_map) {
64 policy_map_.CopyFrom(policy_map);
65 NotifyStoreLoaded();
66 }
67
68 } // namespace policy
69