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