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)#ifndef COMPONENTS_POLICY_CORE_BROWSER_CONFIGURATION_POLICY_PREF_STORE_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define COMPONENTS_POLICY_CORE_BROWSER_CONFIGURATION_POLICY_PREF_STORE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_store.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_types.h"
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/policy_export.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefValueMap;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochclass ConfigurationPolicyHandlerList;
25c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An implementation of PrefStore that bridges policy settings as read from the
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PolicyService to preferences. Converts POLICY_DOMAIN_CHROME policies a given
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PolicyLevel to their corresponding preferences.
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class POLICY_EXPORT ConfigurationPolicyPrefStore
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public PrefStore,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public PolicyService::Observer {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
33c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // Does not take ownership of |service| nor |handler_list|, which must outlive
34c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // the store. Only policies of the given |level| will be mapped.
35c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  ConfigurationPolicyPrefStore(
36c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      PolicyService* service,
37c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      const ConfigurationPolicyHandlerList* handler_list,
38c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch      PolicyLevel level);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PrefStore methods:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual bool HasObservers() const OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsInitializationComplete() const OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetValue(const std::string& key,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const base::Value** result) const OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PolicyService::Observer methods:
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnPolicyUpdated(const PolicyNamespace& ns,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const PolicyMap& previous,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const PolicyMap& current) OVERRIDE;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnPolicyServiceInitialized(PolicyDomain domain) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ConfigurationPolicyPrefStore();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Refreshes policy information, rereading policy from the policy service and
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sending out change notifications as appropriate.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Refresh();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a new PrefValueMap containing the preference values that correspond
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the policies currently provided by the policy service.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefValueMap* CreatePreferencesFromPolicies();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The PolicyService from which policy settings are read.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyService* policy_service_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
68c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // The policy handlers used to convert policies into their corresponding
69c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  // preferences.
70c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  const ConfigurationPolicyHandlerList* handler_list_;
71c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The policy level that this PrefStore uses.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyLevel level_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Current policy preferences.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PrefValueMap> prefs_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<PrefStore::Observer, true> observers_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyPrefStore);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // COMPONENTS_POLICY_CORE_BROWSER_CONFIGURATION_POLICY_PREF_STORE_H_
86