OLD | NEW |
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/content_settings_pref_provider.h" | 5 #include "chrome/browser/content_settings/content_settings_pref_provider.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 ContentSettingsType content_type) const { | 126 ContentSettingsType content_type) const { |
127 base::AutoLock lock(lock_); | 127 base::AutoLock lock(lock_); |
128 return default_content_settings_.settings[content_type]; | 128 return default_content_settings_.settings[content_type]; |
129 } | 129 } |
130 | 130 |
131 void PrefDefaultProvider::UpdateDefaultSetting( | 131 void PrefDefaultProvider::UpdateDefaultSetting( |
132 ContentSettingsType content_type, | 132 ContentSettingsType content_type, |
133 ContentSetting setting) { | 133 ContentSetting setting) { |
134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
135 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. | 135 DCHECK(kTypeNames[content_type] != NULL); // Don't call this for Geolocation. |
136 DCHECK(content_type != CONTENT_SETTINGS_TYPE_PLUGINS || | |
137 setting != CONTENT_SETTING_ASK || | |
138 CommandLine::ForCurrentProcess()->HasSwitch( | |
139 switches::kEnableClickToPlay)); | |
140 | 136 |
141 // The default settings may not be directly modified for OTR sessions. | 137 // The default settings may not be directly modified for OTR sessions. |
142 // Instead, they are synced to the main profile's setting. | 138 // Instead, they are synced to the main profile's setting. |
143 if (is_incognito_) | 139 if (is_incognito_) |
144 return; | 140 return; |
145 | 141 |
146 PrefService* prefs = profile_->GetPrefs(); | 142 PrefService* prefs = profile_->GetPrefs(); |
147 | 143 |
148 std::string dictionary_path(kTypeNames[content_type]); | 144 std::string dictionary_path(kTypeNames[content_type]); |
149 updating_preferences_ = true; | 145 updating_preferences_ = true; |
150 { | 146 { |
151 base::AutoLock lock(lock_); | 147 base::AutoLock lock(lock_); |
152 DictionaryPrefUpdate update(prefs, prefs::kDefaultContentSettings); | 148 DictionaryPrefUpdate update(prefs, prefs::kDefaultContentSettings); |
153 DictionaryValue* default_settings_dictionary = update.Get(); | 149 DictionaryValue* default_settings_dictionary = update.Get(); |
154 if ((setting == CONTENT_SETTING_DEFAULT) || | 150 if ((setting == CONTENT_SETTING_DEFAULT) || |
155 (setting == kDefaultSettings[content_type])) { | 151 (setting == kDefaultSettings[content_type])) { |
156 default_content_settings_.settings[content_type] = | 152 default_content_settings_.settings[content_type] = |
157 kDefaultSettings[content_type]; | 153 kDefaultSettings[content_type]; |
158 default_settings_dictionary->RemoveWithoutPathExpansion(dictionary_path, | 154 default_settings_dictionary->RemoveWithoutPathExpansion(dictionary_path, |
159 NULL); | 155 NULL); |
160 } else { | 156 } else { |
161 default_content_settings_.settings[content_type] = setting; | 157 default_content_settings_.settings[content_type] = setting; |
162 default_settings_dictionary->SetWithoutPathExpansion( | 158 default_settings_dictionary->SetWithoutPathExpansion( |
163 dictionary_path, Value::CreateIntegerValue(setting)); | 159 dictionary_path, Value::CreateIntegerValue(setting)); |
164 } | 160 } |
165 } | 161 } |
166 updating_preferences_ = false; | 162 updating_preferences_ = false; |
167 | 163 |
168 NotifyObservers( | 164 ContentSettingsDetails details( |
169 ContentSettingsDetails(ContentSettingsPattern(), content_type, "")); | 165 ContentSettingsPattern(), content_type, std::string()); |
| 166 NotifyObservers(details); |
170 } | 167 } |
171 | 168 |
172 bool PrefDefaultProvider::DefaultSettingIsManaged( | 169 bool PrefDefaultProvider::DefaultSettingIsManaged( |
173 ContentSettingsType content_type) const { | 170 ContentSettingsType content_type) const { |
174 return false; | 171 return false; |
175 } | 172 } |
176 | 173 |
177 void PrefDefaultProvider::ResetToDefaults() { | 174 void PrefDefaultProvider::ResetToDefaults() { |
178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
179 base::AutoLock lock(lock_); | 176 base::AutoLock lock(lock_); |
(...skipping 20 matching lines...) Expand all Loading... |
200 | 197 |
201 std::string* name = Details<std::string>(details).ptr(); | 198 std::string* name = Details<std::string>(details).ptr(); |
202 if (*name == prefs::kDefaultContentSettings) { | 199 if (*name == prefs::kDefaultContentSettings) { |
203 ReadDefaultSettings(true); | 200 ReadDefaultSettings(true); |
204 } else { | 201 } else { |
205 NOTREACHED() << "Unexpected preference observed"; | 202 NOTREACHED() << "Unexpected preference observed"; |
206 return; | 203 return; |
207 } | 204 } |
208 | 205 |
209 if (!is_incognito_) { | 206 if (!is_incognito_) { |
210 NotifyObservers(ContentSettingsDetails( | 207 ContentSettingsDetails details(ContentSettingsPattern(), |
211 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_DEFAULT, "")); | 208 CONTENT_SETTINGS_TYPE_DEFAULT, |
| 209 std::string()); |
| 210 NotifyObservers(details); |
212 } | 211 } |
213 } else if (type == NotificationType::PROFILE_DESTROYED) { | 212 } else if (type == NotificationType::PROFILE_DESTROYED) { |
214 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); | 213 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); |
215 UnregisterObservers(); | 214 UnregisterObservers(); |
216 } else { | 215 } else { |
217 NOTREACHED() << "Unexpected notification"; | 216 NOTREACHED() << "Unexpected notification"; |
218 } | 217 } |
219 } | 218 } |
220 | 219 |
221 void PrefDefaultProvider::UnregisterObservers() { | 220 void PrefDefaultProvider::UnregisterObservers() { |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 NULL); | 489 NULL); |
491 } else { | 490 } else { |
492 host_settings_dictionary->SetWithoutPathExpansion( | 491 host_settings_dictionary->SetWithoutPathExpansion( |
493 dictionary_path, Value::CreateIntegerValue(setting)); | 492 dictionary_path, Value::CreateIntegerValue(setting)); |
494 } | 493 } |
495 } | 494 } |
496 } | 495 } |
497 } // End scope of update. | 496 } // End scope of update. |
498 updating_preferences_ = false; | 497 updating_preferences_ = false; |
499 | 498 |
500 NotifyObservers(ContentSettingsDetails(requesting_pattern, content_type, "")); | 499 ContentSettingsDetails details( |
| 500 requesting_pattern, content_type, std::string()); |
| 501 NotifyObservers(details); |
501 } | 502 } |
502 | 503 |
503 void PrefProvider::ResetToDefaults() { | 504 void PrefProvider::ResetToDefaults() { |
504 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 505 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
505 | 506 |
506 { | 507 { |
507 base::AutoLock auto_lock(lock()); | 508 base::AutoLock auto_lock(lock()); |
508 host_content_settings()->clear(); | 509 host_content_settings()->clear(); |
509 incognito_settings()->clear(); | 510 incognito_settings()->clear(); |
510 } | 511 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 ++i; | 562 ++i; |
562 } | 563 } |
563 } else { | 564 } else { |
564 ++i; | 565 ++i; |
565 } | 566 } |
566 } | 567 } |
567 } | 568 } |
568 } // End scope of update. | 569 } // End scope of update. |
569 updating_preferences_ = false; | 570 updating_preferences_ = false; |
570 | 571 |
571 NotifyObservers( | 572 ContentSettingsDetails details( |
572 ContentSettingsDetails(ContentSettingsPattern(), content_type, "")); | 573 ContentSettingsPattern(), content_type, std::string()); |
| 574 NotifyObservers(details); |
573 } | 575 } |
574 | 576 |
575 void PrefProvider::Observe( | 577 void PrefProvider::Observe( |
576 NotificationType type, | 578 NotificationType type, |
577 const NotificationSource& source, | 579 const NotificationSource& source, |
578 const NotificationDetails& details) { | 580 const NotificationDetails& details) { |
579 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 581 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
580 | 582 |
581 if (type == NotificationType::PREF_CHANGED) { | 583 if (type == NotificationType::PREF_CHANGED) { |
582 DCHECK_EQ(profile_->GetPrefs(), Source<PrefService>(source).ptr()); | 584 DCHECK_EQ(profile_->GetPrefs(), Source<PrefService>(source).ptr()); |
583 if (updating_preferences_) | 585 if (updating_preferences_) |
584 return; | 586 return; |
585 | 587 |
586 std::string* name = Details<std::string>(details).ptr(); | 588 std::string* name = Details<std::string>(details).ptr(); |
587 if (*name == prefs::kContentSettingsPatterns) { | 589 if (*name == prefs::kContentSettingsPatterns) { |
588 ReadExceptions(true); | 590 ReadExceptions(true); |
589 } else { | 591 } else { |
590 NOTREACHED() << "Unexpected preference observed"; | 592 NOTREACHED() << "Unexpected preference observed"; |
591 return; | 593 return; |
592 } | 594 } |
593 | 595 |
594 if (!is_incognito()) { | 596 if (!is_incognito()) { |
595 NotifyObservers(ContentSettingsDetails(ContentSettingsPattern(), | 597 ContentSettingsDetails details(ContentSettingsPattern(), |
596 CONTENT_SETTINGS_TYPE_DEFAULT, | 598 CONTENT_SETTINGS_TYPE_DEFAULT, |
597 "")); | 599 std::string()); |
| 600 NotifyObservers(details); |
598 } | 601 } |
599 } else if (type == NotificationType::PROFILE_DESTROYED) { | 602 } else if (type == NotificationType::PROFILE_DESTROYED) { |
600 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); | 603 DCHECK_EQ(profile_, Source<Profile>(source).ptr()); |
601 UnregisterObservers(); | 604 UnregisterObservers(); |
602 } else { | 605 } else { |
603 NOTREACHED() << "Unexpected notification"; | 606 NOTREACHED() << "Unexpected notification"; |
604 } | 607 } |
605 } | 608 } |
606 | 609 |
607 PrefProvider::~PrefProvider() { | 610 PrefProvider::~PrefProvider() { |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 ContentSettingsPattern::FromString(host), | 836 ContentSettingsPattern::FromString(host), |
834 CONTENT_SETTINGS_TYPE_POPUPS, | 837 CONTENT_SETTINGS_TYPE_POPUPS, |
835 "", | 838 "", |
836 CONTENT_SETTING_ALLOW); | 839 CONTENT_SETTING_ALLOW); |
837 } | 840 } |
838 prefs->ClearPref(prefs::kPopupWhitelistedHosts); | 841 prefs->ClearPref(prefs::kPopupWhitelistedHosts); |
839 } | 842 } |
840 } | 843 } |
841 | 844 |
842 } // namespace content_settings | 845 } // namespace content_settings |
OLD | NEW |