1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_PREF_STORE_H_ 6#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_PREF_STORE_H_ 7#pragma once 8 9#include <set> 10#include <string> 11 12#include "base/basictypes.h" 13#include "base/memory/scoped_ptr.h" 14#include "base/observer_list.h" 15#include "base/values.h" 16#include "chrome/browser/policy/configuration_policy_provider.h" 17#include "chrome/browser/policy/configuration_policy_store_interface.h" 18#include "chrome/common/pref_store.h" 19 20class Profile; 21 22namespace policy { 23 24class ConfigurationPolicyPrefKeeper; 25 26// An implementation of PrefStore that bridges policy settings as read from a 27// ConfigurationPolicyProvider to preferences. 28class ConfigurationPolicyPrefStore 29 : public PrefStore, 30 public ConfigurationPolicyProvider::Observer { 31 public: 32 // The ConfigurationPolicyPrefStore does not take ownership of the 33 // passed-in |provider|. 34 explicit ConfigurationPolicyPrefStore(ConfigurationPolicyProvider* provider); 35 virtual ~ConfigurationPolicyPrefStore(); 36 37 // PrefStore methods: 38 virtual void AddObserver(PrefStore::Observer* observer); 39 virtual void RemoveObserver(PrefStore::Observer* observer); 40 virtual bool IsInitializationComplete() const; 41 virtual ReadResult GetValue(const std::string& key, 42 const Value** result) const; 43 44 // ConfigurationPolicyProvider::Observer methods: 45 virtual void OnUpdatePolicy(); 46 virtual void OnProviderGoingAway(); 47 48 // Creates a ConfigurationPolicyPrefStore that reads managed platform policy. 49 static ConfigurationPolicyPrefStore* CreateManagedPlatformPolicyPrefStore(); 50 51 // Creates a ConfigurationPolicyPrefStore that reads managed cloud policy. 52 static ConfigurationPolicyPrefStore* CreateManagedCloudPolicyPrefStore( 53 Profile* profile); 54 55 // Creates a ConfigurationPolicyPrefStore that reads recommended platform 56 // policy. 57 static ConfigurationPolicyPrefStore* 58 CreateRecommendedPlatformPolicyPrefStore(); 59 60 // Creates a ConfigurationPolicyPrefStore that reads recommended cloud policy. 61 static ConfigurationPolicyPrefStore* CreateRecommendedCloudPolicyPrefStore( 62 Profile* profile); 63 64 // Returns the default policy definition list for Chrome. 65 static const ConfigurationPolicyProvider::PolicyDefinitionList* 66 GetChromePolicyDefinitionList(); 67 68 private: 69 // Refreshes policy information, rereading policy from the provider and 70 // sending out change notifications as appropriate. 71 void Refresh(); 72 73 static const ConfigurationPolicyProvider::PolicyDefinitionList 74 kPolicyDefinitionList; 75 76 // The policy provider from which policy settings are read. 77 ConfigurationPolicyProvider* provider_; 78 79 // Initialization status as reported by the policy provider the last time we 80 // queried it. 81 bool initialization_complete_; 82 83 // Current policy preferences. 84 scoped_ptr<ConfigurationPolicyPrefKeeper> policy_keeper_; 85 86 ObserverList<PrefStore::Observer, true> observers_; 87 88 ConfigurationPolicyObserverRegistrar registrar_; 89 90 DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyPrefStore); 91}; 92 93} // namespace policy 94 95#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_PREF_STORE_H_ 96