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_CONTENT_SETTINGS_CONTENT_SETTINGS_POLICY_PROVIDER_H_ 6#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_POLICY_PROVIDER_H_ 7 8// A content settings provider that takes its settings out of policies. 9 10#include <vector> 11 12#include "base/basictypes.h" 13#include "base/prefs/pref_change_registrar.h" 14#include "base/synchronization/lock.h" 15#include "components/content_settings/core/browser/content_settings_observable_provider.h" 16#include "components/content_settings/core/browser/content_settings_origin_identifier_value_map.h" 17 18class PrefService; 19 20namespace user_prefs { 21class PrefRegistrySyncable; 22} 23 24namespace content_settings { 25 26// PolicyProvider that provides managed content-settings. 27class PolicyProvider : public ObservableProvider { 28 public: 29 explicit PolicyProvider(PrefService* prefs); 30 virtual ~PolicyProvider(); 31 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 32 33 // ProviderInterface implementations. 34 virtual RuleIterator* GetRuleIterator( 35 ContentSettingsType content_type, 36 const ResourceIdentifier& resource_identifier, 37 bool incognito) const OVERRIDE; 38 39 virtual bool SetWebsiteSetting( 40 const ContentSettingsPattern& primary_pattern, 41 const ContentSettingsPattern& secondary_pattern, 42 ContentSettingsType content_type, 43 const ResourceIdentifier& resource_identifier, 44 base::Value* value) OVERRIDE; 45 46 virtual void ClearAllContentSettingsRules( 47 ContentSettingsType content_type) OVERRIDE; 48 49 virtual void ShutdownOnUIThread() OVERRIDE; 50 51 private: 52 // Reads the policy managed default settings. 53 void ReadManagedDefaultSettings(); 54 55 // Callback for preference changes. 56 void OnPreferenceChanged(const std::string& pref_name); 57 58 // Reads the policy controlled default settings for a specific content type. 59 void UpdateManagedDefaultSetting(ContentSettingsType content_type); 60 61 void ReadManagedContentSettings(bool overwrite); 62 63 void GetContentSettingsFromPreferences(OriginIdentifierValueMap* rules); 64 65 void GetAutoSelectCertificateSettingsFromPreferences( 66 OriginIdentifierValueMap* value_map); 67 68 void ReadManagedContentSettingsTypes(ContentSettingsType content_type); 69 70 OriginIdentifierValueMap value_map_; 71 72 PrefService* prefs_; 73 74 PrefChangeRegistrar pref_change_registrar_; 75 76 // Used around accesses to the |value_map_| object to guarantee 77 // thread safety. 78 mutable base::Lock lock_; 79 80 DISALLOW_COPY_AND_ASSIGN(PolicyProvider); 81}; 82 83} // namespace content_settings 84 85#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_POLICY_PROVIDER_H_ 86