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