// 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.

#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MOCK_PROVIDER_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MOCK_PROVIDER_H_
#pragma once

#include "base/basictypes.h"
#include "chrome/browser/content_settings/content_settings_provider.h"

namespace content_settings {

// The class MockDefaultProvider is a mock for a default content settings
// provider.
class MockDefaultProvider : public DefaultProviderInterface {
 public:
  // Create a content settings provider that provides a given setting for a
  // given type.
  MockDefaultProvider(ContentSettingsType content_type,
                              ContentSetting setting,
                              bool is_managed,
                              bool can_override);
  virtual ~MockDefaultProvider();

  // DefaultProviderInterface implementation.
  virtual ContentSetting ProvideDefaultSetting(
      ContentSettingsType content_type) const;
  virtual void UpdateDefaultSetting(ContentSettingsType content_type,
                                    ContentSetting setting);
  virtual void ResetToDefaults();
  virtual bool DefaultSettingIsManaged(ContentSettingsType content_type) const;

 private:
  ContentSettingsType content_type_;
  ContentSetting setting_;
  bool is_managed_;
  bool can_override_;

  DISALLOW_COPY_AND_ASSIGN(MockDefaultProvider);
};

// The class MockProvider is a mock for a non default content settings provider.
class MockProvider : public ProviderInterface {
 public:
  MockProvider();
  MockProvider(ContentSettingsPattern requesting_url_pattern,
               ContentSettingsPattern embedding_url_pattern,
               ContentSettingsType content_type,
               ResourceIdentifier resource_identifier,
               ContentSetting setting,
               bool read_only,
               bool is_managed);
  virtual ~MockProvider();

  virtual bool ContentSettingsTypeIsManaged(ContentSettingsType type);

  // ProviderInterface implementation
  virtual ContentSetting GetContentSetting(
      const GURL& requesting_url,
      const GURL& embedding_url,
      ContentSettingsType content_type,
      const ResourceIdentifier& resource_identifier) const;

  // The MockProvider is only able to store one content setting. So every time
  // this method is called the previously set content settings is overwritten.
  virtual void SetContentSetting(
      const ContentSettingsPattern& requesting_url_pattern,
      const ContentSettingsPattern& embedding_url_pattern,
      ContentSettingsType content_type,
      const ResourceIdentifier& resource_identifier,
      ContentSetting content_setting);

  virtual void GetAllContentSettingsRules(
      ContentSettingsType content_type,
      const ResourceIdentifier& resource_identifier,
      Rules* content_setting_rules) const {}

  virtual void ClearAllContentSettingsRules(
      ContentSettingsType content_type) {}

  virtual void ResetToDefaults() {}

  // Accessors
  void set_requesting_url_pattern(ContentSettingsPattern pattern) {
    requesting_url_pattern_ = pattern;
  }

  ContentSettingsPattern requesting_url_pattern() const {
    return requesting_url_pattern_;
  }

  void set_embedding_url_pattern(ContentSettingsPattern pattern) {
    embedding_url_pattern_ = pattern;
  }

  ContentSettingsPattern embedding_url_pattern() const {
    return embedding_url_pattern_;
  }

  void set_content_type(ContentSettingsType content_type) {
    content_type_ = content_type;
  }

  ContentSettingsType content_type() const {
    return content_type_;
  }

  void set_resource_identifier(ResourceIdentifier resource_identifier) {
    resource_identifier_ = resource_identifier;
  }

  ResourceIdentifier resource_identifier() const {
    return resource_identifier_;
  }

  void set_setting(ContentSetting setting) {
    setting_ = setting;
  }

  ContentSetting setting() const {
    return setting_;
  }

  void set_read_only(bool read_only) {
    read_only_ = read_only;
  }

  bool read_only() const {
    return read_only_;
  }

  void set_is_managed(bool is_managed) {
    is_managed_ = is_managed;
  }

  bool is_managed() const {
    return is_managed_;
  }

 private:
  ContentSettingsPattern requesting_url_pattern_;
  ContentSettingsPattern embedding_url_pattern_;
  ContentSettingsType content_type_;
  ResourceIdentifier resource_identifier_;
  ContentSetting setting_;
  bool read_only_;
  bool is_managed_;

  DISALLOW_COPY_AND_ASSIGN(MockProvider);
};

}  // namespace content_settings

#endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_MOCK_PROVIDER_H_