configuration_policy_pref_store.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 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/observer_list.h"
14#include "base/scoped_ptr.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, Value** result) const;
42
43  // ConfigurationPolicyProvider::Observer methods:
44  virtual void OnUpdatePolicy();
45
46  // Creates a ConfigurationPolicyPrefStore that reads managed platform policy.
47  static ConfigurationPolicyPrefStore* CreateManagedPlatformPolicyPrefStore();
48
49  // Creates a ConfigurationPolicyPrefStore that supplies policy from
50  // the device management server.
51  static ConfigurationPolicyPrefStore* CreateDeviceManagementPolicyPrefStore(
52      Profile* profile);
53
54  // Creates a ConfigurationPolicyPrefStore that reads recommended policy.
55  static ConfigurationPolicyPrefStore* CreateRecommendedPolicyPrefStore();
56
57  // Returns the default policy definition list for Chrome.
58  static const ConfigurationPolicyProvider::PolicyDefinitionList*
59      GetChromePolicyDefinitionList();
60
61 private:
62  // Refreshes policy information, rereading policy from the provider and
63  // sending out change notifications as appropriate.
64  void Refresh();
65
66  static const ConfigurationPolicyProvider::PolicyDefinitionList
67      kPolicyDefinitionList;
68
69  // The policy provider from which policy settings are read.
70  ConfigurationPolicyProvider* provider_;
71
72  // Initialization status as reported by the policy provider the last time we
73  // queried it.
74  bool initialization_complete_;
75
76  // Current policy preferences.
77  scoped_ptr<ConfigurationPolicyPrefKeeper> policy_keeper_;
78
79  ObserverList<PrefStore::Observer, true> observers_;
80
81  ConfigurationPolicyObserverRegistrar registrar_;
82
83  DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyPrefStore);
84};
85
86}  // namespace policy
87
88#endif  // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_PREF_STORE_H_
89