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

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

Issue 8383004: Adding CookieSettings for storing cookie content settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review. Created 9 years, 1 month 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
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/command_line.h" 9 #include "base/command_line.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 19 matching lines...) Expand all
30 #include "content/browser/user_metrics.h" 30 #include "content/browser/user_metrics.h"
31 #include "content/public/browser/notification_service.h" 31 #include "content/public/browser/notification_service.h"
32 #include "content/public/browser/notification_source.h" 32 #include "content/public/browser/notification_source.h"
33 #include "content/public/common/content_switches.h" 33 #include "content/public/common/content_switches.h"
34 #include "googleurl/src/gurl.h" 34 #include "googleurl/src/gurl.h"
35 #include "net/base/net_errors.h" 35 #include "net/base/net_errors.h"
36 #include "net/base/static_cookie_policy.h" 36 #include "net/base/static_cookie_policy.h"
37 37
38 namespace { 38 namespace {
39 39
40 // Returns true if we should allow all content types for this URL. This is
41 // true for various internal objects like chrome:// URLs, so UI and other
42 // things users think of as "not webpages" don't break.
43 bool ShouldAllowAllContent(const GURL& url, ContentSettingsType content_type) {
44 if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
45 return false;
46 return url.SchemeIs(chrome::kChromeDevToolsScheme) ||
47 url.SchemeIs(chrome::kChromeInternalScheme) ||
48 url.SchemeIs(chrome::kChromeUIScheme) ||
49 url.SchemeIs(chrome::kExtensionScheme);
50 }
51
52 typedef std::vector<content_settings::Rule> Rules; 40 typedef std::vector<content_settings::Rule> Rules;
53 41
54 typedef std::pair<std::string, std::string> StringPair; 42 typedef std::pair<std::string, std::string> StringPair;
55 43
56 const char* kProviderNames[] = { 44 const char* kProviderNames[] = {
57 "policy", 45 "policy",
58 "extension", 46 "extension",
59 "preference", 47 "preference",
60 "default" 48 "default"
61 }; 49 };
(...skipping 18 matching lines...) Expand all
80 return CONTENT_SETTING_DEFAULT; 68 return CONTENT_SETTING_DEFAULT;
81 } 69 }
82 70
83 } // namespace 71 } // namespace
84 72
85 HostContentSettingsMap::HostContentSettingsMap( 73 HostContentSettingsMap::HostContentSettingsMap(
86 PrefService* prefs, 74 PrefService* prefs,
87 ExtensionService* extension_service, 75 ExtensionService* extension_service,
88 bool incognito) 76 bool incognito)
89 : prefs_(prefs), 77 : prefs_(prefs),
90 is_off_the_record_(incognito), 78 is_off_the_record_(incognito) {
91 updating_preferences_(false),
92 block_third_party_cookies_(false),
93 is_block_third_party_cookies_managed_(false) {
94 content_settings::ObservableProvider* policy_provider = 79 content_settings::ObservableProvider* policy_provider =
95 new content_settings::PolicyProvider(prefs_); 80 new content_settings::PolicyProvider(prefs_);
96 policy_provider->AddObserver(this); 81 policy_provider->AddObserver(this);
97 content_settings_providers_[POLICY_PROVIDER] = policy_provider; 82 content_settings_providers_[POLICY_PROVIDER] = policy_provider;
98 83
99 if (extension_service) { 84 if (extension_service) {
100 // |extension_service| can be NULL in unit tests. 85 // |extension_service| can be NULL in unit tests.
101 content_settings::ObservableProvider* extension_provider = 86 content_settings::ObservableProvider* extension_provider =
102 new content_settings::ExtensionProvider( 87 new content_settings::ExtensionProvider(
103 extension_service->GetExtensionContentSettingsStore(), 88 extension_service->GetExtensionContentSettingsStore(),
104 is_off_the_record_); 89 is_off_the_record_);
105 extension_provider->AddObserver(this); 90 extension_provider->AddObserver(this);
106 content_settings_providers_[EXTENSION_PROVIDER] = extension_provider; 91 content_settings_providers_[EXTENSION_PROVIDER] = extension_provider;
107 } 92 }
108 93
109 content_settings::ObservableProvider* pref_provider = 94 content_settings::ObservableProvider* pref_provider =
110 new content_settings::PrefProvider(prefs_, is_off_the_record_); 95 new content_settings::PrefProvider(prefs_, is_off_the_record_);
111 pref_provider->AddObserver(this); 96 pref_provider->AddObserver(this);
112 content_settings_providers_[PREF_PROVIDER] = pref_provider; 97 content_settings_providers_[PREF_PROVIDER] = pref_provider;
113 98
114 content_settings::ObservableProvider* default_provider = 99 content_settings::ObservableProvider* default_provider =
115 new content_settings::DefaultProvider(prefs_, is_off_the_record_); 100 new content_settings::DefaultProvider(prefs_, is_off_the_record_);
116 default_provider->AddObserver(this); 101 default_provider->AddObserver(this);
117 content_settings_providers_[DEFAULT_PROVIDER] = default_provider; 102 content_settings_providers_[DEFAULT_PROVIDER] = default_provider;
118
119 MigrateObsoleteCookiePref();
120
121 // Read misc. global settings.
122 block_third_party_cookies_ =
123 prefs_->GetBoolean(prefs::kBlockThirdPartyCookies);
124 if (block_third_party_cookies_) {
125 UserMetrics::RecordAction(
126 UserMetricsAction("ThirdPartyCookieBlockingEnabled"));
127 } else {
128 UserMetrics::RecordAction(
129 UserMetricsAction("ThirdPartyCookieBlockingDisabled"));
130 }
131 is_block_third_party_cookies_managed_ =
132 prefs_->IsManagedPreference(prefs::kBlockThirdPartyCookies);
133
134 pref_change_registrar_.Init(prefs_);
135 pref_change_registrar_.Add(prefs::kBlockThirdPartyCookies, this);
136 } 103 }
137 104
138 // static 105 // static
139 void HostContentSettingsMap::RegisterUserPrefs(PrefService* prefs) { 106 void HostContentSettingsMap::RegisterUserPrefs(PrefService* prefs) {
140 prefs->RegisterBooleanPref(prefs::kBlockThirdPartyCookies,
141 false,
142 PrefService::SYNCABLE_PREF);
143 prefs->RegisterIntegerPref(prefs::kContentSettingsWindowLastTabIndex, 107 prefs->RegisterIntegerPref(prefs::kContentSettingsWindowLastTabIndex,
144 0, 108 0,
145 PrefService::UNSYNCABLE_PREF); 109 PrefService::UNSYNCABLE_PREF);
146 110
147 // Obsolete prefs, for migration:
148 prefs->RegisterIntegerPref(prefs::kCookieBehavior,
149 net::StaticCookiePolicy::ALLOW_ALL_COOKIES,
150 PrefService::UNSYNCABLE_PREF);
151
152 // Register the prefs for the content settings providers. 111 // Register the prefs for the content settings providers.
153 content_settings::DefaultProvider::RegisterUserPrefs(prefs); 112 content_settings::DefaultProvider::RegisterUserPrefs(prefs);
154 content_settings::PrefProvider::RegisterUserPrefs(prefs); 113 content_settings::PrefProvider::RegisterUserPrefs(prefs);
155 content_settings::PolicyProvider::RegisterUserPrefs(prefs); 114 content_settings::PolicyProvider::RegisterUserPrefs(prefs);
156 } 115 }
157 116
158 ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( 117 ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
159 ContentSettingsType content_type, 118 ContentSettingsType content_type,
160 content_settings::ProviderInterface* provider) const { 119 content_settings::ProviderInterface* provider) const {
161 scoped_ptr<content_settings::RuleIterator> rule_iterator( 120 scoped_ptr<content_settings::RuleIterator> rule_iterator(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 ContentSettings HostContentSettingsMap::GetDefaultContentSettings() const { 153 ContentSettings HostContentSettingsMap::GetDefaultContentSettings() const {
195 ContentSettings output(CONTENT_SETTING_DEFAULT); 154 ContentSettings output(CONTENT_SETTING_DEFAULT);
196 for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) { 155 for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
197 if (!ContentTypeHasCompoundValue(ContentSettingsType(i))) 156 if (!ContentTypeHasCompoundValue(ContentSettingsType(i)))
198 output.settings[i] = GetDefaultContentSetting(ContentSettingsType(i), 157 output.settings[i] = GetDefaultContentSetting(ContentSettingsType(i),
199 NULL); 158 NULL);
200 } 159 }
201 return output; 160 return output;
202 } 161 }
203 162
204 ContentSetting HostContentSettingsMap::GetCookieContentSetting(
205 const GURL& url,
206 const GURL& first_party_url,
207 bool setting_cookie) const {
208 if (ShouldAllowAllContent(first_party_url, CONTENT_SETTINGS_TYPE_COOKIES))
209 return CONTENT_SETTING_ALLOW;
210
211 // First get any host-specific settings.
212 scoped_ptr<base::Value> value;
213 for (ConstProviderIterator provider = content_settings_providers_.begin();
214 provider != content_settings_providers_.end();
215 ++provider) {
216 if (provider->first == DEFAULT_PROVIDER)
217 continue;
218
219 value.reset(content_settings::GetContentSettingValueAndPatterns(
220 provider->second, url, first_party_url, CONTENT_SETTINGS_TYPE_COOKIES,
221 std::string(), is_off_the_record_, NULL, NULL));
222 if (value.get())
223 break;
224 }
225
226 // If no explicit exception has been made and third-party cookies are blocked
227 // by default, apply that rule.
228 if (!value.get() && BlockThirdPartyCookies()) {
229 bool strict = CommandLine::ForCurrentProcess()->HasSwitch(
230 switches::kBlockReadingThirdPartyCookies);
231 net::StaticCookiePolicy policy(strict ?
232 net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES :
233 net::StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES);
234 int rv;
235 if (setting_cookie)
236 rv = policy.CanSetCookie(url, first_party_url);
237 else
238 rv = policy.CanGetCookies(url, first_party_url);
239 DCHECK_NE(net::ERR_IO_PENDING, rv);
240 if (rv != net::OK)
241 return CONTENT_SETTING_BLOCK;
242 }
243
244 // If no other policy has changed the setting, use the default.
245 if (value.get())
246 return content_settings::ValueToContentSetting(value.get());
247
248 return GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_COOKIES, NULL);
249 }
250
251 ContentSetting HostContentSettingsMap::GetContentSetting( 163 ContentSetting HostContentSettingsMap::GetContentSetting(
252 const GURL& primary_url, 164 const GURL& primary_url,
253 const GURL& secondary_url, 165 const GURL& secondary_url,
254 ContentSettingsType content_type, 166 ContentSettingsType content_type,
255 const std::string& resource_identifier) const { 167 const std::string& resource_identifier) const {
256 scoped_ptr<base::Value> value(GetContentSettingValue( 168 scoped_ptr<base::Value> value(GetContentSettingValue(
257 primary_url, secondary_url, content_type, resource_identifier, 169 primary_url, secondary_url, content_type, resource_identifier,
258 NULL, NULL)); 170 NULL, NULL));
259 return content_settings::ValueToContentSetting(value.get()); 171 return content_settings::ValueToContentSetting(value.get());
260 } 172 }
261 173
262 base::Value* HostContentSettingsMap::GetContentSettingValue( 174 base::Value* HostContentSettingsMap::GetContentSettingValue(
263 const GURL& primary_url, 175 const GURL& primary_url,
264 const GURL& secondary_url, 176 const GURL& secondary_url,
265 ContentSettingsType content_type, 177 ContentSettingsType content_type,
266 const std::string& resource_identifier, 178 const std::string& resource_identifier,
267 ContentSettingsPattern* primary_pattern, 179 ContentSettingsPattern* primary_pattern,
268 ContentSettingsPattern* secondary_pattern) const { 180 ContentSettingsPattern* secondary_pattern) const {
269 DCHECK_NE(CONTENT_SETTINGS_TYPE_COOKIES, content_type);
270 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 181 DCHECK(content_settings::SupportsResourceIdentifier(content_type) ||
271 resource_identifier.empty()); 182 resource_identifier.empty());
272 183
273 // Check if the scheme of the requesting url is whitelisted. 184 // Check if the scheme of the requesting url is whitelisted.
274 if (ShouldAllowAllContent(secondary_url, content_type)) 185 if (ShouldAllowAllContent(secondary_url, content_type))
275 return Value::CreateIntegerValue(CONTENT_SETTING_ALLOW); 186 return Value::CreateIntegerValue(CONTENT_SETTING_ALLOW);
276 187
277 // The list of |content_settings_providers_| is ordered according to their 188 // The list of |content_settings_providers_| is ordered according to their
278 // precedence. 189 // precedence.
279 for (ConstProviderIterator provider = content_settings_providers_.begin(); 190 for (ConstProviderIterator provider = content_settings_providers_.begin();
280 provider != content_settings_providers_.end(); 191 provider != content_settings_providers_.end();
281 ++provider) { 192 ++provider) {
282 base::Value* value = content_settings::GetContentSettingValueAndPatterns( 193 base::Value* value = content_settings::GetContentSettingValueAndPatterns(
283 provider->second, primary_url, secondary_url, content_type, 194 provider->second, primary_url, secondary_url, content_type,
284 resource_identifier, is_off_the_record_, 195 resource_identifier, is_off_the_record_,
285 primary_pattern, secondary_pattern); 196 primary_pattern, secondary_pattern);
286 if (value) 197 if (value)
287 return value; 198 return value;
288 } 199 }
289 return NULL; 200 return NULL;
290 } 201 }
291 202
292 ContentSettings HostContentSettingsMap::GetContentSettings( 203 ContentSettings HostContentSettingsMap::GetContentSettings(
293 const GURL& primary_url, 204 const GURL& primary_url) const {
294 const GURL& secondary_url) const {
295 ContentSettings output; 205 ContentSettings output;
296 // If we require a resource identifier, set the content settings to default, 206 // If we require a resource identifier, set the content settings to default,
297 // otherwise make the defaults explicit. Values for content type 207 // otherwise make the defaults explicit. Values for content type
298 // CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE can't be mapped to the type 208 // CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE can't be mapped to the type
299 // |ContentSetting|. So we ignore them here. 209 // |ContentSetting|. So we ignore them here.
300 for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) { 210 for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) {
301 ContentSettingsType type = ContentSettingsType(j); 211 ContentSettingsType type = ContentSettingsType(j);
302 if (type == CONTENT_SETTINGS_TYPE_COOKIES) { 212 if (!ContentTypeHasCompoundValue(type)) {
303 output.settings[j] = GetCookieContentSetting(
304 primary_url, secondary_url, false);
305 } else if (!ContentTypeHasCompoundValue(type)) {
306 output.settings[j] = GetContentSetting( 213 output.settings[j] = GetContentSetting(
307 primary_url, 214 primary_url, primary_url, ContentSettingsType(j), std::string());
308 secondary_url,
309 ContentSettingsType(j),
310 std::string());
311 } 215 }
312 } 216 }
313 return output; 217 return output;
314 } 218 }
315 219
316 void HostContentSettingsMap::GetSettingsForOneType( 220 void HostContentSettingsMap::GetSettingsForOneType(
317 ContentSettingsType content_type, 221 ContentSettingsType content_type,
318 const std::string& resource_identifier, 222 const std::string& resource_identifier,
319 SettingsForOneType* settings) const { 223 SettingsForOneType* settings) const {
320 DCHECK(content_settings::SupportsResourceIdentifier(content_type) || 224 DCHECK(content_settings::SupportsResourceIdentifier(content_type) ||
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 switches::kEnableClickToPlay)); 342 switches::kEnableClickToPlay));
439 case CONTENT_SETTINGS_TYPE_GEOLOCATION: 343 case CONTENT_SETTINGS_TYPE_GEOLOCATION:
440 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: 344 case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
441 case CONTENT_SETTINGS_TYPE_INTENTS: 345 case CONTENT_SETTINGS_TYPE_INTENTS:
442 return (setting == CONTENT_SETTING_ASK); 346 return (setting == CONTENT_SETTING_ASK);
443 default: 347 default:
444 return false; 348 return false;
445 } 349 }
446 } 350 }
447 351
448 void HostContentSettingsMap::SetBlockThirdPartyCookies(bool block) {
449 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
450 DCHECK(prefs_);
451
452 // This setting may not be directly modified for OTR sessions. Instead, it
453 // is synced to the main profile's setting.
454 if (is_off_the_record_) {
455 NOTREACHED();
456 return;
457 }
458
459 // If the preference block-third-party-cookies is managed then do not allow to
460 // change it.
461 if (prefs_->IsManagedPreference(prefs::kBlockThirdPartyCookies)) {
462 NOTREACHED();
463 return;
464 }
465
466 {
467 base::AutoLock auto_lock(lock_);
468 block_third_party_cookies_ = block;
469 }
470
471 prefs_->SetBoolean(prefs::kBlockThirdPartyCookies, block);
472 }
473
474 void HostContentSettingsMap::OnContentSettingChanged( 352 void HostContentSettingsMap::OnContentSettingChanged(
475 ContentSettingsPattern primary_pattern, 353 ContentSettingsPattern primary_pattern,
476 ContentSettingsPattern secondary_pattern, 354 ContentSettingsPattern secondary_pattern,
477 ContentSettingsType content_type, 355 ContentSettingsType content_type,
478 std::string resource_identifier) { 356 std::string resource_identifier) {
479 const ContentSettingsDetails details(primary_pattern, 357 const ContentSettingsDetails details(primary_pattern,
480 secondary_pattern, 358 secondary_pattern,
481 content_type, 359 content_type,
482 resource_identifier); 360 resource_identifier);
483 content::NotificationService::current()->Notify( 361 content::NotificationService::current()->Notify(
484 chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED, 362 chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED,
485 content::Source<HostContentSettingsMap>(this), 363 content::Source<HostContentSettingsMap>(this),
486 content::Details<const ContentSettingsDetails>(&details)); 364 content::Details<const ContentSettingsDetails>(&details));
487 } 365 }
488 366
489 void HostContentSettingsMap::Observe(
490 int type,
491 const content::NotificationSource& source,
492 const content::NotificationDetails& details) {
493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
494
495 if (type == chrome::NOTIFICATION_PREF_CHANGED) {
496 DCHECK_EQ(prefs_, content::Source<PrefService>(source).ptr());
497 if (updating_preferences_)
498 return;
499
500 std::string* name = content::Details<std::string>(details).ptr();
501 if (*name == prefs::kBlockThirdPartyCookies) {
502 base::AutoLock auto_lock(lock_);
503 block_third_party_cookies_ = prefs_->GetBoolean(
504 prefs::kBlockThirdPartyCookies);
505 is_block_third_party_cookies_managed_ =
506 prefs_->IsManagedPreference(
507 prefs::kBlockThirdPartyCookies);
508 } else {
509 NOTREACHED() << "Unexpected preference observed";
510 return;
511 }
512 } else {
513 NOTREACHED() << "Unexpected notification";
514 }
515 }
516
517 HostContentSettingsMap::~HostContentSettingsMap() { 367 HostContentSettingsMap::~HostContentSettingsMap() {
518 DCHECK(!prefs_); 368 DCHECK(!prefs_);
519 STLDeleteValues(&content_settings_providers_); 369 STLDeleteValues(&content_settings_providers_);
520 } 370 }
521 371
522 void HostContentSettingsMap::ShutdownOnUIThread() { 372 void HostContentSettingsMap::ShutdownOnUIThread() {
523 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 373 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
524 DCHECK(prefs_); 374 DCHECK(prefs_);
525 pref_change_registrar_.RemoveAll();
526 prefs_ = NULL; 375 prefs_ = NULL;
527 for (ProviderIterator it = content_settings_providers_.begin(); 376 for (ProviderIterator it = content_settings_providers_.begin();
528 it != content_settings_providers_.end(); 377 it != content_settings_providers_.end();
529 ++it) { 378 ++it) {
530 it->second->ShutdownOnUIThread(); 379 it->second->ShutdownOnUIThread();
531 } 380 }
532 } 381 }
533 382
534 void HostContentSettingsMap::MigrateObsoleteCookiePref() {
535 if (prefs_->HasPrefPath(prefs::kCookieBehavior)) {
536 int cookie_behavior = prefs_->GetInteger(prefs::kCookieBehavior);
537 prefs_->ClearPref(prefs::kCookieBehavior);
538 if (!prefs_->HasPrefPath(prefs::kDefaultContentSettings)) {
539 SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_COOKIES,
540 (cookie_behavior == net::StaticCookiePolicy::BLOCK_ALL_COOKIES) ?
541 CONTENT_SETTING_BLOCK : CONTENT_SETTING_ALLOW);
542 }
543 if (!prefs_->HasPrefPath(prefs::kBlockThirdPartyCookies)) {
544 SetBlockThirdPartyCookies(cookie_behavior ==
545 net::StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES);
546 }
547 }
548 }
549
550 void HostContentSettingsMap::AddSettingsForOneType( 383 void HostContentSettingsMap::AddSettingsForOneType(
551 const content_settings::ProviderInterface* provider, 384 const content_settings::ProviderInterface* provider,
552 ProviderType provider_type, 385 ProviderType provider_type,
553 ContentSettingsType content_type, 386 ContentSettingsType content_type,
554 const std::string& resource_identifier, 387 const std::string& resource_identifier,
555 SettingsForOneType* settings, 388 SettingsForOneType* settings,
556 bool incognito) const { 389 bool incognito) const {
557 scoped_ptr<content_settings::RuleIterator> rule_iterator( 390 scoped_ptr<content_settings::RuleIterator> rule_iterator(
558 provider->GetRuleIterator(content_type, 391 provider->GetRuleIterator(content_type,
559 resource_identifier, 392 resource_identifier,
560 incognito)); 393 incognito));
561 ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard(); 394 ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
562 while (rule_iterator->HasNext()) { 395 while (rule_iterator->HasNext()) {
563 const content_settings::Rule& rule = rule_iterator->Next(); 396 const content_settings::Rule& rule = rule_iterator->Next();
564 settings->push_back(PatternSettingSourceTuple( 397 settings->push_back(PatternSettingSourceTuple(
565 rule.primary_pattern, rule.secondary_pattern, 398 rule.primary_pattern, rule.secondary_pattern,
566 content_settings::ValueToContentSetting(rule.value.get()), 399 content_settings::ValueToContentSetting(rule.value.get()),
567 kProviderNames[provider_type], 400 kProviderNames[provider_type],
568 incognito)); 401 incognito));
569 } 402 }
570 } 403 }
404
405 bool HostContentSettingsMap::ShouldAllowAllContent(
406 const GURL& url,
407 ContentSettingsType content_type) {
408 if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
409 return false;
410 return url.SchemeIs(chrome::kChromeDevToolsScheme) ||
411 url.SchemeIs(chrome::kChromeInternalScheme) ||
412 url.SchemeIs(chrome::kChromeUIScheme) ||
413 url.SchemeIs(chrome::kExtensionScheme);
414 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698