1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/policy/configuration_policy_handler_list_factory.h"
7 #include "base/basictypes.h"
9 #include "base/memory/scoped_vector.h"
10 #include "base/prefs/pref_value_map.h"
11 #include "base/values.h"
12 #include "chrome/browser/net/proxy_policy_handler.h"
13 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
14 #include "chrome/browser/profiles/incognito_mode_policy_handler.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/pref_names.h"
17 #include "components/password_manager/core/common/password_manager_pref_names.h"
18 #include "components/policy/core/browser/autofill_policy_handler.h"
19 #include "components/policy/core/browser/configuration_policy_handler.h"
20 #include "components/policy/core/browser/configuration_policy_handler_list.h"
21 #include "components/policy/core/browser/configuration_policy_handler_parameters.h"
22 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
23 #include "components/policy/core/common/policy_details.h"
24 #include "components/policy/core/common/policy_map.h"
25 #include "components/policy/core/common/policy_pref_names.h"
26 #include "components/policy/core/common/schema.h"
27 #include "components/search_engines/default_search_policy_handler.h"
28 #include "components/translate/core/common/translate_pref_names.h"
29 #include "policy/policy_constants.h"
31 #if defined(OS_ANDROID)
32 #include "chrome/browser/search/contextual_search_policy_handler_android.h"
36 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
37 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
38 #include "chrome/browser/policy/javascript_policy_handler.h"
39 #include "chrome/browser/policy/network_prediction_policy_handler.h"
40 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
41 #include "chrome/browser/sync/sync_policy_handler.h"
44 #if defined(OS_CHROMEOS)
45 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
46 #include "chromeos/chromeos_pref_names.h"
47 #include "chromeos/dbus/power_policy_controller.h"
48 #include "components/user_manager/user.h"
49 #include "components/user_manager/user_manager.h"
50 #include "ui/chromeos/accessibility_types.h"
53 #if !defined(OS_ANDROID) && !defined(OS_IOS)
54 #include "chrome/browser/download/download_dir_policy_handler.h"
57 #if defined(ENABLE_EXTENSIONS)
58 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
59 #include "chrome/browser/extensions/extension_management_constants.h"
60 #include "chrome/browser/extensions/policy_handlers.h"
61 #include "extensions/browser/pref_names.h"
62 #include "extensions/common/manifest.h"
69 // List of policy types to preference names. This is used for simple policies
70 // that directly map to a single preference.
71 const PolicyToPreferenceMapEntry kSimplePolicyMap
[] = {
72 { key::kHomepageLocation
,
74 base::Value::TYPE_STRING
},
75 { key::kHomepageIsNewTabPage
,
76 prefs::kHomePageIsNewTabPage
,
77 base::Value::TYPE_BOOLEAN
},
78 { key::kRestoreOnStartupURLs
,
79 prefs::kURLsToRestoreOnStartup
,
80 base::Value::TYPE_LIST
},
81 { key::kAlternateErrorPagesEnabled
,
82 prefs::kAlternateErrorPagesEnabled
,
83 base::Value::TYPE_BOOLEAN
},
84 { key::kSearchSuggestEnabled
,
85 prefs::kSearchSuggestEnabled
,
86 base::Value::TYPE_BOOLEAN
},
87 { key::kBuiltInDnsClientEnabled
,
88 prefs::kBuiltInDnsClientEnabled
,
89 base::Value::TYPE_BOOLEAN
},
90 { key::kWPADQuickCheckEnabled
,
91 prefs::kQuickCheckEnabled
,
92 base::Value::TYPE_BOOLEAN
},
95 base::Value::TYPE_BOOLEAN
},
96 { key::kSafeBrowsingEnabled
,
97 prefs::kSafeBrowsingEnabled
,
98 base::Value::TYPE_BOOLEAN
},
99 { key::kForceGoogleSafeSearch
,
100 prefs::kForceGoogleSafeSearch
,
101 base::Value::TYPE_BOOLEAN
},
102 { key::kForceYouTubeSafetyMode
,
103 prefs::kForceYouTubeSafetyMode
,
104 base::Value::TYPE_BOOLEAN
},
105 { key::kPasswordManagerEnabled
,
106 password_manager::prefs::kPasswordManagerSavingEnabled
,
107 base::Value::TYPE_BOOLEAN
},
108 { key::kPasswordManagerAllowShowPasswords
,
109 password_manager::prefs::kPasswordManagerAllowShowPasswords
,
110 base::Value::TYPE_BOOLEAN
},
111 { key::kPrintingEnabled
,
112 prefs::kPrintingEnabled
,
113 base::Value::TYPE_BOOLEAN
},
114 { key::kDisablePrintPreview
,
115 prefs::kPrintPreviewDisabled
,
116 base::Value::TYPE_BOOLEAN
},
117 { key::kMetricsReportingEnabled
,
118 prefs::kMetricsReportingEnabled
,
119 base::Value::TYPE_BOOLEAN
},
120 { key::kApplicationLocaleValue
,
121 prefs::kApplicationLocale
,
122 base::Value::TYPE_STRING
},
123 { key::kDisabledPlugins
,
124 prefs::kPluginsDisabledPlugins
,
125 base::Value::TYPE_LIST
},
126 { key::kDisabledPluginsExceptions
,
127 prefs::kPluginsDisabledPluginsExceptions
,
128 base::Value::TYPE_LIST
},
129 { key::kEnabledPlugins
,
130 prefs::kPluginsEnabledPlugins
,
131 base::Value::TYPE_LIST
},
132 { key::kShowHomeButton
,
133 prefs::kShowHomeButton
,
134 base::Value::TYPE_BOOLEAN
},
135 { key::kSavingBrowserHistoryDisabled
,
136 prefs::kSavingBrowserHistoryDisabled
,
137 base::Value::TYPE_BOOLEAN
},
138 { key::kAllowDeletingBrowserHistory
,
139 prefs::kAllowDeletingBrowserHistory
,
140 base::Value::TYPE_BOOLEAN
},
141 { key::kDeveloperToolsDisabled
,
142 prefs::kDevToolsDisabled
,
143 base::Value::TYPE_BOOLEAN
},
144 { key::kBlockThirdPartyCookies
,
145 prefs::kBlockThirdPartyCookies
,
146 base::Value::TYPE_BOOLEAN
},
147 { key::kDefaultCookiesSetting
,
148 prefs::kManagedDefaultCookiesSetting
,
149 base::Value::TYPE_INTEGER
},
150 { key::kDefaultImagesSetting
,
151 prefs::kManagedDefaultImagesSetting
,
152 base::Value::TYPE_INTEGER
},
153 { key::kDefaultPluginsSetting
,
154 prefs::kManagedDefaultPluginsSetting
,
155 base::Value::TYPE_INTEGER
},
156 { key::kDefaultPopupsSetting
,
157 prefs::kManagedDefaultPopupsSetting
,
158 base::Value::TYPE_INTEGER
},
159 { key::kAutoSelectCertificateForUrls
,
160 prefs::kManagedAutoSelectCertificateForUrls
,
161 base::Value::TYPE_LIST
},
162 { key::kCookiesAllowedForUrls
,
163 prefs::kManagedCookiesAllowedForUrls
,
164 base::Value::TYPE_LIST
},
165 { key::kCookiesBlockedForUrls
,
166 prefs::kManagedCookiesBlockedForUrls
,
167 base::Value::TYPE_LIST
},
168 { key::kCookiesSessionOnlyForUrls
,
169 prefs::kManagedCookiesSessionOnlyForUrls
,
170 base::Value::TYPE_LIST
},
171 { key::kImagesAllowedForUrls
,
172 prefs::kManagedImagesAllowedForUrls
,
173 base::Value::TYPE_LIST
},
174 { key::kImagesBlockedForUrls
,
175 prefs::kManagedImagesBlockedForUrls
,
176 base::Value::TYPE_LIST
},
177 { key::kJavaScriptAllowedForUrls
,
178 prefs::kManagedJavaScriptAllowedForUrls
,
179 base::Value::TYPE_LIST
},
180 { key::kJavaScriptBlockedForUrls
,
181 prefs::kManagedJavaScriptBlockedForUrls
,
182 base::Value::TYPE_LIST
},
183 { key::kPluginsAllowedForUrls
,
184 prefs::kManagedPluginsAllowedForUrls
,
185 base::Value::TYPE_LIST
},
186 { key::kPluginsBlockedForUrls
,
187 prefs::kManagedPluginsBlockedForUrls
,
188 base::Value::TYPE_LIST
},
189 { key::kPopupsAllowedForUrls
,
190 prefs::kManagedPopupsAllowedForUrls
,
191 base::Value::TYPE_LIST
},
192 { key::kPopupsBlockedForUrls
,
193 prefs::kManagedPopupsBlockedForUrls
,
194 base::Value::TYPE_LIST
},
195 { key::kNotificationsAllowedForUrls
,
196 prefs::kManagedNotificationsAllowedForUrls
,
197 base::Value::TYPE_LIST
},
198 { key::kNotificationsBlockedForUrls
,
199 prefs::kManagedNotificationsBlockedForUrls
,
200 base::Value::TYPE_LIST
},
201 { key::kDefaultNotificationsSetting
,
202 prefs::kManagedDefaultNotificationsSetting
,
203 base::Value::TYPE_INTEGER
},
204 { key::kDefaultGeolocationSetting
,
205 prefs::kManagedDefaultGeolocationSetting
,
206 base::Value::TYPE_INTEGER
},
207 { key::kSigninAllowed
,
208 prefs::kSigninAllowed
,
209 base::Value::TYPE_BOOLEAN
},
210 { key::kDisableSSLRecordSplitting
,
211 prefs::kDisableSSLRecordSplitting
,
212 base::Value::TYPE_BOOLEAN
},
213 { key::kEnableOnlineRevocationChecks
,
214 prefs::kCertRevocationCheckingEnabled
,
215 base::Value::TYPE_BOOLEAN
},
216 { key::kRequireOnlineRevocationChecksForLocalAnchors
,
217 prefs::kCertRevocationCheckingRequiredLocalAnchors
,
218 base::Value::TYPE_BOOLEAN
},
221 base::Value::TYPE_STRING
},
222 { key::kDisableAuthNegotiateCnameLookup
,
223 prefs::kDisableAuthNegotiateCnameLookup
,
224 base::Value::TYPE_BOOLEAN
},
225 { key::kEnableAuthNegotiatePort
,
226 prefs::kEnableAuthNegotiatePort
,
227 base::Value::TYPE_BOOLEAN
},
228 { key::kAuthServerWhitelist
,
229 prefs::kAuthServerWhitelist
,
230 base::Value::TYPE_STRING
},
231 { key::kAuthNegotiateDelegateWhitelist
,
232 prefs::kAuthNegotiateDelegateWhitelist
,
233 base::Value::TYPE_STRING
},
234 { key::kGSSAPILibraryName
,
235 prefs::kGSSAPILibraryName
,
236 base::Value::TYPE_STRING
},
237 { key::kAllowCrossOriginAuthPrompt
,
238 prefs::kAllowCrossOriginAuthPrompt
,
239 base::Value::TYPE_BOOLEAN
},
240 { key::kDisable3DAPIs
,
241 prefs::kDisable3DAPIs
,
242 base::Value::TYPE_BOOLEAN
},
243 { key::kDisablePluginFinder
,
244 prefs::kDisablePluginFinder
,
245 base::Value::TYPE_BOOLEAN
},
246 { key::kDiskCacheSize
,
247 prefs::kDiskCacheSize
,
248 base::Value::TYPE_INTEGER
},
249 { key::kMediaCacheSize
,
250 prefs::kMediaCacheSize
,
251 base::Value::TYPE_INTEGER
},
252 { key::kPolicyRefreshRate
,
253 policy_prefs::kUserPolicyRefreshRate
,
254 base::Value::TYPE_INTEGER
},
255 { key::kDevicePolicyRefreshRate
,
256 prefs::kDevicePolicyRefreshRate
,
257 base::Value::TYPE_INTEGER
},
258 { key::kDefaultBrowserSettingEnabled
,
259 prefs::kDefaultBrowserSettingEnabled
,
260 base::Value::TYPE_BOOLEAN
},
261 { key::kCloudPrintProxyEnabled
,
262 prefs::kCloudPrintProxyEnabled
,
263 base::Value::TYPE_BOOLEAN
},
264 { key::kCloudPrintSubmitEnabled
,
265 prefs::kCloudPrintSubmitEnabled
,
266 base::Value::TYPE_BOOLEAN
},
267 { key::kTranslateEnabled
,
268 prefs::kEnableTranslate
,
269 base::Value::TYPE_BOOLEAN
},
270 { key::kAllowOutdatedPlugins
,
271 prefs::kPluginsAllowOutdated
,
272 base::Value::TYPE_BOOLEAN
},
273 { key::kAlwaysAuthorizePlugins
,
274 prefs::kPluginsAlwaysAuthorize
,
275 base::Value::TYPE_BOOLEAN
},
276 { key::kBookmarkBarEnabled
,
277 bookmarks::prefs::kShowBookmarkBar
,
278 base::Value::TYPE_BOOLEAN
},
279 { key::kEditBookmarksEnabled
,
280 bookmarks::prefs::kEditBookmarksEnabled
,
281 base::Value::TYPE_BOOLEAN
},
282 { key::kShowAppsShortcutInBookmarkBar
,
283 bookmarks::prefs::kShowAppsShortcutInBookmarkBar
,
284 base::Value::TYPE_BOOLEAN
},
285 { key::kAllowFileSelectionDialogs
,
286 prefs::kAllowFileSelectionDialogs
,
287 base::Value::TYPE_BOOLEAN
},
288 { key::kImportBookmarks
,
289 prefs::kImportBookmarks
,
290 base::Value::TYPE_BOOLEAN
},
291 { key::kImportHistory
,
292 prefs::kImportHistory
,
293 base::Value::TYPE_BOOLEAN
},
294 { key::kImportHomepage
,
295 prefs::kImportHomepage
,
296 base::Value::TYPE_BOOLEAN
},
297 { key::kImportSearchEngine
,
298 prefs::kImportSearchEngine
,
299 base::Value::TYPE_BOOLEAN
},
300 { key::kImportSavedPasswords
,
301 prefs::kImportSavedPasswords
,
302 base::Value::TYPE_BOOLEAN
},
303 { key::kImportAutofillFormData
,
304 prefs::kImportAutofillFormData
,
305 base::Value::TYPE_BOOLEAN
},
306 { key::kMaxConnectionsPerProxy
,
307 prefs::kMaxConnectionsPerProxy
,
308 base::Value::TYPE_INTEGER
},
309 { key::kURLWhitelist
,
310 policy_prefs::kUrlWhitelist
,
311 base::Value::TYPE_LIST
},
312 { key::kRestrictSigninToPattern
,
313 prefs::kGoogleServicesUsernamePattern
,
314 base::Value::TYPE_STRING
},
315 { key::kDefaultMediaStreamSetting
,
316 prefs::kManagedDefaultMediaStreamSetting
,
317 base::Value::TYPE_INTEGER
},
318 { key::kDisableSafeBrowsingProceedAnyway
,
319 prefs::kSafeBrowsingProceedAnywayDisabled
,
320 base::Value::TYPE_BOOLEAN
},
321 { key::kSafeBrowsingExtendedReportingOptInAllowed
,
322 prefs::kSafeBrowsingExtendedReportingOptInAllowed
,
323 base::Value::TYPE_BOOLEAN
},
324 { key::kSSLErrorOverrideAllowed
,
325 prefs::kSSLErrorOverrideAllowed
,
326 base::Value::TYPE_BOOLEAN
},
328 #if defined(ENABLE_SPELLCHECK)
329 { key::kSpellCheckServiceEnabled
,
330 prefs::kSpellCheckUseSpellingService
,
331 base::Value::TYPE_BOOLEAN
},
332 #endif // defined(ENABLE_SPELLCHECK)
334 { key::kDisableScreenshots
,
335 prefs::kDisableScreenshots
,
336 base::Value::TYPE_BOOLEAN
},
337 { key::kAudioCaptureAllowed
,
338 prefs::kAudioCaptureAllowed
,
339 base::Value::TYPE_BOOLEAN
},
340 { key::kVideoCaptureAllowed
,
341 prefs::kVideoCaptureAllowed
,
342 base::Value::TYPE_BOOLEAN
},
343 { key::kAudioCaptureAllowedUrls
,
344 prefs::kAudioCaptureAllowedUrls
,
345 base::Value::TYPE_LIST
},
346 { key::kVideoCaptureAllowedUrls
,
347 prefs::kVideoCaptureAllowedUrls
,
348 base::Value::TYPE_LIST
},
349 { key::kHideWebStoreIcon
,
350 prefs::kHideWebStoreIcon
,
351 base::Value::TYPE_BOOLEAN
},
352 { key::kVariationsRestrictParameter
,
353 prefs::kVariationsRestrictParameter
,
354 base::Value::TYPE_STRING
},
355 { key::kSupervisedUserCreationEnabled
,
356 prefs::kSupervisedUserCreationAllowed
,
357 base::Value::TYPE_BOOLEAN
},
358 { key::kForceEphemeralProfiles
,
359 prefs::kForceEphemeralProfiles
,
360 base::Value::TYPE_BOOLEAN
},
361 { key::kSSLVersionFallbackMin
,
362 prefs::kSSLVersionFallbackMin
,
363 base::Value::TYPE_STRING
},
365 #if !defined(OS_MACOSX) && !defined(OS_IOS)
366 { key::kFullscreenAllowed
,
367 prefs::kFullscreenAllowed
,
368 base::Value::TYPE_BOOLEAN
},
369 #if defined(ENABLE_EXTENSIONS)
370 { key::kFullscreenAllowed
,
371 extensions::pref_names::kAppFullscreenAllowed
,
372 base::Value::TYPE_BOOLEAN
},
373 #endif // defined(ENABLE_EXTENSIONS)
374 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
376 #if defined(OS_CHROMEOS)
377 { key::kChromeOsLockOnIdleSuspend
,
378 prefs::kEnableAutoScreenLock
,
379 base::Value::TYPE_BOOLEAN
},
380 { key::kChromeOsReleaseChannel
,
381 prefs::kChromeOsReleaseChannel
,
382 base::Value::TYPE_STRING
},
383 { key::kDriveDisabled
,
384 prefs::kDisableDrive
,
385 base::Value::TYPE_BOOLEAN
},
386 { key::kDriveDisabledOverCellular
,
387 prefs::kDisableDriveOverCellular
,
388 base::Value::TYPE_BOOLEAN
},
389 { key::kExternalStorageDisabled
,
390 prefs::kExternalStorageDisabled
,
391 base::Value::TYPE_BOOLEAN
},
392 { key::kAudioOutputAllowed
,
393 chromeos::prefs::kAudioOutputAllowed
,
394 base::Value::TYPE_BOOLEAN
},
395 { key::kShowLogoutButtonInTray
,
396 prefs::kShowLogoutButtonInTray
,
397 base::Value::TYPE_BOOLEAN
},
398 { key::kShelfAutoHideBehavior
,
399 prefs::kShelfAutoHideBehaviorLocal
,
400 base::Value::TYPE_STRING
},
401 { key::kSessionLengthLimit
,
402 prefs::kSessionLengthLimit
,
403 base::Value::TYPE_INTEGER
},
404 { key::kWaitForInitialUserActivity
,
405 prefs::kSessionWaitForInitialUserActivity
,
406 base::Value::TYPE_BOOLEAN
},
407 { key::kPowerManagementUsesAudioActivity
,
408 prefs::kPowerUseAudioActivity
,
409 base::Value::TYPE_BOOLEAN
},
410 { key::kPowerManagementUsesVideoActivity
,
411 prefs::kPowerUseVideoActivity
,
412 base::Value::TYPE_BOOLEAN
},
413 { key::kAllowScreenWakeLocks
,
414 prefs::kPowerAllowScreenWakeLocks
,
415 base::Value::TYPE_BOOLEAN
},
416 { key::kWaitForInitialUserActivity
,
417 prefs::kPowerWaitForInitialUserActivity
,
418 base::Value::TYPE_BOOLEAN
},
419 { key::kTermsOfServiceURL
,
420 prefs::kTermsOfServiceURL
,
421 base::Value::TYPE_STRING
},
422 { key::kShowAccessibilityOptionsInSystemTrayMenu
,
423 prefs::kShouldAlwaysShowAccessibilityMenu
,
424 base::Value::TYPE_BOOLEAN
},
425 { key::kLargeCursorEnabled
,
426 prefs::kAccessibilityLargeCursorEnabled
,
427 base::Value::TYPE_BOOLEAN
},
428 { key::kSpokenFeedbackEnabled
,
429 prefs::kAccessibilitySpokenFeedbackEnabled
,
430 base::Value::TYPE_BOOLEAN
},
431 { key::kHighContrastEnabled
,
432 prefs::kAccessibilityHighContrastEnabled
,
433 base::Value::TYPE_BOOLEAN
},
434 { key::kVirtualKeyboardEnabled
,
435 prefs::kAccessibilityVirtualKeyboardEnabled
,
436 base::Value::TYPE_BOOLEAN
},
437 { key::kDeviceLoginScreenDefaultLargeCursorEnabled
,
439 base::Value::TYPE_BOOLEAN
},
440 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled
,
442 base::Value::TYPE_BOOLEAN
},
443 { key::kDeviceLoginScreenDefaultHighContrastEnabled
,
445 base::Value::TYPE_BOOLEAN
},
446 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled
,
448 base::Value::TYPE_BOOLEAN
},
449 { key::kRebootAfterUpdate
,
450 prefs::kRebootAfterUpdate
,
451 base::Value::TYPE_BOOLEAN
},
452 { key::kAttestationEnabledForUser
,
453 prefs::kAttestationEnabled
,
454 base::Value::TYPE_BOOLEAN
},
455 { key::kChromeOsMultiProfileUserBehavior
,
456 prefs::kMultiProfileUserBehavior
,
457 base::Value::TYPE_STRING
},
458 { key::kKeyboardDefaultToFunctionKeys
,
459 prefs::kLanguageSendFunctionKeys
,
460 base::Value::TYPE_BOOLEAN
},
461 { key::kTouchVirtualKeyboardEnabled
,
462 prefs::kTouchVirtualKeyboardEnabled
,
463 base::Value::TYPE_BOOLEAN
},
464 { key::kEasyUnlockAllowed
,
465 prefs::kEasyUnlockAllowed
,
466 base::Value::TYPE_BOOLEAN
},
467 { key::kCaptivePortalAuthenticationIgnoresProxy
,
468 prefs::kCaptivePortalAuthenticationIgnoresProxy
,
469 base::Value::TYPE_BOOLEAN
},
470 { key::kForceMaximizeOnFirstRun
,
471 prefs::kForceMaximizeOnFirstRun
,
472 base::Value::TYPE_BOOLEAN
},
473 #endif // defined(OS_CHROMEOS)
475 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
476 { key::kBackgroundModeEnabled
,
477 prefs::kBackgroundModeEnabled
,
478 base::Value::TYPE_BOOLEAN
},
479 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
481 #if defined(OS_ANDROID)
482 { key::kDataCompressionProxyEnabled
,
483 data_reduction_proxy::prefs::kDataReductionProxyEnabled
,
484 base::Value::TYPE_BOOLEAN
},
485 #endif // defined(OS_ANDROID)
487 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
488 { key::kNativeMessagingUserLevelHosts
,
489 extensions::pref_names::kNativeMessagingUserLevelHosts
,
490 base::Value::TYPE_BOOLEAN
},
491 { key::kBrowserGuestModeEnabled
,
492 prefs::kBrowserGuestModeEnabled
,
493 base::Value::TYPE_BOOLEAN
},
494 { key::kBrowserAddPersonEnabled
,
495 prefs::kBrowserAddPersonEnabled
,
496 base::Value::TYPE_BOOLEAN
},
497 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
500 class ForceSafeSearchPolicyHandler
: public TypeCheckingPolicyHandler
{
502 ForceSafeSearchPolicyHandler()
503 : TypeCheckingPolicyHandler(key::kForceSafeSearch
,
504 base::Value::TYPE_BOOLEAN
) {}
505 ~ForceSafeSearchPolicyHandler() override
{}
507 // ConfigurationPolicyHandler implementation:
508 void ApplyPolicySettings(const PolicyMap
& policies
,
509 PrefValueMap
* prefs
) override
{
510 // If either of the new GoogleSafeSearch or YouTubeSafetyMode policies is
511 // defined, then this one should be ignored. crbug.com/476908
512 // Note: Those policies are declared in kSimplePolicyMap above.
513 if (policies
.GetValue(key::kForceGoogleSafeSearch
) ||
514 policies
.GetValue(key::kForceYouTubeSafetyMode
)) {
517 const base::Value
* value
= policies
.GetValue(policy_name());
519 prefs
->SetValue(prefs::kForceGoogleSafeSearch
, value
->DeepCopy());
520 prefs
->SetValue(prefs::kForceYouTubeSafetyMode
, value
->DeepCopy());
525 DISALLOW_COPY_AND_ASSIGN(ForceSafeSearchPolicyHandler
);
528 #if defined(ENABLE_EXTENSIONS)
529 void GetExtensionAllowedTypesMap(
530 ScopedVector
<StringMappingListPolicyHandler::MappingEntry
>* result
) {
531 // Mapping from extension type names to Manifest::Type.
532 for (size_t index
= 0;
533 index
< extensions::schema_constants::kAllowedTypesMapSize
;
535 const extensions::schema_constants::AllowedTypesMapEntry
& entry
=
536 extensions::schema_constants::kAllowedTypesMap
[index
];
537 result
->push_back(new StringMappingListPolicyHandler::MappingEntry(
539 scoped_ptr
<base::Value
>(
540 new base::FundamentalValue(entry
.manifest_type
))));
546 void GetDeprecatedFeaturesMap(
547 ScopedVector
<StringMappingListPolicyHandler::MappingEntry
>* result
) {
548 // Maps feature tags as specified in policy to the corresponding switch to
551 #endif // !defined(OS_IOS)
555 void PopulatePolicyHandlerParameters(PolicyHandlerParameters
* parameters
) {
556 #if defined(OS_CHROMEOS)
557 if (user_manager::UserManager::IsInitialized()) {
558 const user_manager::User
* user
=
559 user_manager::UserManager::Get()->GetActiveUser();
561 parameters
->user_id_hash
= user
->username_hash();
566 scoped_ptr
<ConfigurationPolicyHandlerList
> BuildHandlerList(
567 const Schema
& chrome_schema
) {
568 scoped_ptr
<ConfigurationPolicyHandlerList
> handlers(
569 new ConfigurationPolicyHandlerList(
570 base::Bind(&PopulatePolicyHandlerParameters
),
571 base::Bind(&GetChromePolicyDetails
)));
572 for (size_t i
= 0; i
< arraysize(kSimplePolicyMap
); ++i
) {
573 handlers
->AddHandler(make_scoped_ptr(new SimplePolicyHandler(
574 kSimplePolicyMap
[i
].policy_name
, kSimplePolicyMap
[i
].preference_path
,
575 kSimplePolicyMap
[i
].value_type
)));
578 handlers
->AddHandler(make_scoped_ptr(new AutofillPolicyHandler()));
579 handlers
->AddHandler(make_scoped_ptr(new DefaultSearchPolicyHandler()));
580 handlers
->AddHandler(make_scoped_ptr(new ForceSafeSearchPolicyHandler()));
581 handlers
->AddHandler(make_scoped_ptr(new IncognitoModePolicyHandler()));
582 handlers
->AddHandler(
583 make_scoped_ptr(new ManagedBookmarksPolicyHandler(chrome_schema
)));
584 handlers
->AddHandler(make_scoped_ptr(new ProxyPolicyHandler()));
585 handlers
->AddHandler(make_scoped_ptr(new URLBlacklistPolicyHandler()));
587 #if defined(OS_ANDROID)
588 handlers
->AddHandler(
589 make_scoped_ptr(new ContextualSearchPolicyHandlerAndroid()));
593 handlers
->AddHandler(
594 make_scoped_ptr(new FileSelectionDialogsPolicyHandler()));
595 handlers
->AddHandler(make_scoped_ptr(new JavascriptPolicyHandler()));
596 handlers
->AddHandler(make_scoped_ptr(new NetworkPredictionPolicyHandler()));
597 handlers
->AddHandler(make_scoped_ptr(new RestoreOnStartupPolicyHandler()));
598 handlers
->AddHandler(make_scoped_ptr(new browser_sync::SyncPolicyHandler()));
600 handlers
->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
601 key::kEnableDeprecatedWebPlatformFeatures
,
602 prefs::kEnableDeprecatedWebPlatformFeatures
,
603 base::Bind(GetDeprecatedFeaturesMap
))));
604 #endif // !defined(OS_IOS)
606 #if defined(ENABLE_EXTENSIONS)
607 handlers
->AddHandler(
608 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
609 key::kExtensionInstallWhitelist
,
610 extensions::pref_names::kInstallAllowList
, false)));
611 handlers
->AddHandler(
612 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
613 key::kExtensionInstallBlacklist
,
614 extensions::pref_names::kInstallDenyList
, true)));
615 handlers
->AddHandler(make_scoped_ptr(
616 new extensions::ExtensionInstallForcelistPolicyHandler()));
617 handlers
->AddHandler(
618 make_scoped_ptr(new extensions::ExtensionURLPatternListPolicyHandler(
619 key::kExtensionInstallSources
,
620 extensions::pref_names::kAllowedInstallSites
)));
621 handlers
->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
622 key::kExtensionAllowedTypes
, extensions::pref_names::kAllowedTypes
,
623 base::Bind(GetExtensionAllowedTypesMap
))));
624 handlers
->AddHandler(make_scoped_ptr(
625 new extensions::ExtensionSettingsPolicyHandler(chrome_schema
)));
628 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
629 handlers
->AddHandler(make_scoped_ptr(new DiskCacheDirPolicyHandler()));
631 handlers
->AddHandler(
632 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
633 key::kNativeMessagingWhitelist
,
634 extensions::pref_names::kNativeMessagingWhitelist
, false)));
635 handlers
->AddHandler(
636 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
637 key::kNativeMessagingBlacklist
,
638 extensions::pref_names::kNativeMessagingBlacklist
, true)));
639 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
641 #if !defined(OS_ANDROID) && !defined(OS_IOS)
642 handlers
->AddHandler(make_scoped_ptr(new DownloadDirPolicyHandler
));
644 handlers
->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
645 key::kRegisteredProtocolHandlers
,
646 prefs::kPolicyRegisteredProtocolHandlers
, chrome_schema
, SCHEMA_STRICT
,
647 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
648 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
651 #if defined(OS_CHROMEOS)
652 handlers
->AddHandler(
653 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
654 key::kAttestationExtensionWhitelist
,
655 prefs::kAttestationExtensionWhitelist
, false)));
656 handlers
->AddHandler(make_scoped_ptr(
657 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
658 handlers
->AddHandler(make_scoped_ptr(
659 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
660 handlers
->AddHandler(make_scoped_ptr(new PinnedLauncherAppsPolicyHandler()));
661 handlers
->AddHandler(make_scoped_ptr(new ScreenMagnifierPolicyHandler()));
662 handlers
->AddHandler(make_scoped_ptr(
663 new LoginScreenPowerManagementPolicyHandler(chrome_schema
)));
665 ScopedVector
<ConfigurationPolicyHandler
>
666 power_management_idle_legacy_policies
;
667 power_management_idle_legacy_policies
.push_back(
668 new IntRangePolicyHandler(key::kScreenDimDelayAC
,
669 prefs::kPowerAcScreenDimDelayMs
,
673 power_management_idle_legacy_policies
.push_back(
674 new IntRangePolicyHandler(key::kScreenOffDelayAC
,
675 prefs::kPowerAcScreenOffDelayMs
,
679 power_management_idle_legacy_policies
.push_back(
680 new IntRangePolicyHandler(key::kIdleWarningDelayAC
,
681 prefs::kPowerAcIdleWarningDelayMs
,
685 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
686 key::kIdleDelayAC
, prefs::kPowerAcIdleDelayMs
, 0, INT_MAX
, true));
687 power_management_idle_legacy_policies
.push_back(
688 new IntRangePolicyHandler(key::kScreenDimDelayBattery
,
689 prefs::kPowerBatteryScreenDimDelayMs
,
693 power_management_idle_legacy_policies
.push_back(
694 new IntRangePolicyHandler(key::kScreenOffDelayBattery
,
695 prefs::kPowerBatteryScreenOffDelayMs
,
699 power_management_idle_legacy_policies
.push_back(
700 new IntRangePolicyHandler(key::kIdleWarningDelayBattery
,
701 prefs::kPowerBatteryIdleWarningDelayMs
,
705 power_management_idle_legacy_policies
.push_back(
706 new IntRangePolicyHandler(key::kIdleDelayBattery
,
707 prefs::kPowerBatteryIdleDelayMs
,
711 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
713 prefs::kPowerAcIdleAction
,
714 chromeos::PowerPolicyController::ACTION_SUSPEND
,
715 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
717 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
718 key::kIdleActionBattery
,
719 prefs::kPowerBatteryIdleAction
,
720 chromeos::PowerPolicyController::ACTION_SUSPEND
,
721 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
723 power_management_idle_legacy_policies
.push_back(
724 new DeprecatedIdleActionHandler());
726 ScopedVector
<ConfigurationPolicyHandler
> screen_lock_legacy_policies
;
727 screen_lock_legacy_policies
.push_back(
728 new IntRangePolicyHandler(key::kScreenLockDelayAC
,
729 prefs::kPowerAcScreenLockDelayMs
,
733 screen_lock_legacy_policies
.push_back(
734 new IntRangePolicyHandler(key::kScreenLockDelayBattery
,
735 prefs::kPowerBatteryScreenLockDelayMs
,
740 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
741 key::kSAMLOfflineSigninTimeLimit
, prefs::kSAMLOfflineSigninTimeLimit
, -1,
743 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
744 key::kLidCloseAction
, prefs::kPowerLidClosedAction
,
745 chromeos::PowerPolicyController::ACTION_SUSPEND
,
746 chromeos::PowerPolicyController::ACTION_DO_NOTHING
, false)));
747 handlers
->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
748 key::kPresentationScreenDimDelayScale
,
749 prefs::kPowerPresentationScreenDimDelayFactor
, 100, INT_MAX
, true)));
750 handlers
->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
751 key::kUserActivityScreenDimDelayScale
,
752 prefs::kPowerUserActivityScreenDimDelayFactor
, 100, INT_MAX
, true)));
753 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
754 key::kUptimeLimit
, prefs::kUptimeLimit
, 3600, INT_MAX
, true)));
755 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
756 key::kDeviceLoginScreenDefaultScreenMagnifierType
, NULL
, 0,
757 ui::MAGNIFIER_FULL
, false)));
758 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
759 // policies once deprecation of legacy power management policies is done.
760 // http://crbug.com/346229
761 handlers
->AddHandler(
762 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
763 power_management_idle_legacy_policies
.Pass(),
765 new PowerManagementIdleSettingsPolicyHandler(chrome_schema
)))));
766 handlers
->AddHandler(
767 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
768 screen_lock_legacy_policies
.Pass(),
769 make_scoped_ptr(new ScreenLockDelayPolicyHandler(chrome_schema
)))));
770 handlers
->AddHandler(
771 make_scoped_ptr(new ExternalDataPolicyHandler(key::kUserAvatarImage
)));
772 handlers
->AddHandler(
773 make_scoped_ptr(new ExternalDataPolicyHandler(key::kWallpaperImage
)));
774 handlers
->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
775 key::kSessionLocales
, NULL
, chrome_schema
, SCHEMA_STRICT
,
776 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
777 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
778 #endif // defined(OS_CHROMEOS)
780 return handlers
.Pass();
783 } // namespace policy