Home | History | Annotate | Download | only in cloud
      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 
     12 CloudPolicyStore::Observer::~Observer() {}
     13 
     14 CloudPolicyStore::CloudPolicyStore()
     15     : status_(STATUS_OK),
     16       validation_status_(CloudPolicyValidatorBase::VALIDATION_OK),
     17       invalidation_version_(0),
     18       is_initialized_(false) {}
     19 
     20 CloudPolicyStore::~CloudPolicyStore() {
     21   DCHECK(!external_data_manager_);
     22 }
     23 
     24 void CloudPolicyStore::Store(
     25     const enterprise_management::PolicyFetchResponse& policy,
     26     int64 invalidation_version) {
     27   invalidation_version_ = invalidation_version;
     28   Store(policy);
     29 }
     30 
     31 void CloudPolicyStore::AddObserver(CloudPolicyStore::Observer* observer) {
     32   observers_.AddObserver(observer);
     33 }
     34 
     35 void CloudPolicyStore::RemoveObserver(CloudPolicyStore::Observer* observer) {
     36   observers_.RemoveObserver(observer);
     37 }
     38 
     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 
     50 void CloudPolicyStore::NotifyStoreError() {
     51   is_initialized_ = true;
     52   FOR_EACH_OBSERVER(Observer, observers_, OnStoreError(this));
     53 }
     54 
     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 
     63 void CloudPolicyStore::SetPolicyMapForTesting(const PolicyMap& policy_map) {
     64   policy_map_.CopyFrom(policy_map);
     65   NotifyStoreLoaded();
     66 }
     67 
     68 }  // namespace policy
     69