Upstream version 5.34.104.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 "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"
25
26 #if !defined(OS_IOS)
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"
36 #endif
37
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)
43
44 #if defined(OS_ANDROID)
45 #include "chrome/browser/policy/configuration_policy_handler_android.h"
46 #endif  // defined(OS_ANDROID)
47
48 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
49 #include "chrome/browser/download/download_dir_policy_handler.h"
50 #endif
51
52 #if !defined(OS_MACOSX) && !defined(OS_IOS)
53 #include "apps/pref_names.h"
54 #endif
55
56 namespace policy {
57
58 namespace {
59
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,
64     prefs::kHomePage,
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 },
84   { key::kDisableSpdy,
85     prefs::kDisableSpdy,
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 },
210   { key::kAuthSchemes,
211     prefs::kAuthSchemes,
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 },
357
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)
366
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,
429     NULL,
430     base::Value::TYPE_BOOLEAN },
431   { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
432     NULL,
433     base::Value::TYPE_BOOLEAN },
434   { key::kDeviceLoginScreenDefaultHighContrastEnabled,
435     NULL,
436     base::Value::TYPE_BOOLEAN },
437   { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled,
438     NULL,
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)
450
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)
456
457 #if defined(OS_ANDROID)
458   { key::kDataCompressionProxyEnabled,
459     prefs::kSpdyProxyAuthEnabled,
460     base::Value::TYPE_BOOLEAN },
461 #endif  // defined(OS_ANDROID)
462
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)
468 };
469
470 #if !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 },
479 };
480 #endif  // !defined(OS_IOS)
481
482 }  // namespace
483
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)));
493   }
494
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()));
505
506 #if !defined(OS_IOS)
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()));
515
516   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
517       new extensions::ExtensionListPolicyHandler(
518           key::kExtensionInstallWhitelist,
519           extensions::pref_names::kInstallAllowList,
520           false)));
521   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
522       new extensions::ExtensionListPolicyHandler(
523           key::kExtensionInstallBlacklist,
524           extensions::pref_names::kInstallDenyList,
525           true)));
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)
539
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));
545
546   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
547       new extensions::NativeMessagingHostListPolicyHandler(
548           key::kNativeMessagingWhitelist,
549           extensions::pref_names::kNativeMessagingWhitelist,
550           false)));
551   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
552       new extensions::NativeMessagingHostListPolicyHandler(
553           key::kNativeMessagingBlacklist,
554           extensions::pref_names::kNativeMessagingBlacklist,
555           true)));
556 #endif  // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
557
558 #if defined(OS_CHROMEOS)
559   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
560       new extensions::ExtensionListPolicyHandler(
561           key::kAttestationExtensionWhitelist,
562           prefs::kAttestationExtensionWhitelist,
563           false)));
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));
574
575   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
576       new IntRangePolicyHandler(key::kScreenDimDelayAC,
577                                 prefs::kPowerAcScreenDimDelayMs,
578                                 0,
579                                 INT_MAX,
580                                 true)));
581   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
582       new IntRangePolicyHandler(key::kScreenOffDelayAC,
583                                 prefs::kPowerAcScreenOffDelayMs,
584                                 0,
585                                 INT_MAX,
586                                 true)));
587   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
588       new IntRangePolicyHandler(key::kScreenLockDelayAC,
589                                 prefs::kPowerAcScreenLockDelayMs,
590                                 0,
591                                 INT_MAX,
592                                 true)));
593   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
594       new IntRangePolicyHandler(key::kIdleWarningDelayAC,
595                                 prefs::kPowerAcIdleWarningDelayMs,
596                                 0,
597                                 INT_MAX,
598                                 true)));
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,
605                                 0,
606                                 INT_MAX,
607                                 true)));
608   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
609       new IntRangePolicyHandler(key::kScreenOffDelayBattery,
610                                 prefs::kPowerBatteryScreenOffDelayMs,
611                                 0,
612                                 INT_MAX,
613                                 true)));
614   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
615       new IntRangePolicyHandler(key::kScreenLockDelayBattery,
616                                 prefs::kPowerBatteryScreenLockDelayMs,
617                                 0,
618                                 INT_MAX,
619                                 true)));
620   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
621       new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
622                                 prefs::kPowerBatteryIdleWarningDelayMs,
623                                 0,
624                                 INT_MAX,
625                                 true)));
626   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
627       new IntRangePolicyHandler(key::kIdleDelayBattery,
628                                 prefs::kPowerBatteryIdleDelayMs,
629                                 0,
630                                 INT_MAX,
631                                 true)));
632   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
633       new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit,
634                                 prefs::kSAMLOfflineSigninTimeLimit,
635                                 -1,
636                                 INT_MAX,
637                                 true)));
638   handlers->AddHandler(
639       make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
640           key::kIdleActionAC,
641           prefs::kPowerAcIdleAction,
642           chromeos::PowerPolicyController::ACTION_SUSPEND,
643           chromeos::PowerPolicyController::ACTION_DO_NOTHING,
644           false)));
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,
651           false)));
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,
660           false)));
661   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
662       new IntPercentageToDoublePolicyHandler(
663           key::kPresentationScreenDimDelayScale,
664           prefs::kPowerPresentationScreenDimDelayFactor,
665           100,
666           INT_MAX,
667           true)));
668   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
669       new IntPercentageToDoublePolicyHandler(
670           key::kUserActivityScreenDimDelayScale,
671           prefs::kPowerUserActivityScreenDimDelayFactor,
672           100,
673           INT_MAX,
674           true)));
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,
681           NULL,
682           0,
683           ash::MAGNIFIER_FULL,
684           false)));
685   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
686       new ExternalDataPolicyHandler(key::kUserAvatarImage)));
687 #endif  // defined(OS_CHROMEOS)
688
689 #if defined(OS_ANDROID)
690   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
691       new ManagedBookmarksPolicyHandler()));
692 #endif
693   return handlers.Pass();
694 }
695
696 }  // namespace policy