| 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_policy_provider.h" | 5 #include "chrome/browser/content_settings/content_settings_policy_provider.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 // The preferences used to manage ContentSettingsTypes. | 31 // The preferences used to manage ContentSettingsTypes. |
| 32 const char* kPrefToManageType[CONTENT_SETTINGS_NUM_TYPES] = { | 32 const char* kPrefToManageType[CONTENT_SETTINGS_NUM_TYPES] = { |
| 33 prefs::kManagedDefaultCookiesSetting, | 33 prefs::kManagedDefaultCookiesSetting, |
| 34 prefs::kManagedDefaultImagesSetting, | 34 prefs::kManagedDefaultImagesSetting, |
| 35 prefs::kManagedDefaultJavaScriptSetting, | 35 prefs::kManagedDefaultJavaScriptSetting, |
| 36 prefs::kManagedDefaultPluginsSetting, | 36 prefs::kManagedDefaultPluginsSetting, |
| 37 prefs::kManagedDefaultPopupsSetting, | 37 prefs::kManagedDefaultPopupsSetting, |
| 38 prefs::kManagedDefaultGeolocationSetting, | 38 prefs::kManagedDefaultGeolocationSetting, |
| 39 prefs::kManagedDefaultNotificationsSetting, | 39 prefs::kManagedDefaultNotificationsSetting, |
| 40 NULL, |
| 41 prefs::kManagedDefaultAutoSelectCertificateSetting, |
| 40 }; | 42 }; |
| 41 | 43 |
| 42 struct PrefsForManagedContentSettingsMapEntry { | 44 struct PrefsForManagedContentSettingsMapEntry { |
| 43 const char* pref_name; | 45 const char* pref_name; |
| 44 ContentSettingsType content_type; | 46 ContentSettingsType content_type; |
| 45 ContentSetting setting; | 47 ContentSetting setting; |
| 46 }; | 48 }; |
| 47 | 49 |
| 48 const PrefsForManagedContentSettingsMapEntry | 50 const PrefsForManagedContentSettingsMapEntry |
| 49 kPrefsForManagedContentSettingsMap[] = { | 51 kPrefsForManagedContentSettingsMap[] = { |
| 50 { | 52 { |
| 53 prefs::kManagedAutoSelectCertificateForUrls, |
| 54 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, |
| 55 CONTENT_SETTING_ALLOW |
| 56 }, { |
| 51 prefs::kManagedCookiesAllowedForUrls, | 57 prefs::kManagedCookiesAllowedForUrls, |
| 52 CONTENT_SETTINGS_TYPE_COOKIES, | 58 CONTENT_SETTINGS_TYPE_COOKIES, |
| 53 CONTENT_SETTING_ALLOW | 59 CONTENT_SETTING_ALLOW |
| 54 }, { | 60 }, { |
| 55 prefs::kManagedCookiesSessionOnlyForUrls, | 61 prefs::kManagedCookiesSessionOnlyForUrls, |
| 56 CONTENT_SETTINGS_TYPE_COOKIES, | 62 CONTENT_SETTINGS_TYPE_COOKIES, |
| 57 CONTENT_SETTING_SESSION_ONLY | 63 CONTENT_SETTING_SESSION_ONLY |
| 58 }, { | 64 }, { |
| 59 prefs::kManagedCookiesBlockedForUrls, | 65 prefs::kManagedCookiesBlockedForUrls, |
| 60 CONTENT_SETTINGS_TYPE_COOKIES, | 66 CONTENT_SETTINGS_TYPE_COOKIES, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 // in parallel to the preference default-content-settings. If a | 119 // in parallel to the preference default-content-settings. If a |
| 114 // default-content-settings-type is managed any user defined excpetions | 120 // default-content-settings-type is managed any user defined excpetions |
| 115 // (patterns) for this type are ignored. | 121 // (patterns) for this type are ignored. |
| 116 pref_change_registrar_.Add(prefs::kManagedDefaultCookiesSetting, this); | 122 pref_change_registrar_.Add(prefs::kManagedDefaultCookiesSetting, this); |
| 117 pref_change_registrar_.Add(prefs::kManagedDefaultImagesSetting, this); | 123 pref_change_registrar_.Add(prefs::kManagedDefaultImagesSetting, this); |
| 118 pref_change_registrar_.Add(prefs::kManagedDefaultJavaScriptSetting, this); | 124 pref_change_registrar_.Add(prefs::kManagedDefaultJavaScriptSetting, this); |
| 119 pref_change_registrar_.Add(prefs::kManagedDefaultPluginsSetting, this); | 125 pref_change_registrar_.Add(prefs::kManagedDefaultPluginsSetting, this); |
| 120 pref_change_registrar_.Add(prefs::kManagedDefaultPopupsSetting, this); | 126 pref_change_registrar_.Add(prefs::kManagedDefaultPopupsSetting, this); |
| 121 pref_change_registrar_.Add(prefs::kManagedDefaultGeolocationSetting, this); | 127 pref_change_registrar_.Add(prefs::kManagedDefaultGeolocationSetting, this); |
| 122 pref_change_registrar_.Add(prefs::kManagedDefaultNotificationsSetting, this); | 128 pref_change_registrar_.Add(prefs::kManagedDefaultNotificationsSetting, this); |
| 129 pref_change_registrar_.Add( |
| 130 prefs::kManagedDefaultAutoSelectCertificateSetting, this); |
| 123 } | 131 } |
| 124 | 132 |
| 125 PolicyDefaultProvider::~PolicyDefaultProvider() { | 133 PolicyDefaultProvider::~PolicyDefaultProvider() { |
| 126 DCHECK(!prefs_); | 134 DCHECK(!prefs_); |
| 127 } | 135 } |
| 128 | 136 |
| 129 ContentSetting PolicyDefaultProvider::ProvideDefaultSetting( | 137 ContentSetting PolicyDefaultProvider::ProvideDefaultSetting( |
| 130 ContentSettingsType content_type) const { | 138 ContentSettingsType content_type) const { |
| 131 base::AutoLock auto_lock(lock_); | 139 base::AutoLock auto_lock(lock_); |
| 132 return managed_default_content_settings_.settings[content_type]; | 140 return managed_default_content_settings_.settings[content_type]; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 163 } else if (*name == prefs::kManagedDefaultJavaScriptSetting) { | 171 } else if (*name == prefs::kManagedDefaultJavaScriptSetting) { |
| 164 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_JAVASCRIPT); | 172 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_JAVASCRIPT); |
| 165 } else if (*name == prefs::kManagedDefaultPluginsSetting) { | 173 } else if (*name == prefs::kManagedDefaultPluginsSetting) { |
| 166 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_PLUGINS); | 174 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_PLUGINS); |
| 167 } else if (*name == prefs::kManagedDefaultPopupsSetting) { | 175 } else if (*name == prefs::kManagedDefaultPopupsSetting) { |
| 168 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_POPUPS); | 176 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_POPUPS); |
| 169 } else if (*name == prefs::kManagedDefaultGeolocationSetting) { | 177 } else if (*name == prefs::kManagedDefaultGeolocationSetting) { |
| 170 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION); | 178 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| 171 } else if (*name == prefs::kManagedDefaultNotificationsSetting) { | 179 } else if (*name == prefs::kManagedDefaultNotificationsSetting) { |
| 172 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 180 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 181 } else if (*name == prefs::kManagedDefaultAutoSelectCertificateSetting) { |
| 182 UpdateManagedDefaultSetting( |
| 183 CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE); |
| 173 } else { | 184 } else { |
| 174 NOTREACHED() << "Unexpected preference observed"; | 185 NOTREACHED() << "Unexpected preference observed"; |
| 175 return; | 186 return; |
| 176 } | 187 } |
| 177 | 188 |
| 178 NotifyObservers(ContentSettingsPattern(), | 189 NotifyObservers(ContentSettingsPattern(), |
| 179 ContentSettingsPattern(), | 190 ContentSettingsPattern(), |
| 180 CONTENT_SETTINGS_TYPE_DEFAULT, | 191 CONTENT_SETTINGS_TYPE_DEFAULT, |
| 181 std::string()); | 192 std::string()); |
| 182 } else { | 193 } else { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 PrefService::UNSYNCABLE_PREF); | 245 PrefService::UNSYNCABLE_PREF); |
| 235 prefs->RegisterIntegerPref(prefs::kManagedDefaultPopupsSetting, | 246 prefs->RegisterIntegerPref(prefs::kManagedDefaultPopupsSetting, |
| 236 CONTENT_SETTING_DEFAULT, | 247 CONTENT_SETTING_DEFAULT, |
| 237 PrefService::UNSYNCABLE_PREF); | 248 PrefService::UNSYNCABLE_PREF); |
| 238 prefs->RegisterIntegerPref(prefs::kManagedDefaultGeolocationSetting, | 249 prefs->RegisterIntegerPref(prefs::kManagedDefaultGeolocationSetting, |
| 239 CONTENT_SETTING_DEFAULT, | 250 CONTENT_SETTING_DEFAULT, |
| 240 PrefService::UNSYNCABLE_PREF); | 251 PrefService::UNSYNCABLE_PREF); |
| 241 prefs->RegisterIntegerPref(prefs::kManagedDefaultNotificationsSetting, | 252 prefs->RegisterIntegerPref(prefs::kManagedDefaultNotificationsSetting, |
| 242 CONTENT_SETTING_DEFAULT, | 253 CONTENT_SETTING_DEFAULT, |
| 243 PrefService::UNSYNCABLE_PREF); | 254 PrefService::UNSYNCABLE_PREF); |
| 255 prefs->RegisterIntegerPref(prefs::kManagedDefaultAutoSelectCertificateSetting, |
| 256 CONTENT_SETTING_ASK, |
| 257 PrefService::UNSYNCABLE_PREF); |
| 244 } | 258 } |
| 245 | 259 |
| 246 // //////////////////////////////////////////////////////////////////////////// | 260 // //////////////////////////////////////////////////////////////////////////// |
| 247 // PolicyProvider | 261 // PolicyProvider |
| 248 | 262 |
| 249 // static | 263 // static |
| 250 void PolicyProvider::RegisterUserPrefs(PrefService* prefs) { | 264 void PolicyProvider::RegisterUserPrefs(PrefService* prefs) { |
| 265 prefs->RegisterListPref(prefs::kManagedAutoSelectCertificateForUrls, |
| 266 PrefService::UNSYNCABLE_PREF); |
| 251 prefs->RegisterListPref(prefs::kManagedCookiesAllowedForUrls, | 267 prefs->RegisterListPref(prefs::kManagedCookiesAllowedForUrls, |
| 252 PrefService::UNSYNCABLE_PREF); | 268 PrefService::UNSYNCABLE_PREF); |
| 253 prefs->RegisterListPref(prefs::kManagedCookiesBlockedForUrls, | 269 prefs->RegisterListPref(prefs::kManagedCookiesBlockedForUrls, |
| 254 PrefService::UNSYNCABLE_PREF); | 270 PrefService::UNSYNCABLE_PREF); |
| 255 prefs->RegisterListPref(prefs::kManagedCookiesSessionOnlyForUrls, | 271 prefs->RegisterListPref(prefs::kManagedCookiesSessionOnlyForUrls, |
| 256 PrefService::UNSYNCABLE_PREF); | 272 PrefService::UNSYNCABLE_PREF); |
| 257 prefs->RegisterListPref(prefs::kManagedImagesAllowedForUrls, | 273 prefs->RegisterListPref(prefs::kManagedImagesAllowedForUrls, |
| 258 PrefService::UNSYNCABLE_PREF); | 274 PrefService::UNSYNCABLE_PREF); |
| 259 prefs->RegisterListPref(prefs::kManagedImagesBlockedForUrls, | 275 prefs->RegisterListPref(prefs::kManagedImagesBlockedForUrls, |
| 260 PrefService::UNSYNCABLE_PREF); | 276 PrefService::UNSYNCABLE_PREF); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 272 PrefService::UNSYNCABLE_PREF); | 288 PrefService::UNSYNCABLE_PREF); |
| 273 } | 289 } |
| 274 | 290 |
| 275 PolicyProvider::PolicyProvider(PrefService* prefs, | 291 PolicyProvider::PolicyProvider(PrefService* prefs, |
| 276 DefaultProviderInterface* default_provider) | 292 DefaultProviderInterface* default_provider) |
| 277 : prefs_(prefs), | 293 : prefs_(prefs), |
| 278 default_provider_(default_provider) { | 294 default_provider_(default_provider) { |
| 279 ReadManagedContentSettings(false); | 295 ReadManagedContentSettings(false); |
| 280 | 296 |
| 281 pref_change_registrar_.Init(prefs_); | 297 pref_change_registrar_.Init(prefs_); |
| 298 pref_change_registrar_.Add(prefs::kManagedAutoSelectCertificateForUrls, this); |
| 282 pref_change_registrar_.Add(prefs::kManagedCookiesBlockedForUrls, this); | 299 pref_change_registrar_.Add(prefs::kManagedCookiesBlockedForUrls, this); |
| 283 pref_change_registrar_.Add(prefs::kManagedCookiesAllowedForUrls, this); | 300 pref_change_registrar_.Add(prefs::kManagedCookiesAllowedForUrls, this); |
| 284 pref_change_registrar_.Add(prefs::kManagedCookiesSessionOnlyForUrls, this); | 301 pref_change_registrar_.Add(prefs::kManagedCookiesSessionOnlyForUrls, this); |
| 285 pref_change_registrar_.Add(prefs::kManagedImagesBlockedForUrls, this); | 302 pref_change_registrar_.Add(prefs::kManagedImagesBlockedForUrls, this); |
| 286 pref_change_registrar_.Add(prefs::kManagedImagesAllowedForUrls, this); | 303 pref_change_registrar_.Add(prefs::kManagedImagesAllowedForUrls, this); |
| 287 pref_change_registrar_.Add(prefs::kManagedJavaScriptBlockedForUrls, this); | 304 pref_change_registrar_.Add(prefs::kManagedJavaScriptBlockedForUrls, this); |
| 288 pref_change_registrar_.Add(prefs::kManagedJavaScriptAllowedForUrls, this); | 305 pref_change_registrar_.Add(prefs::kManagedJavaScriptAllowedForUrls, this); |
| 289 pref_change_registrar_.Add(prefs::kManagedPluginsBlockedForUrls, this); | 306 pref_change_registrar_.Add(prefs::kManagedPluginsBlockedForUrls, this); |
| 290 pref_change_registrar_.Add(prefs::kManagedPluginsAllowedForUrls, this); | 307 pref_change_registrar_.Add(prefs::kManagedPluginsAllowedForUrls, this); |
| 291 pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, this); | 308 pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, this); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 // Ignore invalid patterns. | 340 // Ignore invalid patterns. |
| 324 if (!pattern_pair.first.IsValid()) { | 341 if (!pattern_pair.first.IsValid()) { |
| 325 VLOG(1) << "Ignoring invalid content settings pattern: " << | 342 VLOG(1) << "Ignoring invalid content settings pattern: " << |
| 326 original_pattern_str; | 343 original_pattern_str; |
| 327 continue; | 344 continue; |
| 328 } | 345 } |
| 329 | 346 |
| 330 ContentSettingsType content_type = | 347 ContentSettingsType content_type = |
| 331 kPrefsForManagedContentSettingsMap[i].content_type; | 348 kPrefsForManagedContentSettingsMap[i].content_type; |
| 332 // If only one pattern was defined auto expand it to a pattern pair. | 349 // If only one pattern was defined auto expand it to a pattern pair. |
| 350 ContentSettingsPattern secondary_pattern = |
| 351 !pattern_pair.second.IsValid() ? ContentSettingsPattern::Wildcard() |
| 352 : pattern_pair.second; |
| 333 rules->push_back(MakeTuple( | 353 rules->push_back(MakeTuple( |
| 334 pattern_pair.first, | 354 pattern_pair.first, |
| 335 !pattern_pair.second.IsValid() ? ContentSettingsPattern::Wildcard() | 355 secondary_pattern, |
| 336 : pattern_pair.second, | |
| 337 content_type, | 356 content_type, |
| 338 ResourceIdentifier(NO_RESOURCE_IDENTIFIER), | 357 ResourceIdentifier(NO_RESOURCE_IDENTIFIER), |
| 339 kPrefsForManagedContentSettingsMap[i].setting)); | 358 kPrefsForManagedContentSettingsMap[i].setting)); |
| 340 } | 359 } |
| 341 } | 360 } |
| 342 } | 361 } |
| 343 | 362 |
| 344 void PolicyProvider::ReadManagedContentSettings(bool overwrite) { | 363 void PolicyProvider::ReadManagedContentSettings(bool overwrite) { |
| 345 ContentSettingsRules rules; | 364 ContentSettingsRules rules; |
| 346 GetContentSettingsFromPreferences(&rules); | 365 GetContentSettingsFromPreferences(&rules); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 } | 448 } |
| 430 | 449 |
| 431 void PolicyProvider::Observe(int type, | 450 void PolicyProvider::Observe(int type, |
| 432 const NotificationSource& source, | 451 const NotificationSource& source, |
| 433 const NotificationDetails& details) { | 452 const NotificationDetails& details) { |
| 434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 453 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 435 | 454 |
| 436 if (type == chrome::NOTIFICATION_PREF_CHANGED) { | 455 if (type == chrome::NOTIFICATION_PREF_CHANGED) { |
| 437 DCHECK_EQ(prefs_, Source<PrefService>(source).ptr()); | 456 DCHECK_EQ(prefs_, Source<PrefService>(source).ptr()); |
| 438 std::string* name = Details<std::string>(details).ptr(); | 457 std::string* name = Details<std::string>(details).ptr(); |
| 439 if (*name == prefs::kManagedCookiesAllowedForUrls || | 458 if (*name == prefs::kManagedAutoSelectCertificateForUrls || |
| 459 *name == prefs::kManagedCookiesAllowedForUrls || |
| 440 *name == prefs::kManagedCookiesBlockedForUrls || | 460 *name == prefs::kManagedCookiesBlockedForUrls || |
| 441 *name == prefs::kManagedCookiesSessionOnlyForUrls || | 461 *name == prefs::kManagedCookiesSessionOnlyForUrls || |
| 442 *name == prefs::kManagedImagesAllowedForUrls || | 462 *name == prefs::kManagedImagesAllowedForUrls || |
| 443 *name == prefs::kManagedImagesBlockedForUrls || | 463 *name == prefs::kManagedImagesBlockedForUrls || |
| 444 *name == prefs::kManagedJavaScriptAllowedForUrls || | 464 *name == prefs::kManagedJavaScriptAllowedForUrls || |
| 445 *name == prefs::kManagedJavaScriptBlockedForUrls || | 465 *name == prefs::kManagedJavaScriptBlockedForUrls || |
| 446 *name == prefs::kManagedPluginsAllowedForUrls || | 466 *name == prefs::kManagedPluginsAllowedForUrls || |
| 447 *name == prefs::kManagedPluginsBlockedForUrls || | 467 *name == prefs::kManagedPluginsBlockedForUrls || |
| 448 *name == prefs::kManagedPopupsAllowedForUrls || | 468 *name == prefs::kManagedPopupsAllowedForUrls || |
| 449 *name == prefs::kManagedPopupsBlockedForUrls) { | 469 *name == prefs::kManagedPopupsBlockedForUrls) { |
| 450 ReadManagedContentSettings(true); | 470 ReadManagedContentSettings(true); |
| 451 NotifyObservers(ContentSettingsPattern(), | 471 NotifyObservers(ContentSettingsPattern(), |
| 452 ContentSettingsPattern(), | 472 ContentSettingsPattern(), |
| 453 CONTENT_SETTINGS_TYPE_DEFAULT, | 473 CONTENT_SETTINGS_TYPE_DEFAULT, |
| 454 std::string()); | 474 std::string()); |
| 455 } | 475 } |
| 456 } else { | 476 } else { |
| 457 NOTREACHED() << "Unexpected notification"; | 477 NOTREACHED() << "Unexpected notification"; |
| 458 } | 478 } |
| 459 } | 479 } |
| 460 | 480 |
| 461 } // namespace content_settings | 481 } // namespace content_settings |
| OLD | NEW |