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// Interface for objects providing content setting rules.
6
7#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_
8#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_
9#pragma once
10
11#define NO_RESOURCE_IDENTIFIER ""
12
13#include <string>
14#include <vector>
15
16#include "chrome/browser/content_settings/content_settings_pattern.h"
17#include "chrome/common/content_settings.h"
18
19class GURL;
20
21namespace content_settings {
22
23class DefaultProviderInterface {
24 public:
25  virtual ~DefaultProviderInterface() {}
26
27  // Returns the default content setting this provider has for the given
28  // |content_type|, or CONTENT_SETTING_DEFAULT if nothing be provided for this
29  // type.
30  virtual ContentSetting ProvideDefaultSetting(
31      ContentSettingsType content_type) const = 0;
32
33  // Notifies the provider that the host content settings map would like to
34  // update the default setting for the given |content_type|. The provider may
35  // ignore this.
36  virtual void UpdateDefaultSetting(ContentSettingsType content_type,
37                                    ContentSetting setting) = 0;
38
39  // Resets the state of the provider to the default.
40  virtual void ResetToDefaults() = 0;
41
42  // True if the default setting for the |content_type| is policy managed, i.e.,
43  // there shouldn't be any UI shown to modify this setting.
44  virtual bool DefaultSettingIsManaged(
45      ContentSettingsType content_type) const = 0;
46};
47
48class ProviderInterface {
49 public:
50  typedef std::string ResourceIdentifier;
51
52  struct Rule {
53    Rule() {}
54    Rule(const ContentSettingsPattern& requesting_pattern,
55         const ContentSettingsPattern& embedding_pattern,
56         ContentSetting setting)
57      : requesting_url_pattern(requesting_pattern),
58        embedding_url_pattern(embedding_pattern),
59        content_setting(setting) {}
60
61    ContentSettingsPattern requesting_url_pattern;
62    ContentSettingsPattern embedding_url_pattern;
63    ContentSetting content_setting;
64  };
65
66  typedef std::vector<Rule> Rules;
67
68  virtual ~ProviderInterface() {}
69
70  // Returns true whether the content settings provider manages the
71  // |content_type|.
72  virtual bool ContentSettingsTypeIsManaged(
73      ContentSettingsType content_type) = 0;
74
75  // Returns a single ContentSetting which applies to a given |requesting_url|,
76  // |embedding_url| pair or CONTENT_SETTING_DEFAULT, if no rule applies. For
77  // ContentSettingsTypes that require a resource identifier to be specified,
78  // the |resource_identifier| must be non-empty.
79  //
80  // This may be called on any thread.
81  virtual ContentSetting GetContentSetting(
82      const GURL& requesting_url,
83      const GURL& embedding_url,
84      ContentSettingsType content_type,
85      const ResourceIdentifier& resource_identifier) const = 0;
86
87  // Sets the content setting for a particular |requesting_pattern|,
88  // |embedding_pattern|, |content_type| tuple. For ContentSettingsTypes that
89  // require a resource identifier to be specified, the |resource_identifier|
90  // must be non-empty.
91  //
92  // This should only be called on the UI thread.
93  virtual void SetContentSetting(
94      const ContentSettingsPattern& requesting_url_pattern,
95      const ContentSettingsPattern& embedding_url_pattern,
96      ContentSettingsType content_type,
97      const ResourceIdentifier& resource_identifier,
98      ContentSetting content_setting) = 0;
99
100  // For a given content type, returns all content setting rules with a
101  // non-default setting, mapped to their actual settings.
102  // |content_settings_rules| must be non-NULL. If this provider was created for
103  // the incognito profile, it will only return those settings differing
104  // from the corresponding regular provider. For ContentSettingsTypes that
105  // require a resource identifier to be specified, the |resource_identifier|
106  // must be non-empty.
107  //
108  // This may be called on any thread.
109  virtual void GetAllContentSettingsRules(
110      ContentSettingsType content_type,
111      const ResourceIdentifier& resource_identifier,
112      Rules* content_setting_rules) const = 0;
113
114  // Resets all content settings for the given |content_type| to
115  // CONTENT_SETTING_DEFAULT. For content types that require a resource
116  // identifier all content settings for any resource identifieres of the given
117  // |content_type| will be reset to CONTENT_SETTING_DEFAULT.
118  //
119  // This should only be called on the UI thread.
120  virtual void ClearAllContentSettingsRules(
121      ContentSettingsType content_type) = 0;
122
123  // Resets all content settings to CONTENT_SETTINGS_DEFAULT.
124  //
125  // This should only be called on the UI thread.
126  virtual void ResetToDefaults() = 0;
127};
128
129}  // namespace content_settings
130
131#endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_
132