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