blob: 2c6dca7d4cd0d0d148466b59c339c85230b66200 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/policy/cloud/cloud_policy_store.h"
#include "base/logging.h"
#include "chrome/browser/policy/cloud/cloud_external_data_manager.h"
namespace policy {
CloudPolicyStore::Observer::~Observer() {}
CloudPolicyStore::CloudPolicyStore()
: status_(STATUS_OK),
validation_status_(CloudPolicyValidatorBase::VALIDATION_OK),
invalidation_version_(0),
is_initialized_(false) {}
CloudPolicyStore::~CloudPolicyStore() {
DCHECK(!external_data_manager_);
}
void CloudPolicyStore::Store(
const enterprise_management::PolicyFetchResponse& policy,
int64 invalidation_version) {
invalidation_version_ = invalidation_version;
Store(policy);
}
void CloudPolicyStore::AddObserver(CloudPolicyStore::Observer* observer) {
observers_.AddObserver(observer);
}
void CloudPolicyStore::RemoveObserver(CloudPolicyStore::Observer* observer) {
observers_.RemoveObserver(observer);
}
void CloudPolicyStore::NotifyStoreLoaded() {
is_initialized_ = true;
// The |external_data_manager_| must be notified first so that when other
// observers are informed about the changed policies and try to fetch external
// data referenced by these, the |external_data_manager_| has the required
// metadata already.
if (external_data_manager_)
external_data_manager_->OnPolicyStoreLoaded();
FOR_EACH_OBSERVER(Observer, observers_, OnStoreLoaded(this));
}
void CloudPolicyStore::NotifyStoreError() {
is_initialized_ = true;
FOR_EACH_OBSERVER(Observer, observers_, OnStoreError(this));
}
void CloudPolicyStore::SetExternalDataManager(
base::WeakPtr<CloudExternalDataManager> external_data_manager) {
DCHECK(!external_data_manager_);
external_data_manager_ = external_data_manager;
if (is_initialized_)
external_data_manager_->OnPolicyStoreLoaded();
}
void CloudPolicyStore::SetPolicyMapForTesting(const PolicyMap& policy_map) {
policy_map_.CopyFrom(policy_map);
NotifyStoreLoaded();
}
} // namespace policy