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 #ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_BASE_PROVIDER_H_ 6 #define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_BASE_PROVIDER_H_ 7 #pragma once 8 9 #include <map> 10 #include <string> 11 #include <utility> 12 13 #include "base/synchronization/lock.h" 14 #include "chrome/browser/content_settings/content_settings_provider.h" 15 16 namespace content_settings { 17 18 typedef std::pair<ContentSettingsType, std::string> 19 ContentSettingsTypeResourceIdentifierPair; 20 typedef std::map<ContentSettingsTypeResourceIdentifierPair, ContentSetting> 21 ResourceContentSettings; 22 23 struct ExtendedContentSettings { 24 ExtendedContentSettings(); 25 ExtendedContentSettings(const ExtendedContentSettings& rhs); 26 ~ExtendedContentSettings(); 27 28 ContentSettings content_settings; 29 ResourceContentSettings content_settings_for_resources; 30 }; 31 32 // Map for ContentSettings. 33 typedef std::map<std::string, ExtendedContentSettings> HostContentSettings; 34 35 // BaseProvider is the abstract base class for all content-settings-provider 36 // classes. 37 class BaseProvider : public ProviderInterface { 38 public: 39 // Maps CONTENT_SETTING_ASK for the CONTENT_SETTINGS_TYPE_PLUGINS to 40 // CONTENT_SETTING_BLOCK if click-to-play is not enabled. 41 static ContentSetting ClickToPlayFixup(ContentSettingsType content_type, 42 ContentSetting setting); 43 44 explicit BaseProvider(bool is_otr); 45 virtual ~BaseProvider(); 46 47 48 // Initializes the Provider. 49 virtual void Init() = 0; 50 51 // ProviderInterface Implementation 52 virtual bool ContentSettingsTypeIsManaged( 53 ContentSettingsType content_type) = 0; 54 55 virtual ContentSetting GetContentSetting( 56 const GURL& requesting_url, 57 const GURL& embedding_url, 58 ContentSettingsType content_type, 59 const ResourceIdentifier& resource_identifier) const; 60 61 virtual void SetContentSetting( 62 const ContentSettingsPattern& requesting_pattern, 63 const ContentSettingsPattern& embedding_pattern, 64 ContentSettingsType content_type, 65 const ResourceIdentifier& resource_identifier, 66 ContentSetting content_setting) = 0; 67 68 virtual void GetAllContentSettingsRules( 69 ContentSettingsType content_type, 70 const ResourceIdentifier& resource_identifier, 71 Rules* content_setting_rules) const; 72 73 virtual void ClearAllContentSettingsRules( 74 ContentSettingsType content_type) = 0; 75 76 virtual void ResetToDefaults() = 0; 77 78 protected: 79 // Returns true if the |content_type| requires a resource identifier. 80 bool RequiresResourceIdentifier( 81 ContentSettingsType content_type) const; 82 83 // Returns true if the passed |settings| object contains only 84 // CONTENT_SETTING_DEFAULT values. 85 bool AllDefault(const ExtendedContentSettings& settings) const; 86 87 void UpdateContentSettingsMap( 88 const ContentSettingsPattern& requesting_pattern, 89 const ContentSettingsPattern& embedding_pattern, 90 ContentSettingsType content_type, 91 const ResourceIdentifier& resource_identifier, 92 ContentSetting content_setting); 93 94 // TODO(markusheintz): LEGACY method. Will be removed in a future re-factoring 95 // step. 96 ContentSettings GetNonDefaultContentSettings(const GURL& url) const; 97 98 // Accessors 99 HostContentSettings* host_content_settings() { 100 return &host_content_settings_; 101 } 102 103 HostContentSettings* incognito_settings() { 104 return &incognito_settings_; 105 } 106 107 base::Lock& lock() const { 108 return lock_; 109 } 110 111 bool is_incognito() const { 112 return is_incognito_; 113 } 114 115 private: 116 // Copies of the pref data, so that we can read it on threads other than the 117 // UI thread. 118 HostContentSettings host_content_settings_; 119 120 // Whether this settings map is for an OTR session. 121 bool is_incognito_; 122 123 // Differences to the preference-stored host content settings for 124 // incognito settings. 125 HostContentSettings incognito_settings_; 126 127 // Used around accesses to the content_settings_ object to guarantee 128 // thread safety. 129 mutable base::Lock lock_; 130 }; 131 132 } // namespace content_settings 133 134 #endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_BASE_PROVIDER_H_ 135