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