Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / policy / configuration_policy_handler_list_factory.cc
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.
4
5 #include "chrome/browser/policy/configuration_policy_handler_list_factory.h"
6
7 #include "base/basictypes.h"
8 #include "base/bind.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"
23
24 #if !defined(OS_IOS)
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"
34 #endif
35
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)
41
42 #if defined(OS_ANDROID)
43 #include "chrome/browser/policy/configuration_policy_handler_android.h"
44 #endif  // defined(OS_ANDROID)
45
46 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
47 #include "chrome/browser/download/download_dir_policy_handler.h"
48 #endif
49
50 #if !defined(OS_MACOSX) && !defined(OS_IOS)
51 #include "apps/pref_names.h"
52 #endif
53
54 namespace policy {
55
56 namespace {
57
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,
62     prefs::kHomePage,
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 },
82   { key::kDisableSpdy,
83     prefs::kDisableSpdy,
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 },
208   { key::kAuthSchemes,
209     prefs::kAuthSchemes,
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 },
355
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)
364
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,
424     NULL,
425     base::Value::TYPE_BOOLEAN },
426   { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
427     NULL,
428     base::Value::TYPE_BOOLEAN },
429   { key::kDeviceLoginScreenDefaultHighContrastEnabled,
430     NULL,
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)
442
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)
448
449 #if defined(OS_ANDROID)
450   { key::kDataCompressionProxyEnabled,
451     prefs::kSpdyProxyAuthEnabled,
452     base::Value::TYPE_BOOLEAN },
453 #endif  // defined(OS_ANDROID)
454
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)
460 };
461
462 #if !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 },
471 };
472 #endif  // !defined(OS_IOS)
473
474 }  // namespace
475
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)));
484   }
485
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()));
496
497 #if !defined(OS_IOS)
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()));
506
507   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
508       new extensions::ExtensionListPolicyHandler(
509           key::kExtensionInstallWhitelist,
510           extensions::pref_names::kInstallAllowList,
511           false)));
512   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
513       new extensions::ExtensionListPolicyHandler(
514           key::kExtensionInstallBlacklist,
515           extensions::pref_names::kInstallDenyList,
516           true)));
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)
530
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));
536
537   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
538       new extensions::NativeMessagingHostListPolicyHandler(
539           key::kNativeMessagingWhitelist,
540           extensions::pref_names::kNativeMessagingWhitelist,
541           false)));
542   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
543       new extensions::NativeMessagingHostListPolicyHandler(
544           key::kNativeMessagingBlacklist,
545           extensions::pref_names::kNativeMessagingBlacklist,
546           true)));
547 #endif  // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
548
549 #if defined(OS_CHROMEOS)
550   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
551       new extensions::ExtensionListPolicyHandler(
552           key::kAttestationExtensionWhitelist,
553           prefs::kAttestationExtensionWhitelist,
554           false)));
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));
565
566   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
567       new IntRangePolicyHandler(key::kScreenDimDelayAC,
568                                 prefs::kPowerAcScreenDimDelayMs,
569                                 0,
570                                 INT_MAX,
571                                 true)));
572   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
573       new IntRangePolicyHandler(key::kScreenOffDelayAC,
574                                 prefs::kPowerAcScreenOffDelayMs,
575                                 0,
576                                 INT_MAX,
577                                 true)));
578   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
579       new IntRangePolicyHandler(key::kScreenLockDelayAC,
580                                 prefs::kPowerAcScreenLockDelayMs,
581                                 0,
582                                 INT_MAX,
583                                 true)));
584   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
585       new IntRangePolicyHandler(key::kIdleWarningDelayAC,
586                                 prefs::kPowerAcIdleWarningDelayMs,
587                                 0,
588                                 INT_MAX,
589                                 true)));
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,
596                                 0,
597                                 INT_MAX,
598                                 true)));
599   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
600       new IntRangePolicyHandler(key::kScreenOffDelayBattery,
601                                 prefs::kPowerBatteryScreenOffDelayMs,
602                                 0,
603                                 INT_MAX,
604                                 true)));
605   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
606       new IntRangePolicyHandler(key::kScreenLockDelayBattery,
607                                 prefs::kPowerBatteryScreenLockDelayMs,
608                                 0,
609                                 INT_MAX,
610                                 true)));
611   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
612       new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
613                                 prefs::kPowerBatteryIdleWarningDelayMs,
614                                 0,
615                                 INT_MAX,
616                                 true)));
617   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
618       new IntRangePolicyHandler(key::kIdleDelayBattery,
619                                 prefs::kPowerBatteryIdleDelayMs,
620                                 0,
621                                 INT_MAX,
622                                 true)));
623   handlers->AddHandler(
624       make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
625           key::kIdleActionAC,
626           prefs::kPowerAcIdleAction,
627           chromeos::PowerPolicyController::ACTION_SUSPEND,
628           chromeos::PowerPolicyController::ACTION_DO_NOTHING,
629           false)));
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,
636           false)));
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,
645           false)));
646   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
647       new IntPercentageToDoublePolicyHandler(
648           key::kPresentationScreenDimDelayScale,
649           prefs::kPowerPresentationScreenDimDelayFactor,
650           100,
651           INT_MAX,
652           true)));
653   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
654       new IntPercentageToDoublePolicyHandler(
655           key::kUserActivityScreenDimDelayScale,
656           prefs::kPowerUserActivityScreenDimDelayFactor,
657           100,
658           INT_MAX,
659           true)));
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,
666           NULL,
667           0,
668           ash::MAGNIFIER_FULL,
669           false)));
670   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
671       new ExternalDataPolicyHandler(key::kUserAvatarImage)));
672 #endif  // defined(OS_CHROMEOS)
673
674 #if defined(OS_ANDROID)
675   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
676       new ManagedBookmarksPolicyHandler()));
677 #endif
678   return handlers.Pass();
679 }
680
681 }  // namespace policy