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 prefs::kManagedDefaultAutoSubmitCertificateSetting, |
40 }; | 41 }; |
41 | 42 |
42 struct PrefsForManagedContentSettingsMapEntry { | 43 struct PrefsForManagedContentSettingsMapEntry { |
43 const char* pref_name; | 44 const char* pref_name; |
44 ContentSettingsType content_type; | 45 ContentSettingsType content_type; |
45 ContentSetting setting; | 46 ContentSetting setting; |
46 }; | 47 }; |
47 | 48 |
48 const PrefsForManagedContentSettingsMapEntry | 49 const PrefsForManagedContentSettingsMapEntry |
49 kPrefsForManagedContentSettingsMap[] = { | 50 kPrefsForManagedContentSettingsMap[] = { |
50 { | 51 { |
| 52 prefs::kManagedAutoSubmitCertificateForUrls, |
| 53 CONTENT_SETTINGS_TYPE_AUTO_SUBMIT_CERTIFICATE, |
| 54 CONTENT_SETTING_ALLOW |
| 55 }, { |
51 prefs::kManagedCookiesAllowedForUrls, | 56 prefs::kManagedCookiesAllowedForUrls, |
52 CONTENT_SETTINGS_TYPE_COOKIES, | 57 CONTENT_SETTINGS_TYPE_COOKIES, |
53 CONTENT_SETTING_ALLOW | 58 CONTENT_SETTING_ALLOW |
54 }, { | 59 }, { |
55 prefs::kManagedCookiesSessionOnlyForUrls, | 60 prefs::kManagedCookiesSessionOnlyForUrls, |
56 CONTENT_SETTINGS_TYPE_COOKIES, | 61 CONTENT_SETTINGS_TYPE_COOKIES, |
57 CONTENT_SETTING_SESSION_ONLY | 62 CONTENT_SETTING_SESSION_ONLY |
58 }, { | 63 }, { |
59 prefs::kManagedCookiesBlockedForUrls, | 64 prefs::kManagedCookiesBlockedForUrls, |
60 CONTENT_SETTINGS_TYPE_COOKIES, | 65 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 | 118 // in parallel to the preference default-content-settings. If a |
114 // default-content-settings-type is managed any user defined excpetions | 119 // default-content-settings-type is managed any user defined excpetions |
115 // (patterns) for this type are ignored. | 120 // (patterns) for this type are ignored. |
116 pref_change_registrar_.Add(prefs::kManagedDefaultCookiesSetting, this); | 121 pref_change_registrar_.Add(prefs::kManagedDefaultCookiesSetting, this); |
117 pref_change_registrar_.Add(prefs::kManagedDefaultImagesSetting, this); | 122 pref_change_registrar_.Add(prefs::kManagedDefaultImagesSetting, this); |
118 pref_change_registrar_.Add(prefs::kManagedDefaultJavaScriptSetting, this); | 123 pref_change_registrar_.Add(prefs::kManagedDefaultJavaScriptSetting, this); |
119 pref_change_registrar_.Add(prefs::kManagedDefaultPluginsSetting, this); | 124 pref_change_registrar_.Add(prefs::kManagedDefaultPluginsSetting, this); |
120 pref_change_registrar_.Add(prefs::kManagedDefaultPopupsSetting, this); | 125 pref_change_registrar_.Add(prefs::kManagedDefaultPopupsSetting, this); |
121 pref_change_registrar_.Add(prefs::kManagedDefaultGeolocationSetting, this); | 126 pref_change_registrar_.Add(prefs::kManagedDefaultGeolocationSetting, this); |
122 pref_change_registrar_.Add(prefs::kManagedDefaultNotificationsSetting, this); | 127 pref_change_registrar_.Add(prefs::kManagedDefaultNotificationsSetting, this); |
| 128 pref_change_registrar_.Add( |
| 129 prefs::kManagedDefaultAutoSubmitCertificateSetting, this); |
123 } | 130 } |
124 | 131 |
125 PolicyDefaultProvider::~PolicyDefaultProvider() { | 132 PolicyDefaultProvider::~PolicyDefaultProvider() { |
126 DCHECK(!prefs_); | 133 DCHECK(!prefs_); |
127 } | 134 } |
128 | 135 |
129 ContentSetting PolicyDefaultProvider::ProvideDefaultSetting( | 136 ContentSetting PolicyDefaultProvider::ProvideDefaultSetting( |
130 ContentSettingsType content_type) const { | 137 ContentSettingsType content_type) const { |
131 base::AutoLock auto_lock(lock_); | 138 base::AutoLock auto_lock(lock_); |
132 return managed_default_content_settings_.settings[content_type]; | 139 return managed_default_content_settings_.settings[content_type]; |
(...skipping 30 matching lines...) Expand all Loading... |
163 } else if (*name == prefs::kManagedDefaultJavaScriptSetting) { | 170 } else if (*name == prefs::kManagedDefaultJavaScriptSetting) { |
164 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_JAVASCRIPT); | 171 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_JAVASCRIPT); |
165 } else if (*name == prefs::kManagedDefaultPluginsSetting) { | 172 } else if (*name == prefs::kManagedDefaultPluginsSetting) { |
166 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_PLUGINS); | 173 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_PLUGINS); |
167 } else if (*name == prefs::kManagedDefaultPopupsSetting) { | 174 } else if (*name == prefs::kManagedDefaultPopupsSetting) { |
168 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_POPUPS); | 175 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_POPUPS); |
169 } else if (*name == prefs::kManagedDefaultGeolocationSetting) { | 176 } else if (*name == prefs::kManagedDefaultGeolocationSetting) { |
170 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION); | 177 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
171 } else if (*name == prefs::kManagedDefaultNotificationsSetting) { | 178 } else if (*name == prefs::kManagedDefaultNotificationsSetting) { |
172 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); | 179 UpdateManagedDefaultSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| 180 } else if (*name == prefs::kManagedDefaultAutoSubmitCertificateSetting) { |
| 181 UpdateManagedDefaultSetting( |
| 182 CONTENT_SETTINGS_TYPE_AUTO_SUBMIT_CERTIFICATE); |
173 } else { | 183 } else { |
174 NOTREACHED() << "Unexpected preference observed"; | 184 NOTREACHED() << "Unexpected preference observed"; |
175 return; | 185 return; |
176 } | 186 } |
177 | 187 |
178 NotifyObservers(ContentSettingsPattern(), | 188 NotifyObservers(ContentSettingsPattern(), |
179 ContentSettingsPattern(), | 189 ContentSettingsPattern(), |
180 CONTENT_SETTINGS_TYPE_DEFAULT, | 190 CONTENT_SETTINGS_TYPE_DEFAULT, |
181 std::string()); | 191 std::string()); |
182 } else { | 192 } else { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 PrefService::UNSYNCABLE_PREF); | 244 PrefService::UNSYNCABLE_PREF); |
235 prefs->RegisterIntegerPref(prefs::kManagedDefaultPopupsSetting, | 245 prefs->RegisterIntegerPref(prefs::kManagedDefaultPopupsSetting, |
236 CONTENT_SETTING_DEFAULT, | 246 CONTENT_SETTING_DEFAULT, |
237 PrefService::UNSYNCABLE_PREF); | 247 PrefService::UNSYNCABLE_PREF); |
238 prefs->RegisterIntegerPref(prefs::kManagedDefaultGeolocationSetting, | 248 prefs->RegisterIntegerPref(prefs::kManagedDefaultGeolocationSetting, |
239 CONTENT_SETTING_DEFAULT, | 249 CONTENT_SETTING_DEFAULT, |
240 PrefService::UNSYNCABLE_PREF); | 250 PrefService::UNSYNCABLE_PREF); |
241 prefs->RegisterIntegerPref(prefs::kManagedDefaultNotificationsSetting, | 251 prefs->RegisterIntegerPref(prefs::kManagedDefaultNotificationsSetting, |
242 CONTENT_SETTING_DEFAULT, | 252 CONTENT_SETTING_DEFAULT, |
243 PrefService::UNSYNCABLE_PREF); | 253 PrefService::UNSYNCABLE_PREF); |
| 254 prefs->RegisterIntegerPref(prefs::kManagedDefaultAutoSubmitCertificateSetting, |
| 255 CONTENT_SETTING_ASK, |
| 256 PrefService::UNSYNCABLE_PREF); |
244 } | 257 } |
245 | 258 |
246 // //////////////////////////////////////////////////////////////////////////// | 259 // //////////////////////////////////////////////////////////////////////////// |
247 // PolicyProvider | 260 // PolicyProvider |
248 | 261 |
249 // static | 262 // static |
250 void PolicyProvider::RegisterUserPrefs(PrefService* prefs) { | 263 void PolicyProvider::RegisterUserPrefs(PrefService* prefs) { |
| 264 prefs->RegisterListPref(prefs::kManagedAutoSubmitCertificateForUrls, |
| 265 PrefService::UNSYNCABLE_PREF); |
251 prefs->RegisterListPref(prefs::kManagedCookiesAllowedForUrls, | 266 prefs->RegisterListPref(prefs::kManagedCookiesAllowedForUrls, |
252 PrefService::UNSYNCABLE_PREF); | 267 PrefService::UNSYNCABLE_PREF); |
253 prefs->RegisterListPref(prefs::kManagedCookiesBlockedForUrls, | 268 prefs->RegisterListPref(prefs::kManagedCookiesBlockedForUrls, |
254 PrefService::UNSYNCABLE_PREF); | 269 PrefService::UNSYNCABLE_PREF); |
255 prefs->RegisterListPref(prefs::kManagedCookiesSessionOnlyForUrls, | 270 prefs->RegisterListPref(prefs::kManagedCookiesSessionOnlyForUrls, |
256 PrefService::UNSYNCABLE_PREF); | 271 PrefService::UNSYNCABLE_PREF); |
257 prefs->RegisterListPref(prefs::kManagedImagesAllowedForUrls, | 272 prefs->RegisterListPref(prefs::kManagedImagesAllowedForUrls, |
258 PrefService::UNSYNCABLE_PREF); | 273 PrefService::UNSYNCABLE_PREF); |
259 prefs->RegisterListPref(prefs::kManagedImagesBlockedForUrls, | 274 prefs->RegisterListPref(prefs::kManagedImagesBlockedForUrls, |
260 PrefService::UNSYNCABLE_PREF); | 275 PrefService::UNSYNCABLE_PREF); |
(...skipping 11 matching lines...) Expand all Loading... |
272 PrefService::UNSYNCABLE_PREF); | 287 PrefService::UNSYNCABLE_PREF); |
273 } | 288 } |
274 | 289 |
275 PolicyProvider::PolicyProvider(PrefService* prefs, | 290 PolicyProvider::PolicyProvider(PrefService* prefs, |
276 DefaultProviderInterface* default_provider) | 291 DefaultProviderInterface* default_provider) |
277 : prefs_(prefs), | 292 : prefs_(prefs), |
278 default_provider_(default_provider) { | 293 default_provider_(default_provider) { |
279 ReadManagedContentSettings(false); | 294 ReadManagedContentSettings(false); |
280 | 295 |
281 pref_change_registrar_.Init(prefs_); | 296 pref_change_registrar_.Init(prefs_); |
| 297 pref_change_registrar_.Add(prefs::kManagedAutoSubmitCertificateForUrls, this); |
282 pref_change_registrar_.Add(prefs::kManagedCookiesBlockedForUrls, this); | 298 pref_change_registrar_.Add(prefs::kManagedCookiesBlockedForUrls, this); |
283 pref_change_registrar_.Add(prefs::kManagedCookiesAllowedForUrls, this); | 299 pref_change_registrar_.Add(prefs::kManagedCookiesAllowedForUrls, this); |
284 pref_change_registrar_.Add(prefs::kManagedCookiesSessionOnlyForUrls, this); | 300 pref_change_registrar_.Add(prefs::kManagedCookiesSessionOnlyForUrls, this); |
285 pref_change_registrar_.Add(prefs::kManagedImagesBlockedForUrls, this); | 301 pref_change_registrar_.Add(prefs::kManagedImagesBlockedForUrls, this); |
286 pref_change_registrar_.Add(prefs::kManagedImagesAllowedForUrls, this); | 302 pref_change_registrar_.Add(prefs::kManagedImagesAllowedForUrls, this); |
287 pref_change_registrar_.Add(prefs::kManagedJavaScriptBlockedForUrls, this); | 303 pref_change_registrar_.Add(prefs::kManagedJavaScriptBlockedForUrls, this); |
288 pref_change_registrar_.Add(prefs::kManagedJavaScriptAllowedForUrls, this); | 304 pref_change_registrar_.Add(prefs::kManagedJavaScriptAllowedForUrls, this); |
289 pref_change_registrar_.Add(prefs::kManagedPluginsBlockedForUrls, this); | 305 pref_change_registrar_.Add(prefs::kManagedPluginsBlockedForUrls, this); |
290 pref_change_registrar_.Add(prefs::kManagedPluginsAllowedForUrls, this); | 306 pref_change_registrar_.Add(prefs::kManagedPluginsAllowedForUrls, this); |
291 pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, this); | 307 pref_change_registrar_.Add(prefs::kManagedPopupsBlockedForUrls, this); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 // Ignore invalid patterns. | 339 // Ignore invalid patterns. |
324 if (!pattern_pair.first.IsValid()) { | 340 if (!pattern_pair.first.IsValid()) { |
325 VLOG(1) << "Ignoring invalid content settings pattern: " << | 341 VLOG(1) << "Ignoring invalid content settings pattern: " << |
326 original_pattern_str; | 342 original_pattern_str; |
327 continue; | 343 continue; |
328 } | 344 } |
329 | 345 |
330 ContentSettingsType content_type = | 346 ContentSettingsType content_type = |
331 kPrefsForManagedContentSettingsMap[i].content_type; | 347 kPrefsForManagedContentSettingsMap[i].content_type; |
332 // If only one pattern was defined auto expand it to a pattern pair. | 348 // If only one pattern was defined auto expand it to a pattern pair. |
| 349 ContentSettingsPattern secondary_pattern = |
| 350 !pattern_pair.second.IsValid() ? ContentSettingsPattern::Wildcard() |
| 351 : pattern_pair.second; |
333 rules->push_back(MakeTuple( | 352 rules->push_back(MakeTuple( |
334 pattern_pair.first, | 353 pattern_pair.first, |
335 !pattern_pair.second.IsValid() ? ContentSettingsPattern::Wildcard() | 354 secondary_pattern, |
336 : pattern_pair.second, | |
337 content_type, | 355 content_type, |
338 ResourceIdentifier(NO_RESOURCE_IDENTIFIER), | 356 ResourceIdentifier(NO_RESOURCE_IDENTIFIER), |
339 kPrefsForManagedContentSettingsMap[i].setting)); | 357 kPrefsForManagedContentSettingsMap[i].setting)); |
| 358 } |
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); |
347 { | 366 { |
348 base::AutoLock auto_lock(lock_); | 367 base::AutoLock auto_lock(lock_); |
349 if (overwrite) | 368 if (overwrite) |
(...skipping 79 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::kManagedAutoSubmitCertificateForUrls || |
| 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 |