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