| Index: chrome/browser/content_settings/content_settings_base_provider.h
 | 
| diff --git a/chrome/browser/content_settings/content_settings_base_provider.h b/chrome/browser/content_settings/content_settings_base_provider.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..fa36a2e827b477103ca20e0ff132a0a6c9f1e47b
 | 
| --- /dev/null
 | 
| +++ b/chrome/browser/content_settings/content_settings_base_provider.h
 | 
| @@ -0,0 +1,124 @@
 | 
| +// 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_BASE_PROVIDER_H_
 | 
| +#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_BASE_PROVIDER_H_
 | 
| +#pragma once
 | 
| +
 | 
| +#include <map>
 | 
| +#include <string>
 | 
| +#include <utility>
 | 
| +
 | 
| +#include "base/synchronization/lock.h"
 | 
| +#include "chrome/browser/content_settings/content_settings_provider.h"
 | 
| +
 | 
| +namespace content_settings {
 | 
| +
 | 
| +typedef std::pair<ContentSettingsType, std::string>
 | 
| +    ContentSettingsTypeResourceIdentifierPair;
 | 
| +typedef std::map<ContentSettingsTypeResourceIdentifierPair, ContentSetting>
 | 
| +    ResourceContentSettings;
 | 
| +
 | 
| +struct ExtendedContentSettings {
 | 
| +  ContentSettings content_settings;
 | 
| +  ResourceContentSettings content_settings_for_resources;
 | 
| +};
 | 
| +
 | 
| +// Map for ContentSettings.
 | 
| +typedef std::map<std::string, ExtendedContentSettings> HostContentSettings;
 | 
| +
 | 
| +// BaseProvider is the abstract base class for all content-settings-provider
 | 
| +// classes.
 | 
| +class BaseProvider : public ProviderInterface {
 | 
| + public:
 | 
| +  // Maps CONTENT_SETTING_ASK for the CONTENT_SETTINGS_TYPE_PLUGINS to
 | 
| +  // CONTENT_SETTING_BLOCK if click-to-play is not enabled.
 | 
| +  static ContentSetting ClickToPlayFixup(ContentSettingsType content_type,
 | 
| +                                         ContentSetting setting);
 | 
| +
 | 
| +  explicit BaseProvider(bool is_otr)
 | 
| +      : is_off_the_record_(is_otr) {
 | 
| +  }
 | 
| +  virtual ~BaseProvider() {}
 | 
| +
 | 
| +  // Initializes the Provider.
 | 
| +  virtual void Init() = 0;
 | 
| +
 | 
| +  // ProviderInterface Implementation
 | 
| +  virtual bool ContentSettingsTypeIsManaged(
 | 
| +      ContentSettingsType content_type) = 0;
 | 
| +
 | 
| +  virtual ContentSetting GetContentSetting(
 | 
| +      const GURL& requesting_url,
 | 
| +      const GURL& embedding_url,
 | 
| +      ContentSettingsType content_type,
 | 
| +      const ResourceIdentifier& resource_identifier) const;
 | 
| +
 | 
| +  virtual void SetContentSetting(
 | 
| +      const ContentSettingsPattern& requesting_pattern,
 | 
| +      const ContentSettingsPattern& embedding_pattern,
 | 
| +      ContentSettingsType content_type,
 | 
| +      const ResourceIdentifier& resource_identifier,
 | 
| +      ContentSetting content_setting) = 0;
 | 
| +
 | 
| +  virtual void GetAllContentSettingsRules(
 | 
| +      ContentSettingsType content_type,
 | 
| +      const ResourceIdentifier& resource_identifier,
 | 
| +      Rules* content_setting_rules) const;
 | 
| +
 | 
| +  virtual void ClearAllContentSettingsRules(
 | 
| +      ContentSettingsType content_type) = 0;
 | 
| +
 | 
| +  virtual void ResetToDefaults() = 0;
 | 
| +
 | 
| + protected:
 | 
| +  // Returns true if the |content_type| requires a resource identifier.
 | 
| +  bool RequiresResourceIdentifier(
 | 
| +      ContentSettingsType content_type) const;
 | 
| +
 | 
| +  // Returns true if the passed |settings| object contains only
 | 
| +  // CONTENT_SETTING_DEFAULT values.
 | 
| +  bool AllDefault(const ExtendedContentSettings& settings) const;
 | 
| +
 | 
| +  // TODO(markusheintz): LEGACY method. Will be removed in a future re-factoring
 | 
| +  // step.
 | 
| +  ContentSettings GetNonDefaultContentSettings(const GURL& url) const;
 | 
| +
 | 
| +  // Accessors
 | 
| +  HostContentSettings* host_content_settings() {
 | 
| +    return &host_content_settings_;
 | 
| +  }
 | 
| +
 | 
| +  HostContentSettings* off_the_record_settings() {
 | 
| +    return &off_the_record_settings_;
 | 
| +  }
 | 
| +
 | 
| +  base::Lock& lock() const {
 | 
| +    return lock_;
 | 
| +  }
 | 
| +
 | 
| +  bool is_off_the_record() const {
 | 
| +    return is_off_the_record_;
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  // Copies of the pref data, so that we can read it on threads other than the
 | 
| +  // UI thread.
 | 
| +  HostContentSettings host_content_settings_;
 | 
| +
 | 
| +  // Whether this settings map is for an OTR session.
 | 
| +  bool is_off_the_record_;
 | 
| +
 | 
| +  // Differences to the preference-stored host content settings for
 | 
| +  // off-the-record settings.
 | 
| +  HostContentSettings off_the_record_settings_;
 | 
| +
 | 
| +  // Used around accesses to the content_settings_ object to guarantee
 | 
| +  // thread safety.
 | 
| +  mutable base::Lock lock_;
 | 
| +};
 | 
| +
 | 
| +}  // namespace content_settings
 | 
| +
 | 
| +#endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_BASE_PROVIDER_H_
 | 
| 
 |