Home | History | Annotate | Download | only in content_settings
      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 
     19 class GURL;
     20 
     21 namespace content_settings {
     22 
     23 class 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 
     48 class 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