content_settings_notification_provider.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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_NOTIFICATION_PROVIDER_H_
6#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_NOTIFICATION_PROVIDER_H_
7
8#include <string>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/memory/ref_counted.h"
13#include "chrome/browser/content_settings/content_settings_provider.h"
14#include "chrome/browser/prefs/pref_change_registrar.h"
15#include "content/common/notification_observer.h"
16#include "content/common/notification_registrar.h"
17
18class GURL;
19class PrefService;
20class Profile;
21
22namespace content_settings {
23
24class NotificationProvider : public ProviderInterface,
25                             public NotificationObserver {
26 public:
27  static void RegisterUserPrefs(PrefService* user_prefs);
28
29  static ContentSettingsPattern ToContentSettingsPattern(const GURL& origin);
30
31  static GURL ToGURL(const ContentSettingsPattern& pattern);
32
33  explicit NotificationProvider(Profile* profile);
34
35  virtual ~NotificationProvider();
36
37  // ProviderInterface implementation
38  virtual bool ContentSettingsTypeIsManaged(
39      ContentSettingsType content_type);
40
41  virtual ContentSetting GetContentSetting(
42      const GURL& requesting_url,
43      const GURL& embedding_url,
44      ContentSettingsType content_type,
45      const ResourceIdentifier& resource_identifier) const;
46
47  virtual void SetContentSetting(
48      const ContentSettingsPattern& requesting_url_pattern,
49      const ContentSettingsPattern& embedding_url_pattern,
50      ContentSettingsType content_type,
51      const ResourceIdentifier& resource_identifier,
52      ContentSetting content_setting);
53
54  virtual void GetAllContentSettingsRules(
55      ContentSettingsType content_type,
56      const ResourceIdentifier& resource_identifier,
57      Rules* content_setting_rules) const;
58
59  virtual void ClearAllContentSettingsRules(
60      ContentSettingsType content_type);
61
62  virtual void ResetToDefaults();
63
64  // NotificationObserver implementation.
65  virtual void Observe(NotificationType type,
66                       const NotificationSource& source,
67                       const NotificationDetails& details);
68 private:
69  void StartObserving();
70  void StopObserving();
71
72  void OnPrefsChanged(const std::string& pref_name);
73
74  // Notifies the observers when permissions settings change.
75  void NotifySettingsChange();
76
77  // Returns all origins that explicitly have been allowed.
78  std::vector<GURL> GetAllowedOrigins() const;
79
80  // Returns all origins that explicitly have been denied.
81  std::vector<GURL> GetBlockedOrigins() const;
82
83  // Methods to setup and modify permission preferences.
84  void GrantPermission(const GURL& origin);
85  void DenyPermission(const GURL& origin);
86
87  void PersistPermissionChange(const GURL& origin, bool is_allowed);
88
89  ContentSetting GetContentSetting(const GURL& origin) const;
90
91  // Removes an origin from the "explicitly allowed" set.
92  void ResetAllowedOrigin(const GURL& origin);
93
94  // Removes an origin from the "explicitly denied" set.
95  void ResetBlockedOrigin(const GURL& origin);
96
97  // Clears the sets of explicitly allowed and denied origins.
98  void ResetAllOrigins();
99
100  Profile* profile_;
101
102  PrefChangeRegistrar prefs_registrar_;
103  NotificationRegistrar notification_registrar_;
104
105  DISALLOW_COPY_AND_ASSIGN(NotificationProvider);
106};
107
108}  // namespace content_settings
109
110#endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_NOTIFICATION_PROVIDER_H_
111