// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Interface for objects providing content setting rules.
#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_
#pragma once
#define NO_RESOURCE_IDENTIFIER ""
#include <string>
#include <vector>
#include "chrome/browser/content_settings/content_settings_pattern.h"
#include "chrome/common/content_settings.h"
class GURL;
namespace content_settings {
class DefaultProviderInterface {
public:
virtual ~DefaultProviderInterface() {}
// Returns the default content setting this provider has for the given
// |content_type|, or CONTENT_SETTING_DEFAULT if nothing be provided for this
// type.
virtual ContentSetting ProvideDefaultSetting(
ContentSettingsType content_type) const = 0;
// Notifies the provider that the host content settings map would like to
// update the default setting for the given |content_type|. The provider may
// ignore this.
virtual void UpdateDefaultSetting(ContentSettingsType content_type,
ContentSetting setting) = 0;
// Resets the state of the provider to the default.
virtual void ResetToDefaults() = 0;
// True if the default setting for the |content_type| is policy managed, i.e.,
// there shouldn't be any UI shown to modify this setting.
virtual bool DefaultSettingIsManaged(
ContentSettingsType content_type) const = 0;
};
class ProviderInterface {
public:
typedef std::string ResourceIdentifier;
struct Rule {
Rule() {}
Rule(const ContentSettingsPattern& requesting_pattern,
const ContentSettingsPattern& embedding_pattern,
ContentSetting setting)
: requesting_url_pattern(requesting_pattern),
embedding_url_pattern(embedding_pattern),
content_setting(setting) {}
ContentSettingsPattern requesting_url_pattern;
ContentSettingsPattern embedding_url_pattern;
ContentSetting content_setting;
};
typedef std::vector<Rule> Rules;
virtual ~ProviderInterface() {}
// Returns true whether the content settings provider manages the
// |content_type|.
virtual bool ContentSettingsTypeIsManaged(
ContentSettingsType content_type) = 0;
// Returns a single ContentSetting which applies to a given |requesting_url|,
// |embedding_url| pair or CONTENT_SETTING_DEFAULT, if no rule applies. For
// ContentSettingsTypes that require a resource identifier to be specified,
// the |resource_identifier| must be non-empty.
//
// This may be called on any thread.
virtual ContentSetting GetContentSetting(
const GURL& requesting_url,
const GURL& embedding_url,
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier) const = 0;
// Sets the content setting for a particular |requesting_pattern|,
// |embedding_pattern|, |content_type| tuple. For ContentSettingsTypes that
// require a resource identifier to be specified, the |resource_identifier|
// must be non-empty.
//
// This should only be called on the UI thread.
virtual void SetContentSetting(
const ContentSettingsPattern& requesting_url_pattern,
const ContentSettingsPattern& embedding_url_pattern,
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
ContentSetting content_setting) = 0;
// For a given content type, returns all content setting rules with a
// non-default setting, mapped to their actual settings.
// |content_settings_rules| must be non-NULL. If this provider was created for
// the incognito profile, it will only return those settings differing
// from the corresponding regular provider. For ContentSettingsTypes that
// require a resource identifier to be specified, the |resource_identifier|
// must be non-empty.
//
// This may be called on any thread.
virtual void GetAllContentSettingsRules(
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
Rules* content_setting_rules) const = 0;
// Resets all content settings for the given |content_type| to
// CONTENT_SETTING_DEFAULT. For content types that require a resource
// identifier all content settings for any resource identifieres of the given
// |content_type| will be reset to CONTENT_SETTING_DEFAULT.
//
// This should only be called on the UI thread.
virtual void ClearAllContentSettingsRules(
ContentSettingsType content_type) = 0;
// Resets all content settings to CONTENT_SETTINGS_DEFAULT.
//
// This should only be called on the UI thread.
virtual void ResetToDefaults() = 0;
};
} // namespace content_settings
#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_PROVIDER_H_