15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_store.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "base/logging.h" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_external_data_manager.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPolicyStore::Observer::~Observer() {} 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPolicyStore::CloudPolicyStore() 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : status_(STATUS_OK), 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) validation_status_(CloudPolicyValidatorBase::VALIDATION_OK), 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) invalidation_version_(0), 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) is_initialized_(false) {} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)CloudPolicyStore::~CloudPolicyStore() { 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(!external_data_manager_); 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void CloudPolicyStore::Store( 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const enterprise_management::PolicyFetchResponse& policy, 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int64 invalidation_version) { 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) invalidation_version_ = invalidation_version; 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Store(policy); 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CloudPolicyStore::AddObserver(CloudPolicyStore::Observer* observer) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(observer); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CloudPolicyStore::RemoveObserver(CloudPolicyStore::Observer* observer) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.RemoveObserver(observer); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CloudPolicyStore::NotifyStoreLoaded() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_initialized_ = true; 413240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // The |external_data_manager_| must be notified first so that when other 423240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // observers are informed about the changed policies and try to fetch external 433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // data referenced by these, the |external_data_manager_| has the required 443240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // metadata already. 453240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (external_data_manager_) 463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch external_data_manager_->OnPolicyStoreLoaded(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnStoreLoaded(this)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CloudPolicyStore::NotifyStoreError() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_initialized_ = true; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FOR_EACH_OBSERVER(Observer, observers_, OnStoreError(this)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochvoid CloudPolicyStore::SetExternalDataManager( 563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::WeakPtr<CloudExternalDataManager> external_data_manager) { 573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch DCHECK(!external_data_manager_); 583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch external_data_manager_ = external_data_manager; 593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (is_initialized_) 603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch external_data_manager_->OnPolicyStoreLoaded(); 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void CloudPolicyStore::SetPolicyMapForTesting(const PolicyMap& policy_map) { 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) policy_map_.CopyFrom(policy_map); 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NotifyStoreLoaded(); 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace policy 69