Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: chrome/browser/content_settings/host_content_settings_map.cc

Issue 8804016: Cleanup content settings code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/content_settings/host_content_settings_map.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/content_settings/host_content_settings_map.h" 5 #include "chrome/browser/content_settings/host_content_settings_map.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "chrome/browser/content_settings/content_settings_default_provider.h" 14 #include "chrome/browser/content_settings/content_settings_default_provider.h"
15 #include "chrome/browser/content_settings/content_settings_details.h" 15 #include "chrome/browser/content_settings/content_settings_details.h"
16 #include "chrome/browser/content_settings/content_settings_extension_provider.h" 16 #include "chrome/browser/content_settings/content_settings_extension_provider.h"
17 #include "chrome/browser/content_settings/content_settings_observable_provider.h " 17 #include "chrome/browser/content_settings/content_settings_observable_provider.h "
18 #include "chrome/browser/content_settings/content_settings_policy_provider.h" 18 #include "chrome/browser/content_settings/content_settings_policy_provider.h"
19 #include "chrome/browser/content_settings/content_settings_pref_provider.h" 19 #include "chrome/browser/content_settings/content_settings_pref_provider.h"
20 #include "chrome/browser/content_settings/content_settings_provider.h" 20 #include "chrome/browser/content_settings/content_settings_provider.h"
21 #include "chrome/browser/content_settings/content_settings_rule.h" 21 #include "chrome/browser/content_settings/content_settings_rule.h"
22 #include "chrome/browser/content_settings/content_settings_utils.h"
marja 2011/12/06 09:47:12 I don't think you should remove this include, this
markusheintz_ 2011/12/06 16:29:59 Done.
23 #include "chrome/browser/extensions/extension_service.h" 22 #include "chrome/browser/extensions/extension_service.h"
24 #include "chrome/browser/prefs/pref_service.h" 23 #include "chrome/browser/prefs/pref_service.h"
25 #include "chrome/common/chrome_notification_types.h" 24 #include "chrome/common/chrome_notification_types.h"
26 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/content_settings_pattern.h" 26 #include "chrome/common/content_settings_pattern.h"
28 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
29 #include "chrome/common/url_constants.h" 28 #include "chrome/common/url_constants.h"
30 #include "content/browser/user_metrics.h" 29 #include "content/browser/user_metrics.h"
31 #include "content/public/browser/browser_thread.h" 30 #include "content/public/browser/browser_thread.h"
32 #include "content/public/browser/notification_service.h" 31 #include "content/public/browser/notification_service.h"
(...skipping 28 matching lines...) Expand all
61 HostContentSettingsMap::NUM_PROVIDER_TYPES, 60 HostContentSettingsMap::NUM_PROVIDER_TYPES,
62 kProviderSourceMap_has_incorrect_size); 61 kProviderSourceMap_has_incorrect_size);
63 62
64 bool ContentTypeHasCompoundValue(ContentSettingsType type) { 63 bool ContentTypeHasCompoundValue(ContentSettingsType type) {
65 // Values for content type CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE are 64 // Values for content type CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE are
66 // of type dictionary/map. Compound types like dictionaries can't be mapped to 65 // of type dictionary/map. Compound types like dictionaries can't be mapped to
67 // the type |ContentSetting|. 66 // the type |ContentSetting|.
68 return type == CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE; 67 return type == CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE;
69 } 68 }
70 69
71 ContentSetting GetDefaultSetting( 70 // Returns true if the |content_type| supports a resource identifier.
72 content_settings::RuleIterator* rule_iterator) { 71 // Resource identifiers are supported (but not required) for plug-ins.
73 ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard(); 72 bool SupportsResourceIdentifier(ContentSettingsType content_type) {
74 while (rule_iterator->HasNext()) { 73 return content_type == CONTENT_SETTINGS_TYPE_PLUGINS;
75 content_settings::Rule rule = rule_iterator->Next();
76 if (rule.primary_pattern == wildcard &&
77 rule.secondary_pattern == wildcard) {
78 return content_settings::ValueToContentSetting(rule.value.get());
79 }
80 }
81 return CONTENT_SETTING_DEFAULT;
82 } 74 }
83 75
84 } // namespace 76 } // namespace
85 77
86 HostContentSettingsMap::HostContentSettingsMap( 78 HostContentSettingsMap::HostContentSettingsMap(
87 PrefService* prefs, 79 PrefService* prefs,
88 ExtensionService* extension_service, 80 ExtensionService* extension_service,
89 bool incognito) 81 bool incognito)
90 : prefs_(prefs), 82 : prefs_(prefs),
91 is_off_the_record_(incognito) { 83 is_off_the_record_(incognito) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 content_settings::DefaultProvider::RegisterUserPrefs(prefs); 117 content_settings::DefaultProvider::RegisterUserPrefs(prefs);
126 content_settings::PrefProvider::RegisterUserPrefs(prefs); 118 content_settings::PrefProvider::RegisterUserPrefs(prefs);
127 content_settings::PolicyProvider::RegisterUserPrefs(prefs); 119 content_settings::PolicyProvider::RegisterUserPrefs(prefs);
128 } 120 }
129 121
130 ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( 122 ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
131 ContentSettingsType content_type, 123 ContentSettingsType content_type,
132 content_settings::ProviderInterface* provider) const { 124 content_settings::ProviderInterface* provider) const {
133 scoped_ptr<content_settings::RuleIterator> rule_iterator( 125 scoped_ptr<content_settings::RuleIterator> rule_iterator(
134 provider->GetRuleIterator(content_type, "", false)); 126 provider->GetRuleIterator(content_type, "", false));
135 return GetDefaultSetting(rule_iterator.get()); 127
128 ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
129 while (rule_iterator->HasNext()) {
130 content_settings::Rule rule = rule_iterator->Next();
131 if (rule.primary_pattern == wildcard &&
132 rule.secondary_pattern == wildcard) {
133 return content_settings::ValueToContentSetting(rule.value.get());
134 }
135 }
136 return CONTENT_SETTING_DEFAULT;
136 } 137 }
137 138
138 ContentSetting HostContentSettingsMap::GetDefaultContentSetting( 139 ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
139 ContentSettingsType content_type, 140 ContentSettingsType content_type,
140 std::string* provider_id) const { 141 std::string* provider_id) const {
141 DCHECK(!ContentTypeHasCompoundValue(content_type)); 142 DCHECK(!ContentTypeHasCompoundValue(content_type));
142 143
143 // Iterate through the list of providers and return the first non-NULL value 144 // Iterate through the list of providers and return the first non-NULL value
144 // that matches |primary_url| and |secondary_url|. 145 // that matches |primary_url| and |secondary_url|.
145 for (ConstProviderIterator provider = content_settings_providers_.begin(); 146 for (ConstProviderIterator provider = content_settings_providers_.begin();
(...skipping 15 matching lines...) Expand all
161 // DefaultProvider to always provide a value. 162 // DefaultProvider to always provide a value.
162 NOTREACHED(); 163 NOTREACHED();
163 return CONTENT_SETTING_DEFAULT; 164 return CONTENT_SETTING_DEFAULT;
164 } 165 }
165 166
166 ContentSetting HostContentSettingsMap::GetContentSetting( 167 ContentSetting HostContentSettingsMap::GetContentSetting(
167 const GURL& primary_url, 168 const GURL& primary_url,
168 const GURL& secondary_url, 169 const GURL& secondary_url,
169 ContentSettingsType content_type, 170 ContentSettingsType content_type,
170 const std::string& resource_identifier) const { 171 const std::string& resource_identifier) const {
172 DCHECK(!ContentTypeHasCompoundValue(content_type));
171 scoped_ptr<base::Value> value(GetWebsiteSetting( 173 scoped_ptr<base::Value> value(GetWebsiteSetting(
172 primary_url, secondary_url, content_type, resource_identifier, NULL)); 174 primary_url, secondary_url, content_type, resource_identifier, NULL));
173 return content_settings::ValueToContentSetting(value.get()); 175 return content_settings::ValueToContentSetting(value.get());
174 } 176 }
175 177
176 void HostContentSettingsMap::GetSettingsForOneType( 178 void HostContentSettingsMap::GetSettingsForOneType(
177 ContentSettingsType content_type, 179 ContentSettingsType content_type,
178 const std::string& resource_identifier, 180 const std::string& resource_identifier,
179 ContentSettingsForOneType* settings) const { 181 ContentSettingsForOneType* settings) const {
180 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 182 DCHECK(SupportsResourceIdentifier(content_type) ||
181 resource_identifier.empty()); 183 resource_identifier.empty());
182 DCHECK(settings); 184 DCHECK(settings);
183 185
184 settings->clear(); 186 settings->clear();
185 for (ConstProviderIterator provider = content_settings_providers_.begin(); 187 for (ConstProviderIterator provider = content_settings_providers_.begin();
186 provider != content_settings_providers_.end(); 188 provider != content_settings_providers_.end();
187 ++provider) { 189 ++provider) {
188 // For each provider, iterate first the incognito-specific rules, then the 190 // For each provider, iterate first the incognito-specific rules, then the
189 // normal rules. 191 // normal rules.
190 if (is_off_the_record_) { 192 if (is_off_the_record_) {
191 AddSettingsForOneType(provider->second, 193 AddSettingsForOneType(provider->second,
192 provider->first, 194 provider->first,
193 content_type, 195 content_type,
194 resource_identifier, 196 resource_identifier,
195 settings, 197 settings,
196 true); 198 true);
197 } 199 }
198 AddSettingsForOneType(provider->second, 200 AddSettingsForOneType(provider->second,
199 provider->first, 201 provider->first,
200 content_type, 202 content_type,
201 resource_identifier, 203 resource_identifier,
202 settings, 204 settings,
203 false); 205 false);
204 } 206 }
205 } 207 }
206 208
207 void HostContentSettingsMap::SetDefaultContentSetting( 209 void HostContentSettingsMap::SetDefaultContentSetting(
208 ContentSettingsType content_type, 210 ContentSettingsType content_type,
209 ContentSetting setting) { 211 ContentSetting setting) {
210 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE); 212 DCHECK(!ContentTypeHasCompoundValue(content_type));
211 DCHECK(IsSettingAllowedForType(setting, content_type)); 213 DCHECK(IsSettingAllowedForType(setting, content_type));
212 214
213 base::Value* value = NULL; 215 base::Value* value = NULL;
214 if (setting != CONTENT_SETTING_DEFAULT) 216 if (setting != CONTENT_SETTING_DEFAULT)
215 value = Value::CreateIntegerValue(setting); 217 value = Value::CreateIntegerValue(setting);
216 SetWebsiteSetting( 218 SetWebsiteSetting(
217 ContentSettingsPattern::Wildcard(), 219 ContentSettingsPattern::Wildcard(),
218 ContentSettingsPattern::Wildcard(), 220 ContentSettingsPattern::Wildcard(),
219 content_type, 221 content_type,
220 std::string(), 222 std::string(),
221 value); 223 value);
222 } 224 }
223 225
224 void HostContentSettingsMap::SetWebsiteSetting( 226 void HostContentSettingsMap::SetWebsiteSetting(
225 const ContentSettingsPattern& primary_pattern, 227 const ContentSettingsPattern& primary_pattern,
226 const ContentSettingsPattern& secondary_pattern, 228 const ContentSettingsPattern& secondary_pattern,
227 ContentSettingsType content_type, 229 ContentSettingsType content_type,
228 const std::string& resource_identifier, 230 const std::string& resource_identifier,
229 base::Value* value) { 231 base::Value* value) {
230 DCHECK(IsValueAllowedForType(value, content_type)); 232 DCHECK(IsValueAllowedForType(value, content_type));
231 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 233 DCHECK(SupportsResourceIdentifier(content_type) ||
232 resource_identifier.empty()); 234 resource_identifier.empty());
233 for (ProviderIterator provider = content_settings_providers_.begin(); 235 for (ProviderIterator provider = content_settings_providers_.begin();
234 provider != content_settings_providers_.end(); 236 provider != content_settings_providers_.end();
235 ++provider) { 237 ++provider) {
236 if (provider->second->SetWebsiteSetting(primary_pattern, 238 if (provider->second->SetWebsiteSetting(primary_pattern,
237 secondary_pattern, 239 secondary_pattern,
238 content_type, 240 content_type,
239 resource_identifier, 241 resource_identifier,
240 value)) { 242 value)) {
241 return; 243 return;
242 } 244 }
243 } 245 }
244 NOTREACHED(); 246 NOTREACHED();
245 } 247 }
246 248
247 void HostContentSettingsMap::SetContentSetting( 249 void HostContentSettingsMap::SetContentSetting(
248 const ContentSettingsPattern& primary_pattern, 250 const ContentSettingsPattern& primary_pattern,
249 const ContentSettingsPattern& secondary_pattern, 251 const ContentSettingsPattern& secondary_pattern,
250 ContentSettingsType content_type, 252 ContentSettingsType content_type,
251 const std::string& resource_identifier, 253 const std::string& resource_identifier,
252 ContentSetting setting) { 254 ContentSetting setting) {
253 DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE); 255 DCHECK(!ContentTypeHasCompoundValue(content_type));
254 base::Value* value = NULL; 256 base::Value* value = NULL;
255 if (setting != CONTENT_SETTING_DEFAULT) 257 if (setting != CONTENT_SETTING_DEFAULT)
256 value = Value::CreateIntegerValue(setting); 258 value = Value::CreateIntegerValue(setting);
257 SetWebsiteSetting(primary_pattern, 259 SetWebsiteSetting(primary_pattern,
258 secondary_pattern, 260 secondary_pattern,
259 content_type, 261 content_type,
260 resource_identifier, 262 resource_identifier,
261 value); 263 value);
262 } 264 }
263 265
264 void HostContentSettingsMap::AddExceptionForURL( 266 void HostContentSettingsMap::AddExceptionForURL(
265 const GURL& primary_url, 267 const GURL& primary_url,
266 const GURL& secondary_url, 268 const GURL& secondary_url,
267 ContentSettingsType content_type, 269 ContentSettingsType content_type,
268 const std::string& resource_identifier, 270 const std::string& resource_identifier,
269 ContentSetting setting) { 271 ContentSetting setting) {
270 // TODO(markusheintz): Until the UI supports pattern pairs, both urls must 272 // TODO(markusheintz): Until the UI supports pattern pairs, both urls must
271 // match. 273 // match.
272 DCHECK(primary_url == secondary_url); 274 DCHECK(primary_url == secondary_url);
275 DCHECK(!ContentTypeHasCompoundValue(content_type));
273 276
274 // Make sure there is no entry that would override the pattern we are about 277 // Make sure there is no entry that would override the pattern we are about
275 // to insert for exactly this URL. 278 // to insert for exactly this URL.
276 SetContentSetting(ContentSettingsPattern::FromURLNoWildcard(primary_url), 279 SetContentSetting(ContentSettingsPattern::FromURLNoWildcard(primary_url),
277 ContentSettingsPattern::Wildcard(), 280 ContentSettingsPattern::Wildcard(),
278 content_type, 281 content_type,
279 resource_identifier, 282 resource_identifier,
280 CONTENT_SETTING_DEFAULT); 283 CONTENT_SETTING_DEFAULT);
281 284
282 SetContentSetting(ContentSettingsPattern::FromURL(primary_url), 285 SetContentSetting(ContentSettingsPattern::FromURL(primary_url),
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 primary_url.SchemeIs(chrome::kChromeInternalScheme) || 411 primary_url.SchemeIs(chrome::kChromeInternalScheme) ||
409 primary_url.SchemeIs(chrome::kChromeUIScheme); 412 primary_url.SchemeIs(chrome::kChromeUIScheme);
410 } 413 }
411 414
412 base::Value* HostContentSettingsMap::GetWebsiteSetting( 415 base::Value* HostContentSettingsMap::GetWebsiteSetting(
413 const GURL& primary_url, 416 const GURL& primary_url,
414 const GURL& secondary_url, 417 const GURL& secondary_url,
415 ContentSettingsType content_type, 418 ContentSettingsType content_type,
416 const std::string& resource_identifier, 419 const std::string& resource_identifier,
417 content_settings::SettingInfo* info) const { 420 content_settings::SettingInfo* info) const {
418 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 421 DCHECK(SupportsResourceIdentifier(content_type) ||
419 resource_identifier.empty()); 422 resource_identifier.empty());
420 423
421 // Check if the scheme of the requesting url is whitelisted. 424 // Check if the scheme of the requesting url is whitelisted.
422 if (ShouldAllowAllContent(primary_url, secondary_url, content_type)) { 425 if (ShouldAllowAllContent(primary_url, secondary_url, content_type)) {
423 if (info) { 426 if (info) {
424 info->source = content_settings::SETTING_SOURCE_WHITELIST; 427 info->source = content_settings::SETTING_SOURCE_WHITELIST;
425 info->primary_pattern = ContentSettingsPattern::Wildcard(); 428 info->primary_pattern = ContentSettingsPattern::Wildcard();
426 info->secondary_pattern = ContentSettingsPattern::Wildcard(); 429 info->secondary_pattern = ContentSettingsPattern::Wildcard();
427 } 430 }
428 return Value::CreateIntegerValue(CONTENT_SETTING_ALLOW); 431 return Value::CreateIntegerValue(CONTENT_SETTING_ALLOW);
429 } 432 }
430 433
431 ContentSettingsPattern* primary_pattern = NULL; 434 ContentSettingsPattern* primary_pattern = NULL;
432 ContentSettingsPattern* secondary_pattern = NULL; 435 ContentSettingsPattern* secondary_pattern = NULL;
433 if (info) { 436 if (info) {
434 primary_pattern = &info->primary_pattern; 437 primary_pattern = &info->primary_pattern;
435 secondary_pattern = &info->secondary_pattern; 438 secondary_pattern = &info->secondary_pattern;
436 } 439 }
437 440
438 // The list of |content_settings_providers_| is ordered according to their 441 // The list of |content_settings_providers_| is ordered according to their
439 // precedence. 442 // precedence.
440 for (ConstProviderIterator provider = content_settings_providers_.begin(); 443 for (ConstProviderIterator provider = content_settings_providers_.begin();
441 provider != content_settings_providers_.end(); 444 provider != content_settings_providers_.end();
442 ++provider) { 445 ++provider) {
443 base::Value* value = content_settings::GetContentSettingValueAndPatterns( 446 base::Value* value = content_settings::GetContentSettingValueAndPatterns(
marja 2011/12/06 09:47:12 (Here.)
markusheintz_ 2011/12/06 16:29:59 Done.
444 provider->second, primary_url, secondary_url, content_type, 447 provider->second, primary_url, secondary_url, content_type,
445 resource_identifier, is_off_the_record_, 448 resource_identifier, is_off_the_record_,
446 primary_pattern, secondary_pattern); 449 primary_pattern, secondary_pattern);
447 if (value) { 450 if (value) {
448 if (info) 451 if (info)
449 info->source = kProviderSourceMap[provider->first]; 452 info->source = kProviderSourceMap[provider->first];
450 return value; 453 return value;
451 } 454 }
452 } 455 }
453 456
454 if (info) { 457 if (info) {
455 info->source = content_settings::SETTING_SOURCE_NONE; 458 info->source = content_settings::SETTING_SOURCE_NONE;
456 info->primary_pattern = ContentSettingsPattern(); 459 info->primary_pattern = ContentSettingsPattern();
457 info->secondary_pattern = ContentSettingsPattern(); 460 info->secondary_pattern = ContentSettingsPattern();
458 } 461 }
459 return NULL; 462 return NULL;
460 } 463 }
OLDNEW
« no previous file with comments | « chrome/browser/content_settings/host_content_settings_map.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698