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/values.h"
10 #include "chrome/browser/net/proxy_policy_handler.h"
11 #include "chrome/browser/profiles/incognito_mode_policy_handler.h"
12 #include "chrome/browser/search_engines/default_search_policy_handler.h"
13 #include "chrome/common/pref_names.h"
14 #include "components/policy/core/browser/autofill_policy_handler.h"
15 #include "components/policy/core/browser/configuration_policy_handler.h"
16 #include "components/policy/core/browser/configuration_policy_handler_list.h"
17 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
18 #include "components/policy/core/common/policy_details.h"
19 #include "components/policy/core/common/policy_map.h"
20 #include "components/policy/core/common/policy_pref_names.h"
21 #include "components/policy/core/common/schema.h"
22 #include "components/translate/core/common/translate_pref_names.h"
23 #include "grit/component_strings.h"
24 #include "policy/policy_constants.h"
27 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
28 #include "chrome/browser/extensions/policy_handlers.h"
29 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
30 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
31 #include "chrome/browser/policy/javascript_policy_handler.h"
32 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
33 #include "chrome/browser/sync/sync_policy_handler.h"
34 #include "extensions/browser/pref_names.h"
35 #include "extensions/common/manifest.h"
38 #if defined(OS_CHROMEOS)
39 #include "ash/magnifier/magnifier_constants.h"
40 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
41 #include "chromeos/dbus/power_policy_controller.h"
42 #endif // defined(OS_CHROMEOS)
44 #if defined(OS_ANDROID)
45 #include "chrome/browser/policy/configuration_policy_handler_android.h"
46 #endif // defined(OS_ANDROID)
48 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
49 #include "chrome/browser/download/download_dir_policy_handler.h"
52 #if !defined(OS_MACOSX) && !defined(OS_IOS)
53 #include "apps/pref_names.h"
60 // List of policy types to preference names. This is used for simple policies
61 // that directly map to a single preference.
62 const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
63 { key::kHomepageLocation,
65 base::Value::TYPE_STRING },
66 { key::kHomepageIsNewTabPage,
67 prefs::kHomePageIsNewTabPage,
68 base::Value::TYPE_BOOLEAN },
69 { key::kRestoreOnStartupURLs,
70 prefs::kURLsToRestoreOnStartup,
71 base::Value::TYPE_LIST },
72 { key::kAlternateErrorPagesEnabled,
73 prefs::kAlternateErrorPagesEnabled,
74 base::Value::TYPE_BOOLEAN },
75 { key::kSearchSuggestEnabled,
76 prefs::kSearchSuggestEnabled,
77 base::Value::TYPE_BOOLEAN },
78 { key::kDnsPrefetchingEnabled,
79 prefs::kNetworkPredictionEnabled,
80 base::Value::TYPE_BOOLEAN },
81 { key::kBuiltInDnsClientEnabled,
82 prefs::kBuiltInDnsClientEnabled,
83 base::Value::TYPE_BOOLEAN },
86 base::Value::TYPE_BOOLEAN },
87 { key::kSafeBrowsingEnabled,
88 prefs::kSafeBrowsingEnabled,
89 base::Value::TYPE_BOOLEAN },
90 { key::kForceSafeSearch,
91 prefs::kForceSafeSearch,
92 base::Value::TYPE_BOOLEAN },
93 { key::kPasswordManagerEnabled,
94 prefs::kPasswordManagerEnabled,
95 base::Value::TYPE_BOOLEAN },
96 { key::kPasswordManagerAllowShowPasswords,
97 prefs::kPasswordManagerAllowShowPasswords,
98 base::Value::TYPE_BOOLEAN },
99 { key::kPrintingEnabled,
100 prefs::kPrintingEnabled,
101 base::Value::TYPE_BOOLEAN },
102 { key::kDisablePrintPreview,
103 prefs::kPrintPreviewDisabled,
104 base::Value::TYPE_BOOLEAN },
105 { key::kMetricsReportingEnabled,
106 prefs::kMetricsReportingEnabled,
107 base::Value::TYPE_BOOLEAN },
108 { key::kApplicationLocaleValue,
109 prefs::kApplicationLocale,
110 base::Value::TYPE_STRING },
111 { key::kDisabledPlugins,
112 prefs::kPluginsDisabledPlugins,
113 base::Value::TYPE_LIST },
114 { key::kDisabledPluginsExceptions,
115 prefs::kPluginsDisabledPluginsExceptions,
116 base::Value::TYPE_LIST },
117 { key::kEnabledPlugins,
118 prefs::kPluginsEnabledPlugins,
119 base::Value::TYPE_LIST },
120 { key::kShowHomeButton,
121 prefs::kShowHomeButton,
122 base::Value::TYPE_BOOLEAN },
123 { key::kSavingBrowserHistoryDisabled,
124 prefs::kSavingBrowserHistoryDisabled,
125 base::Value::TYPE_BOOLEAN },
126 { key::kAllowDeletingBrowserHistory,
127 prefs::kAllowDeletingBrowserHistory,
128 base::Value::TYPE_BOOLEAN },
129 { key::kDeveloperToolsDisabled,
130 prefs::kDevToolsDisabled,
131 base::Value::TYPE_BOOLEAN },
132 { key::kBlockThirdPartyCookies,
133 prefs::kBlockThirdPartyCookies,
134 base::Value::TYPE_BOOLEAN },
135 { key::kDefaultCookiesSetting,
136 prefs::kManagedDefaultCookiesSetting,
137 base::Value::TYPE_INTEGER },
138 { key::kDefaultImagesSetting,
139 prefs::kManagedDefaultImagesSetting,
140 base::Value::TYPE_INTEGER },
141 { key::kDefaultPluginsSetting,
142 prefs::kManagedDefaultPluginsSetting,
143 base::Value::TYPE_INTEGER },
144 { key::kDefaultPopupsSetting,
145 prefs::kManagedDefaultPopupsSetting,
146 base::Value::TYPE_INTEGER },
147 { key::kAutoSelectCertificateForUrls,
148 prefs::kManagedAutoSelectCertificateForUrls,
149 base::Value::TYPE_LIST },
150 { key::kCookiesAllowedForUrls,
151 prefs::kManagedCookiesAllowedForUrls,
152 base::Value::TYPE_LIST },
153 { key::kCookiesBlockedForUrls,
154 prefs::kManagedCookiesBlockedForUrls,
155 base::Value::TYPE_LIST },
156 { key::kCookiesSessionOnlyForUrls,
157 prefs::kManagedCookiesSessionOnlyForUrls,
158 base::Value::TYPE_LIST },
159 { key::kImagesAllowedForUrls,
160 prefs::kManagedImagesAllowedForUrls,
161 base::Value::TYPE_LIST },
162 { key::kImagesBlockedForUrls,
163 prefs::kManagedImagesBlockedForUrls,
164 base::Value::TYPE_LIST },
165 { key::kJavaScriptAllowedForUrls,
166 prefs::kManagedJavaScriptAllowedForUrls,
167 base::Value::TYPE_LIST },
168 { key::kJavaScriptBlockedForUrls,
169 prefs::kManagedJavaScriptBlockedForUrls,
170 base::Value::TYPE_LIST },
171 { key::kPluginsAllowedForUrls,
172 prefs::kManagedPluginsAllowedForUrls,
173 base::Value::TYPE_LIST },
174 { key::kPluginsBlockedForUrls,
175 prefs::kManagedPluginsBlockedForUrls,
176 base::Value::TYPE_LIST },
177 { key::kPopupsAllowedForUrls,
178 prefs::kManagedPopupsAllowedForUrls,
179 base::Value::TYPE_LIST },
180 { key::kPopupsBlockedForUrls,
181 prefs::kManagedPopupsBlockedForUrls,
182 base::Value::TYPE_LIST },
183 { key::kNotificationsAllowedForUrls,
184 prefs::kManagedNotificationsAllowedForUrls,
185 base::Value::TYPE_LIST },
186 { key::kNotificationsBlockedForUrls,
187 prefs::kManagedNotificationsBlockedForUrls,
188 base::Value::TYPE_LIST },
189 { key::kDefaultNotificationsSetting,
190 prefs::kManagedDefaultNotificationsSetting,
191 base::Value::TYPE_INTEGER },
192 { key::kDefaultGeolocationSetting,
193 prefs::kManagedDefaultGeolocationSetting,
194 base::Value::TYPE_INTEGER },
195 { key::kSigninAllowed,
196 prefs::kSigninAllowed,
197 base::Value::TYPE_BOOLEAN },
198 { key::kEnableOriginBoundCerts,
199 prefs::kEnableOriginBoundCerts,
200 base::Value::TYPE_BOOLEAN },
201 { key::kDisableSSLRecordSplitting,
202 prefs::kDisableSSLRecordSplitting,
203 base::Value::TYPE_BOOLEAN },
204 { key::kEnableOnlineRevocationChecks,
205 prefs::kCertRevocationCheckingEnabled,
206 base::Value::TYPE_BOOLEAN },
207 { key::kRequireOnlineRevocationChecksForLocalAnchors,
208 prefs::kCertRevocationCheckingRequiredLocalAnchors,
209 base::Value::TYPE_BOOLEAN },
212 base::Value::TYPE_STRING },
213 { key::kDisableAuthNegotiateCnameLookup,
214 prefs::kDisableAuthNegotiateCnameLookup,
215 base::Value::TYPE_BOOLEAN },
216 { key::kEnableAuthNegotiatePort,
217 prefs::kEnableAuthNegotiatePort,
218 base::Value::TYPE_BOOLEAN },
219 { key::kAuthServerWhitelist,
220 prefs::kAuthServerWhitelist,
221 base::Value::TYPE_STRING },
222 { key::kAuthNegotiateDelegateWhitelist,
223 prefs::kAuthNegotiateDelegateWhitelist,
224 base::Value::TYPE_STRING },
225 { key::kGSSAPILibraryName,
226 prefs::kGSSAPILibraryName,
227 base::Value::TYPE_STRING },
228 { key::kAllowCrossOriginAuthPrompt,
229 prefs::kAllowCrossOriginAuthPrompt,
230 base::Value::TYPE_BOOLEAN },
231 { key::kDisable3DAPIs,
232 prefs::kDisable3DAPIs,
233 base::Value::TYPE_BOOLEAN },
234 { key::kDisablePluginFinder,
235 prefs::kDisablePluginFinder,
236 base::Value::TYPE_BOOLEAN },
237 { key::kDiskCacheSize,
238 prefs::kDiskCacheSize,
239 base::Value::TYPE_INTEGER },
240 { key::kMediaCacheSize,
241 prefs::kMediaCacheSize,
242 base::Value::TYPE_INTEGER },
243 { key::kPolicyRefreshRate,
244 policy_prefs::kUserPolicyRefreshRate,
245 base::Value::TYPE_INTEGER },
246 { key::kDevicePolicyRefreshRate,
247 prefs::kDevicePolicyRefreshRate,
248 base::Value::TYPE_INTEGER },
249 { key::kDefaultBrowserSettingEnabled,
250 prefs::kDefaultBrowserSettingEnabled,
251 base::Value::TYPE_BOOLEAN },
252 { key::kRemoteAccessHostFirewallTraversal,
253 prefs::kRemoteAccessHostFirewallTraversal,
254 base::Value::TYPE_BOOLEAN },
255 { key::kRemoteAccessHostRequireTwoFactor,
256 prefs::kRemoteAccessHostRequireTwoFactor,
257 base::Value::TYPE_BOOLEAN },
258 { key::kRemoteAccessHostDomain,
259 prefs::kRemoteAccessHostDomain,
260 base::Value::TYPE_STRING },
261 { key::kRemoteAccessHostTalkGadgetPrefix,
262 prefs::kRemoteAccessHostTalkGadgetPrefix,
263 base::Value::TYPE_STRING },
264 { key::kRemoteAccessHostRequireCurtain,
265 prefs::kRemoteAccessHostRequireCurtain,
266 base::Value::TYPE_BOOLEAN },
267 { key::kRemoteAccessHostAllowClientPairing,
268 prefs::kRemoteAccessHostAllowClientPairing,
269 base::Value::TYPE_BOOLEAN },
270 { key::kCloudPrintProxyEnabled,
271 prefs::kCloudPrintProxyEnabled,
272 base::Value::TYPE_BOOLEAN },
273 { key::kCloudPrintSubmitEnabled,
274 prefs::kCloudPrintSubmitEnabled,
275 base::Value::TYPE_BOOLEAN },
276 { key::kTranslateEnabled,
277 prefs::kEnableTranslate,
278 base::Value::TYPE_BOOLEAN },
279 { key::kAllowOutdatedPlugins,
280 prefs::kPluginsAllowOutdated,
281 base::Value::TYPE_BOOLEAN },
282 { key::kAlwaysAuthorizePlugins,
283 prefs::kPluginsAlwaysAuthorize,
284 base::Value::TYPE_BOOLEAN },
285 { key::kBookmarkBarEnabled,
286 prefs::kShowBookmarkBar,
287 base::Value::TYPE_BOOLEAN },
288 { key::kEditBookmarksEnabled,
289 prefs::kEditBookmarksEnabled,
290 base::Value::TYPE_BOOLEAN },
291 { key::kAllowFileSelectionDialogs,
292 prefs::kAllowFileSelectionDialogs,
293 base::Value::TYPE_BOOLEAN },
294 { key::kImportBookmarks,
295 prefs::kImportBookmarks,
296 base::Value::TYPE_BOOLEAN },
297 { key::kImportHistory,
298 prefs::kImportHistory,
299 base::Value::TYPE_BOOLEAN },
300 { key::kImportHomepage,
301 prefs::kImportHomepage,
302 base::Value::TYPE_BOOLEAN },
303 { key::kImportSearchEngine,
304 prefs::kImportSearchEngine,
305 base::Value::TYPE_BOOLEAN },
306 { key::kImportSavedPasswords,
307 prefs::kImportSavedPasswords,
308 base::Value::TYPE_BOOLEAN },
309 { key::kMaxConnectionsPerProxy,
310 prefs::kMaxConnectionsPerProxy,
311 base::Value::TYPE_INTEGER },
312 { key::kURLWhitelist,
313 policy_prefs::kUrlWhitelist,
314 base::Value::TYPE_LIST },
315 { key::kEnableMemoryInfo,
316 prefs::kEnableMemoryInfo,
317 base::Value::TYPE_BOOLEAN },
318 { key::kRestrictSigninToPattern,
319 prefs::kGoogleServicesUsernamePattern,
320 base::Value::TYPE_STRING },
321 { key::kDefaultMediaStreamSetting,
322 prefs::kManagedDefaultMediaStreamSetting,
323 base::Value::TYPE_INTEGER },
324 { key::kDisableSafeBrowsingProceedAnyway,
325 prefs::kSafeBrowsingProceedAnywayDisabled,
326 base::Value::TYPE_BOOLEAN },
327 { key::kSpellCheckServiceEnabled,
328 prefs::kSpellCheckUseSpellingService,
329 base::Value::TYPE_BOOLEAN },
330 { key::kDisableScreenshots,
331 prefs::kDisableScreenshots,
332 base::Value::TYPE_BOOLEAN },
333 { key::kAudioCaptureAllowed,
334 prefs::kAudioCaptureAllowed,
335 base::Value::TYPE_BOOLEAN },
336 { key::kVideoCaptureAllowed,
337 prefs::kVideoCaptureAllowed,
338 base::Value::TYPE_BOOLEAN },
339 { key::kAudioCaptureAllowedUrls,
340 prefs::kAudioCaptureAllowedUrls,
341 base::Value::TYPE_LIST },
342 { key::kVideoCaptureAllowedUrls,
343 prefs::kVideoCaptureAllowedUrls,
344 base::Value::TYPE_LIST },
345 { key::kHideWebStoreIcon,
346 prefs::kHideWebStoreIcon,
347 base::Value::TYPE_BOOLEAN },
348 { key::kVariationsRestrictParameter,
349 prefs::kVariationsRestrictParameter,
350 base::Value::TYPE_STRING },
351 { key::kSupervisedUserCreationEnabled,
352 prefs::kManagedUserCreationAllowed,
353 base::Value::TYPE_BOOLEAN },
354 { key::kForceEphemeralProfiles,
355 prefs::kForceEphemeralProfiles,
356 base::Value::TYPE_BOOLEAN },
358 #if !defined(OS_MACOSX) && !defined(OS_IOS)
359 { key::kFullscreenAllowed,
360 prefs::kFullscreenAllowed,
361 base::Value::TYPE_BOOLEAN },
362 { key::kFullscreenAllowed,
363 apps::prefs::kAppFullscreenAllowed,
364 base::Value::TYPE_BOOLEAN },
365 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
367 #if defined(OS_CHROMEOS)
368 { key::kChromeOsLockOnIdleSuspend,
369 prefs::kEnableAutoScreenLock,
370 base::Value::TYPE_BOOLEAN },
371 { key::kChromeOsReleaseChannel,
372 prefs::kChromeOsReleaseChannel,
373 base::Value::TYPE_STRING },
374 { key::kDriveDisabled,
375 prefs::kDisableDrive,
376 base::Value::TYPE_BOOLEAN },
377 { key::kDriveDisabledOverCellular,
378 prefs::kDisableDriveOverCellular,
379 base::Value::TYPE_BOOLEAN },
380 { key::kExternalStorageDisabled,
381 prefs::kExternalStorageDisabled,
382 base::Value::TYPE_BOOLEAN },
383 { key::kAudioOutputAllowed,
384 prefs::kAudioOutputAllowed,
385 base::Value::TYPE_BOOLEAN },
386 { key::kShowLogoutButtonInTray,
387 prefs::kShowLogoutButtonInTray,
388 base::Value::TYPE_BOOLEAN },
389 { key::kShelfAutoHideBehavior,
390 prefs::kShelfAutoHideBehaviorLocal,
391 base::Value::TYPE_STRING },
392 { key::kSessionLengthLimit,
393 prefs::kSessionLengthLimit,
394 base::Value::TYPE_INTEGER },
395 { key::kWaitForInitialUserActivity,
396 prefs::kSessionWaitForInitialUserActivity,
397 base::Value::TYPE_BOOLEAN },
398 { key::kPowerManagementUsesAudioActivity,
399 prefs::kPowerUseAudioActivity,
400 base::Value::TYPE_BOOLEAN },
401 { key::kPowerManagementUsesVideoActivity,
402 prefs::kPowerUseVideoActivity,
403 base::Value::TYPE_BOOLEAN },
404 { key::kAllowScreenWakeLocks,
405 prefs::kPowerAllowScreenWakeLocks,
406 base::Value::TYPE_BOOLEAN },
407 { key::kWaitForInitialUserActivity,
408 prefs::kPowerWaitForInitialUserActivity,
409 base::Value::TYPE_BOOLEAN },
410 { key::kTermsOfServiceURL,
411 prefs::kTermsOfServiceURL,
412 base::Value::TYPE_STRING },
413 { key::kShowAccessibilityOptionsInSystemTrayMenu,
414 prefs::kShouldAlwaysShowAccessibilityMenu,
415 base::Value::TYPE_BOOLEAN },
416 { key::kLargeCursorEnabled,
417 prefs::kLargeCursorEnabled,
418 base::Value::TYPE_BOOLEAN },
419 { key::kSpokenFeedbackEnabled,
420 prefs::kSpokenFeedbackEnabled,
421 base::Value::TYPE_BOOLEAN },
422 { key::kHighContrastEnabled,
423 prefs::kHighContrastEnabled,
424 base::Value::TYPE_BOOLEAN },
425 { key::kVirtualKeyboardEnabled,
426 prefs::kVirtualKeyboardEnabled,
427 base::Value::TYPE_BOOLEAN },
428 { key::kDeviceLoginScreenDefaultLargeCursorEnabled,
430 base::Value::TYPE_BOOLEAN },
431 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
433 base::Value::TYPE_BOOLEAN },
434 { key::kDeviceLoginScreenDefaultHighContrastEnabled,
436 base::Value::TYPE_BOOLEAN },
437 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled,
439 base::Value::TYPE_BOOLEAN },
440 { key::kRebootAfterUpdate,
441 prefs::kRebootAfterUpdate,
442 base::Value::TYPE_BOOLEAN },
443 { key::kAttestationEnabledForUser,
444 prefs::kAttestationEnabled,
445 base::Value::TYPE_BOOLEAN },
446 { key::kChromeOsMultiProfileUserBehavior,
447 prefs::kMultiProfileUserBehavior,
448 base::Value::TYPE_STRING },
449 #endif // defined(OS_CHROMEOS)
451 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
452 { key::kBackgroundModeEnabled,
453 prefs::kBackgroundModeEnabled,
454 base::Value::TYPE_BOOLEAN },
455 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
457 #if defined(OS_ANDROID)
458 { key::kDataCompressionProxyEnabled,
459 prefs::kSpdyProxyAuthEnabled,
460 base::Value::TYPE_BOOLEAN },
461 #endif // defined(OS_ANDROID)
463 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
464 { key::kNativeMessagingUserLevelHosts,
465 extensions::pref_names::kNativeMessagingUserLevelHosts,
466 base::Value::TYPE_BOOLEAN },
467 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
471 // Mapping from extension type names to Manifest::Type.
472 StringToIntEnumListPolicyHandler::MappingEntry kExtensionAllowedTypesMap[] = {
473 { "extension", extensions::Manifest::TYPE_EXTENSION },
474 { "theme", extensions::Manifest::TYPE_THEME },
475 { "user_script", extensions::Manifest::TYPE_USER_SCRIPT },
476 { "hosted_app", extensions::Manifest::TYPE_HOSTED_APP },
477 { "legacy_packaged_app", extensions::Manifest::TYPE_LEGACY_PACKAGED_APP },
478 { "platform_app", extensions::Manifest::TYPE_PLATFORM_APP },
480 #endif // !defined(OS_IOS)
484 scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList(
485 const Schema& chrome_schema) {
486 scoped_ptr<ConfigurationPolicyHandlerList> handlers(
487 new ConfigurationPolicyHandlerList(base::Bind(&GetChromePolicyDetails)));
488 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
489 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
490 new SimplePolicyHandler(kSimplePolicyMap[i].policy_name,
491 kSimplePolicyMap[i].preference_path,
492 kSimplePolicyMap[i].value_type)));
495 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
496 new AutofillPolicyHandler()));
497 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
498 new DefaultSearchPolicyHandler()));
499 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
500 new IncognitoModePolicyHandler()));
501 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
502 new ProxyPolicyHandler()));
503 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
504 new URLBlacklistPolicyHandler()));
507 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
508 new FileSelectionDialogsPolicyHandler()));
509 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
510 new JavascriptPolicyHandler()));
511 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
512 new RestoreOnStartupPolicyHandler()));
513 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
514 new browser_sync::SyncPolicyHandler()));
516 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
517 new extensions::ExtensionListPolicyHandler(
518 key::kExtensionInstallWhitelist,
519 extensions::pref_names::kInstallAllowList,
521 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
522 new extensions::ExtensionListPolicyHandler(
523 key::kExtensionInstallBlacklist,
524 extensions::pref_names::kInstallDenyList,
526 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
527 new extensions::ExtensionInstallForcelistPolicyHandler()));
528 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
529 new extensions::ExtensionURLPatternListPolicyHandler(
530 key::kExtensionInstallSources,
531 extensions::pref_names::kAllowedInstallSites)));
532 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
533 new StringToIntEnumListPolicyHandler(
534 key::kExtensionAllowedTypes,
535 extensions::pref_names::kAllowedTypes,
536 kExtensionAllowedTypesMap,
537 kExtensionAllowedTypesMap + arraysize(kExtensionAllowedTypesMap))));
538 #endif // !defined(OS_IOS)
540 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
541 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
542 new DiskCacheDirPolicyHandler()));
543 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
544 new DownloadDirPolicyHandler));
546 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
547 new extensions::NativeMessagingHostListPolicyHandler(
548 key::kNativeMessagingWhitelist,
549 extensions::pref_names::kNativeMessagingWhitelist,
551 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
552 new extensions::NativeMessagingHostListPolicyHandler(
553 key::kNativeMessagingBlacklist,
554 extensions::pref_names::kNativeMessagingBlacklist,
556 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
558 #if defined(OS_CHROMEOS)
559 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
560 new extensions::ExtensionListPolicyHandler(
561 key::kAttestationExtensionWhitelist,
562 prefs::kAttestationExtensionWhitelist,
564 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
565 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
566 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
567 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
568 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
569 new PinnedLauncherAppsPolicyHandler()));
570 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
571 new ScreenMagnifierPolicyHandler()));
572 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
573 new LoginScreenPowerManagementPolicyHandler));
575 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
576 new IntRangePolicyHandler(key::kScreenDimDelayAC,
577 prefs::kPowerAcScreenDimDelayMs,
581 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
582 new IntRangePolicyHandler(key::kScreenOffDelayAC,
583 prefs::kPowerAcScreenOffDelayMs,
587 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
588 new IntRangePolicyHandler(key::kScreenLockDelayAC,
589 prefs::kPowerAcScreenLockDelayMs,
593 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
594 new IntRangePolicyHandler(key::kIdleWarningDelayAC,
595 prefs::kPowerAcIdleWarningDelayMs,
599 handlers->AddHandler(
600 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
601 key::kIdleDelayAC, prefs::kPowerAcIdleDelayMs, 0, INT_MAX, true)));
602 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
603 new IntRangePolicyHandler(key::kScreenDimDelayBattery,
604 prefs::kPowerBatteryScreenDimDelayMs,
608 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
609 new IntRangePolicyHandler(key::kScreenOffDelayBattery,
610 prefs::kPowerBatteryScreenOffDelayMs,
614 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
615 new IntRangePolicyHandler(key::kScreenLockDelayBattery,
616 prefs::kPowerBatteryScreenLockDelayMs,
620 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
621 new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
622 prefs::kPowerBatteryIdleWarningDelayMs,
626 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
627 new IntRangePolicyHandler(key::kIdleDelayBattery,
628 prefs::kPowerBatteryIdleDelayMs,
632 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
633 new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit,
634 prefs::kSAMLOfflineSigninTimeLimit,
638 handlers->AddHandler(
639 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
641 prefs::kPowerAcIdleAction,
642 chromeos::PowerPolicyController::ACTION_SUSPEND,
643 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
645 handlers->AddHandler(
646 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
647 key::kIdleActionBattery,
648 prefs::kPowerBatteryIdleAction,
649 chromeos::PowerPolicyController::ACTION_SUSPEND,
650 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
652 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
653 new DeprecatedIdleActionHandler()));
654 handlers->AddHandler(
655 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
656 key::kLidCloseAction,
657 prefs::kPowerLidClosedAction,
658 chromeos::PowerPolicyController::ACTION_SUSPEND,
659 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
661 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
662 new IntPercentageToDoublePolicyHandler(
663 key::kPresentationScreenDimDelayScale,
664 prefs::kPowerPresentationScreenDimDelayFactor,
668 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
669 new IntPercentageToDoublePolicyHandler(
670 key::kUserActivityScreenDimDelayScale,
671 prefs::kPowerUserActivityScreenDimDelayFactor,
675 handlers->AddHandler(
676 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
677 key::kUptimeLimit, prefs::kUptimeLimit, 3600, INT_MAX, true)));
678 handlers->AddHandler(
679 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
680 key::kDeviceLoginScreenDefaultScreenMagnifierType,
685 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
686 new ExternalDataPolicyHandler(key::kUserAvatarImage)));
687 #endif // defined(OS_CHROMEOS)
689 #if defined(OS_ANDROID)
690 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
691 new ManagedBookmarksPolicyHandler()));
693 return handlers.Pass();
696 } // namespace policy