20219a1cfec47144998eb67f4e372af68756a871
[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/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"
28
29 #if !defined(OS_IOS)
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"
39 #endif
40
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"
47 #endif
48
49 #if defined(OS_ANDROID) || defined(OS_IOS)
50 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
51 #endif
52
53 #if !defined(OS_ANDROID) && !defined(OS_IOS)
54 #include "chrome/browser/download/download_dir_policy_handler.h"
55 #endif
56
57 #if !defined(OS_MACOSX) && !defined(OS_IOS)
58 #include "apps/pref_names.h"
59 #endif
60
61 namespace policy {
62
63 namespace {
64
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,
69     prefs::kHomePage,
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 },
92   { key::kDisableSpdy,
93     prefs::kDisableSpdy,
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 },
218   { key::kAuthSchemes,
219     prefs::kAuthSchemes,
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 },
365
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)
374
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,
437     NULL,
438     base::Value::TYPE_BOOLEAN },
439   { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
440     NULL,
441     base::Value::TYPE_BOOLEAN },
442   { key::kDeviceLoginScreenDefaultHighContrastEnabled,
443     NULL,
444     base::Value::TYPE_BOOLEAN },
445   { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled,
446     NULL,
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)
461
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)
467
468 #if defined(OS_ANDROID)
469   { key::kDataCompressionProxyEnabled,
470     prefs::kSpdyProxyAuthEnabled,
471     base::Value::TYPE_BOOLEAN },
472 #endif  // defined(OS_ANDROID)
473
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)
479 };
480
481 #if !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 },
490 };
491 #endif  // !defined(OS_IOS)
492
493 }  // namespace
494
495 void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) {
496 #if defined(OS_CHROMEOS)
497   if (chromeos::UserManager::IsInitialized()) {
498     const chromeos::User* user = chromeos::UserManager::Get()->GetActiveUser();
499     if (user)
500       parameters->user_id_hash = user->username_hash();
501   }
502 #endif
503 }
504
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)));
516   }
517
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()));
528
529 #if !defined(OS_IOS)
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()));
538
539   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
540       new extensions::ExtensionListPolicyHandler(
541           key::kExtensionInstallWhitelist,
542           extensions::pref_names::kInstallAllowList,
543           false)));
544   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
545       new extensions::ExtensionListPolicyHandler(
546           key::kExtensionInstallBlacklist,
547           extensions::pref_names::kInstallDenyList,
548           true)));
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)
562
563 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
564   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
565       new DiskCacheDirPolicyHandler()));
566
567   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
568       new extensions::NativeMessagingHostListPolicyHandler(
569           key::kNativeMessagingWhitelist,
570           extensions::pref_names::kNativeMessagingWhitelist,
571           false)));
572   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
573       new extensions::NativeMessagingHostListPolicyHandler(
574           key::kNativeMessagingBlacklist,
575           extensions::pref_names::kNativeMessagingBlacklist,
576           true)));
577 #endif  // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
578
579 #if !defined(OS_ANDROID) && !defined(OS_IOS)
580   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
581       new DownloadDirPolicyHandler));
582 #endif
583
584 #if defined(OS_CHROMEOS)
585   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
586       new extensions::ExtensionListPolicyHandler(
587           key::kAttestationExtensionWhitelist,
588           prefs::kAttestationExtensionWhitelist,
589           false)));
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)));
600
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,
606                                 0,
607                                 INT_MAX,
608                                 true));
609   power_management_idle_legacy_policies.push_back(
610       new IntRangePolicyHandler(key::kScreenOffDelayAC,
611                                 prefs::kPowerAcScreenOffDelayMs,
612                                 0,
613                                 INT_MAX,
614                                 true));
615   power_management_idle_legacy_policies.push_back(
616       new IntRangePolicyHandler(key::kIdleWarningDelayAC,
617                                 prefs::kPowerAcIdleWarningDelayMs,
618                                 0,
619                                 INT_MAX,
620                                 true));
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,
626                                 0,
627                                 INT_MAX,
628                                 true));
629   power_management_idle_legacy_policies.push_back(
630       new IntRangePolicyHandler(key::kScreenOffDelayBattery,
631                                 prefs::kPowerBatteryScreenOffDelayMs,
632                                 0,
633                                 INT_MAX,
634                                 true));
635   power_management_idle_legacy_policies.push_back(
636       new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
637                                 prefs::kPowerBatteryIdleWarningDelayMs,
638                                 0,
639                                 INT_MAX,
640                                 true));
641   power_management_idle_legacy_policies.push_back(
642       new IntRangePolicyHandler(key::kIdleDelayBattery,
643                                 prefs::kPowerBatteryIdleDelayMs,
644                                 0,
645                                 INT_MAX,
646                                 true));
647   power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
648       key::kIdleActionAC,
649       prefs::kPowerAcIdleAction,
650       chromeos::PowerPolicyController::ACTION_SUSPEND,
651       chromeos::PowerPolicyController::ACTION_DO_NOTHING,
652       false));
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,
658       false));
659   power_management_idle_legacy_policies.push_back(
660       new DeprecatedIdleActionHandler());
661
662   ScopedVector<ConfigurationPolicyHandler> screen_lock_legacy_policies;
663   screen_lock_legacy_policies.push_back(
664       new IntRangePolicyHandler(key::kScreenLockDelayAC,
665                                 prefs::kPowerAcScreenLockDelayMs,
666                                 0,
667                                 INT_MAX,
668                                 true));
669   screen_lock_legacy_policies.push_back(
670       new IntRangePolicyHandler(key::kScreenLockDelayBattery,
671                                 prefs::kPowerBatteryScreenLockDelayMs,
672                                 0,
673                                 INT_MAX,
674                                 true));
675
676   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
677       new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit,
678                                 prefs::kSAMLOfflineSigninTimeLimit,
679                                 -1,
680                                 INT_MAX,
681                                 true)));
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,
688           false)));
689   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
690       new IntPercentageToDoublePolicyHandler(
691           key::kPresentationScreenDimDelayScale,
692           prefs::kPowerPresentationScreenDimDelayFactor,
693           100,
694           INT_MAX,
695           true)));
696   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
697       new IntPercentageToDoublePolicyHandler(
698           key::kUserActivityScreenDimDelayScale,
699           prefs::kPowerUserActivityScreenDimDelayFactor,
700           100,
701           INT_MAX,
702           true)));
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,
709           NULL,
710           0,
711           ash::MAGNIFIER_FULL,
712           false)));
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)
731
732 #if defined(OS_ANDROID) || defined(OS_IOS)
733   handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
734       new ManagedBookmarksPolicyHandler()));
735 #endif
736   return handlers.Pass();
737 }
738
739 }  // namespace policy