Give names to all utility processes.
[chromium-blink-merge.git] / chrome / browser / policy / configuration_policy_handler_list_factory.cc
blob0864a1bea50644e07c71225bc701c707b9a71f7c
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/policy/configuration_policy_handler_list_factory.h"
7 #include "base/basictypes.h"
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"
30 #if defined(OS_ANDROID)
31 #include "chrome/browser/search/contextual_search_policy_handler_android.h"
32 #endif
34 #if !defined(OS_IOS)
35 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
36 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
37 #include "chrome/browser/policy/javascript_policy_handler.h"
38 #include "chrome/browser/policy/network_prediction_policy_handler.h"
39 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
40 #include "chrome/browser/sync/sync_policy_handler.h"
41 #endif
43 #if defined(OS_CHROMEOS)
44 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
45 #include "chromeos/chromeos_pref_names.h"
46 #include "chromeos/dbus/power_policy_controller.h"
47 #include "components/user_manager/user.h"
48 #include "components/user_manager/user_manager.h"
49 #include "ui/chromeos/accessibility_types.h"
50 #endif
52 #if !defined(OS_ANDROID) && !defined(OS_IOS)
53 #include "chrome/browser/download/download_dir_policy_handler.h"
54 #endif
56 #if defined(ENABLE_EXTENSIONS)
57 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
58 #include "chrome/browser/extensions/extension_management_constants.h"
59 #include "chrome/browser/extensions/policy_handlers.h"
60 #include "extensions/browser/pref_names.h"
61 #include "extensions/common/manifest.h"
62 #endif
64 namespace policy {
66 namespace {
68 // List of policy types to preference names. This is used for simple policies
69 // that directly map to a single preference.
70 const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
71 { key::kHomepageLocation,
72 prefs::kHomePage,
73 base::Value::TYPE_STRING },
74 { key::kHomepageIsNewTabPage,
75 prefs::kHomePageIsNewTabPage,
76 base::Value::TYPE_BOOLEAN },
77 { key::kRestoreOnStartupURLs,
78 prefs::kURLsToRestoreOnStartup,
79 base::Value::TYPE_LIST },
80 { key::kAlternateErrorPagesEnabled,
81 prefs::kAlternateErrorPagesEnabled,
82 base::Value::TYPE_BOOLEAN },
83 { key::kSearchSuggestEnabled,
84 prefs::kSearchSuggestEnabled,
85 base::Value::TYPE_BOOLEAN },
86 { key::kBuiltInDnsClientEnabled,
87 prefs::kBuiltInDnsClientEnabled,
88 base::Value::TYPE_BOOLEAN },
89 { key::kWPADQuickCheckEnabled,
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::kForceGoogleSafeSearch,
102 prefs::kForceGoogleSafeSearch,
103 base::Value::TYPE_BOOLEAN },
104 { key::kForceYouTubeSafetyMode,
105 prefs::kForceYouTubeSafetyMode,
106 base::Value::TYPE_BOOLEAN },
107 { key::kPasswordManagerEnabled,
108 password_manager::prefs::kPasswordManagerSavingEnabled,
109 base::Value::TYPE_BOOLEAN },
110 { key::kPasswordManagerAllowShowPasswords,
111 password_manager::prefs::kPasswordManagerAllowShowPasswords,
112 base::Value::TYPE_BOOLEAN },
113 { key::kPrintingEnabled,
114 prefs::kPrintingEnabled,
115 base::Value::TYPE_BOOLEAN },
116 { key::kDisablePrintPreview,
117 prefs::kPrintPreviewDisabled,
118 base::Value::TYPE_BOOLEAN },
119 { key::kMetricsReportingEnabled,
120 prefs::kMetricsReportingEnabled,
121 base::Value::TYPE_BOOLEAN },
122 { key::kApplicationLocaleValue,
123 prefs::kApplicationLocale,
124 base::Value::TYPE_STRING },
125 { key::kDisabledPlugins,
126 prefs::kPluginsDisabledPlugins,
127 base::Value::TYPE_LIST },
128 { key::kDisabledPluginsExceptions,
129 prefs::kPluginsDisabledPluginsExceptions,
130 base::Value::TYPE_LIST },
131 { key::kEnabledPlugins,
132 prefs::kPluginsEnabledPlugins,
133 base::Value::TYPE_LIST },
134 { key::kShowHomeButton,
135 prefs::kShowHomeButton,
136 base::Value::TYPE_BOOLEAN },
137 { key::kSavingBrowserHistoryDisabled,
138 prefs::kSavingBrowserHistoryDisabled,
139 base::Value::TYPE_BOOLEAN },
140 { key::kAllowDeletingBrowserHistory,
141 prefs::kAllowDeletingBrowserHistory,
142 base::Value::TYPE_BOOLEAN },
143 { key::kDeveloperToolsDisabled,
144 prefs::kDevToolsDisabled,
145 base::Value::TYPE_BOOLEAN },
146 { key::kBlockThirdPartyCookies,
147 prefs::kBlockThirdPartyCookies,
148 base::Value::TYPE_BOOLEAN },
149 { key::kDefaultCookiesSetting,
150 prefs::kManagedDefaultCookiesSetting,
151 base::Value::TYPE_INTEGER },
152 { key::kDefaultImagesSetting,
153 prefs::kManagedDefaultImagesSetting,
154 base::Value::TYPE_INTEGER },
155 { key::kDefaultPluginsSetting,
156 prefs::kManagedDefaultPluginsSetting,
157 base::Value::TYPE_INTEGER },
158 { key::kDefaultPopupsSetting,
159 prefs::kManagedDefaultPopupsSetting,
160 base::Value::TYPE_INTEGER },
161 { key::kAutoSelectCertificateForUrls,
162 prefs::kManagedAutoSelectCertificateForUrls,
163 base::Value::TYPE_LIST },
164 { key::kCookiesAllowedForUrls,
165 prefs::kManagedCookiesAllowedForUrls,
166 base::Value::TYPE_LIST },
167 { key::kCookiesBlockedForUrls,
168 prefs::kManagedCookiesBlockedForUrls,
169 base::Value::TYPE_LIST },
170 { key::kCookiesSessionOnlyForUrls,
171 prefs::kManagedCookiesSessionOnlyForUrls,
172 base::Value::TYPE_LIST },
173 { key::kImagesAllowedForUrls,
174 prefs::kManagedImagesAllowedForUrls,
175 base::Value::TYPE_LIST },
176 { key::kImagesBlockedForUrls,
177 prefs::kManagedImagesBlockedForUrls,
178 base::Value::TYPE_LIST },
179 { key::kJavaScriptAllowedForUrls,
180 prefs::kManagedJavaScriptAllowedForUrls,
181 base::Value::TYPE_LIST },
182 { key::kJavaScriptBlockedForUrls,
183 prefs::kManagedJavaScriptBlockedForUrls,
184 base::Value::TYPE_LIST },
185 { key::kPluginsAllowedForUrls,
186 prefs::kManagedPluginsAllowedForUrls,
187 base::Value::TYPE_LIST },
188 { key::kPluginsBlockedForUrls,
189 prefs::kManagedPluginsBlockedForUrls,
190 base::Value::TYPE_LIST },
191 { key::kPopupsAllowedForUrls,
192 prefs::kManagedPopupsAllowedForUrls,
193 base::Value::TYPE_LIST },
194 { key::kPopupsBlockedForUrls,
195 prefs::kManagedPopupsBlockedForUrls,
196 base::Value::TYPE_LIST },
197 { key::kNotificationsAllowedForUrls,
198 prefs::kManagedNotificationsAllowedForUrls,
199 base::Value::TYPE_LIST },
200 { key::kNotificationsBlockedForUrls,
201 prefs::kManagedNotificationsBlockedForUrls,
202 base::Value::TYPE_LIST },
203 { key::kDefaultNotificationsSetting,
204 prefs::kManagedDefaultNotificationsSetting,
205 base::Value::TYPE_INTEGER },
206 { key::kDefaultGeolocationSetting,
207 prefs::kManagedDefaultGeolocationSetting,
208 base::Value::TYPE_INTEGER },
209 { key::kSigninAllowed,
210 prefs::kSigninAllowed,
211 base::Value::TYPE_BOOLEAN },
212 { key::kDisableSSLRecordSplitting,
213 prefs::kDisableSSLRecordSplitting,
214 base::Value::TYPE_BOOLEAN },
215 { key::kEnableOnlineRevocationChecks,
216 prefs::kCertRevocationCheckingEnabled,
217 base::Value::TYPE_BOOLEAN },
218 { key::kRequireOnlineRevocationChecksForLocalAnchors,
219 prefs::kCertRevocationCheckingRequiredLocalAnchors,
220 base::Value::TYPE_BOOLEAN },
221 { key::kAuthSchemes,
222 prefs::kAuthSchemes,
223 base::Value::TYPE_STRING },
224 { key::kDisableAuthNegotiateCnameLookup,
225 prefs::kDisableAuthNegotiateCnameLookup,
226 base::Value::TYPE_BOOLEAN },
227 { key::kEnableAuthNegotiatePort,
228 prefs::kEnableAuthNegotiatePort,
229 base::Value::TYPE_BOOLEAN },
230 { key::kAuthServerWhitelist,
231 prefs::kAuthServerWhitelist,
232 base::Value::TYPE_STRING },
233 { key::kAuthNegotiateDelegateWhitelist,
234 prefs::kAuthNegotiateDelegateWhitelist,
235 base::Value::TYPE_STRING },
236 { key::kGSSAPILibraryName,
237 prefs::kGSSAPILibraryName,
238 base::Value::TYPE_STRING },
239 { key::kAllowCrossOriginAuthPrompt,
240 prefs::kAllowCrossOriginAuthPrompt,
241 base::Value::TYPE_BOOLEAN },
242 { key::kDisable3DAPIs,
243 prefs::kDisable3DAPIs,
244 base::Value::TYPE_BOOLEAN },
245 { key::kDisablePluginFinder,
246 prefs::kDisablePluginFinder,
247 base::Value::TYPE_BOOLEAN },
248 { key::kDiskCacheSize,
249 prefs::kDiskCacheSize,
250 base::Value::TYPE_INTEGER },
251 { key::kMediaCacheSize,
252 prefs::kMediaCacheSize,
253 base::Value::TYPE_INTEGER },
254 { key::kPolicyRefreshRate,
255 policy_prefs::kUserPolicyRefreshRate,
256 base::Value::TYPE_INTEGER },
257 { key::kDevicePolicyRefreshRate,
258 prefs::kDevicePolicyRefreshRate,
259 base::Value::TYPE_INTEGER },
260 { key::kDefaultBrowserSettingEnabled,
261 prefs::kDefaultBrowserSettingEnabled,
262 base::Value::TYPE_BOOLEAN },
263 { key::kCloudPrintProxyEnabled,
264 prefs::kCloudPrintProxyEnabled,
265 base::Value::TYPE_BOOLEAN },
266 { key::kCloudPrintSubmitEnabled,
267 prefs::kCloudPrintSubmitEnabled,
268 base::Value::TYPE_BOOLEAN },
269 { key::kTranslateEnabled,
270 prefs::kEnableTranslate,
271 base::Value::TYPE_BOOLEAN },
272 { key::kAllowOutdatedPlugins,
273 prefs::kPluginsAllowOutdated,
274 base::Value::TYPE_BOOLEAN },
275 { key::kAlwaysAuthorizePlugins,
276 prefs::kPluginsAlwaysAuthorize,
277 base::Value::TYPE_BOOLEAN },
278 { key::kBookmarkBarEnabled,
279 bookmarks::prefs::kShowBookmarkBar,
280 base::Value::TYPE_BOOLEAN },
281 { key::kEditBookmarksEnabled,
282 bookmarks::prefs::kEditBookmarksEnabled,
283 base::Value::TYPE_BOOLEAN },
284 { key::kShowAppsShortcutInBookmarkBar,
285 bookmarks::prefs::kShowAppsShortcutInBookmarkBar,
286 base::Value::TYPE_BOOLEAN },
287 { key::kAllowFileSelectionDialogs,
288 prefs::kAllowFileSelectionDialogs,
289 base::Value::TYPE_BOOLEAN },
290 { key::kImportBookmarks,
291 prefs::kImportBookmarks,
292 base::Value::TYPE_BOOLEAN },
293 { key::kImportHistory,
294 prefs::kImportHistory,
295 base::Value::TYPE_BOOLEAN },
296 { key::kImportHomepage,
297 prefs::kImportHomepage,
298 base::Value::TYPE_BOOLEAN },
299 { key::kImportSearchEngine,
300 prefs::kImportSearchEngine,
301 base::Value::TYPE_BOOLEAN },
302 { key::kImportSavedPasswords,
303 prefs::kImportSavedPasswords,
304 base::Value::TYPE_BOOLEAN },
305 { key::kImportAutofillFormData,
306 prefs::kImportAutofillFormData,
307 base::Value::TYPE_BOOLEAN },
308 { key::kMaxConnectionsPerProxy,
309 prefs::kMaxConnectionsPerProxy,
310 base::Value::TYPE_INTEGER },
311 { key::kURLWhitelist,
312 policy_prefs::kUrlWhitelist,
313 base::Value::TYPE_LIST },
314 { key::kRestrictSigninToPattern,
315 prefs::kGoogleServicesUsernamePattern,
316 base::Value::TYPE_STRING },
317 { key::kDefaultMediaStreamSetting,
318 prefs::kManagedDefaultMediaStreamSetting,
319 base::Value::TYPE_INTEGER },
320 { key::kDisableSafeBrowsingProceedAnyway,
321 prefs::kSafeBrowsingProceedAnywayDisabled,
322 base::Value::TYPE_BOOLEAN },
324 #if defined(ENABLE_SPELLCHECK)
325 { key::kSpellCheckServiceEnabled,
326 prefs::kSpellCheckUseSpellingService,
327 base::Value::TYPE_BOOLEAN },
328 #endif // defined(ENABLE_SPELLCHECK)
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::kSupervisedUserCreationAllowed,
353 base::Value::TYPE_BOOLEAN },
354 { key::kForceEphemeralProfiles,
355 prefs::kForceEphemeralProfiles,
356 base::Value::TYPE_BOOLEAN },
357 { key::kSSLVersionMin,
358 prefs::kSSLVersionMin,
359 base::Value::TYPE_STRING },
360 { key::kSSLVersionFallbackMin,
361 prefs::kSSLVersionFallbackMin,
362 base::Value::TYPE_STRING },
364 #if !defined(OS_MACOSX) && !defined(OS_IOS)
365 { key::kFullscreenAllowed,
366 prefs::kFullscreenAllowed,
367 base::Value::TYPE_BOOLEAN },
368 #if defined(ENABLE_EXTENSIONS)
369 { key::kFullscreenAllowed,
370 extensions::pref_names::kAppFullscreenAllowed,
371 base::Value::TYPE_BOOLEAN },
372 #endif // defined(ENABLE_EXTENSIONS)
373 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
375 #if defined(OS_CHROMEOS)
376 { key::kChromeOsLockOnIdleSuspend,
377 prefs::kEnableAutoScreenLock,
378 base::Value::TYPE_BOOLEAN },
379 { key::kChromeOsReleaseChannel,
380 prefs::kChromeOsReleaseChannel,
381 base::Value::TYPE_STRING },
382 { key::kDriveDisabled,
383 prefs::kDisableDrive,
384 base::Value::TYPE_BOOLEAN },
385 { key::kDriveDisabledOverCellular,
386 prefs::kDisableDriveOverCellular,
387 base::Value::TYPE_BOOLEAN },
388 { key::kExternalStorageDisabled,
389 prefs::kExternalStorageDisabled,
390 base::Value::TYPE_BOOLEAN },
391 { key::kAudioOutputAllowed,
392 chromeos::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::kAccessibilityLargeCursorEnabled,
426 base::Value::TYPE_BOOLEAN },
427 { key::kSpokenFeedbackEnabled,
428 prefs::kAccessibilitySpokenFeedbackEnabled,
429 base::Value::TYPE_BOOLEAN },
430 { key::kHighContrastEnabled,
431 prefs::kAccessibilityHighContrastEnabled,
432 base::Value::TYPE_BOOLEAN },
433 { key::kVirtualKeyboardEnabled,
434 prefs::kAccessibilityVirtualKeyboardEnabled,
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 { key::kTouchVirtualKeyboardEnabled,
461 prefs::kTouchVirtualKeyboardEnabled,
462 base::Value::TYPE_BOOLEAN },
463 { key::kEasyUnlockAllowed,
464 prefs::kEasyUnlockAllowed,
465 base::Value::TYPE_BOOLEAN },
466 { key::kCaptivePortalAuthenticationIgnoresProxy,
467 prefs::kCaptivePortalAuthenticationIgnoresProxy,
468 base::Value::TYPE_BOOLEAN },
469 #endif // defined(OS_CHROMEOS)
471 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
472 { key::kBackgroundModeEnabled,
473 prefs::kBackgroundModeEnabled,
474 base::Value::TYPE_BOOLEAN },
475 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
477 #if defined(OS_ANDROID)
478 { key::kDataCompressionProxyEnabled,
479 data_reduction_proxy::prefs::kDataReductionProxyEnabled,
480 base::Value::TYPE_BOOLEAN },
481 #endif // defined(OS_ANDROID)
483 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
484 { key::kNativeMessagingUserLevelHosts,
485 extensions::pref_names::kNativeMessagingUserLevelHosts,
486 base::Value::TYPE_BOOLEAN },
487 { key::kBrowserGuestModeEnabled,
488 prefs::kBrowserGuestModeEnabled,
489 base::Value::TYPE_BOOLEAN },
490 { key::kBrowserAddPersonEnabled,
491 prefs::kBrowserAddPersonEnabled,
492 base::Value::TYPE_BOOLEAN },
493 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
496 #if defined(ENABLE_EXTENSIONS)
497 void GetExtensionAllowedTypesMap(
498 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
499 // Mapping from extension type names to Manifest::Type.
500 for (size_t index = 0;
501 index < extensions::schema_constants::kAllowedTypesMapSize;
502 ++index) {
503 const extensions::schema_constants::AllowedTypesMapEntry& entry =
504 extensions::schema_constants::kAllowedTypesMap[index];
505 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
506 entry.name,
507 scoped_ptr<base::Value>(
508 new base::FundamentalValue(entry.manifest_type))));
511 #endif
513 #if !defined(OS_IOS)
514 void GetDeprecatedFeaturesMap(
515 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
516 // Maps feature tags as specified in policy to the corresponding switch to
517 // re-enable them.
519 #endif // !defined(OS_IOS)
521 } // namespace
523 void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) {
524 #if defined(OS_CHROMEOS)
525 if (user_manager::UserManager::IsInitialized()) {
526 const user_manager::User* user =
527 user_manager::UserManager::Get()->GetActiveUser();
528 if (user)
529 parameters->user_id_hash = user->username_hash();
531 #endif
534 scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList(
535 const Schema& chrome_schema) {
536 scoped_ptr<ConfigurationPolicyHandlerList> handlers(
537 new ConfigurationPolicyHandlerList(
538 base::Bind(&PopulatePolicyHandlerParameters),
539 base::Bind(&GetChromePolicyDetails)));
540 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
541 handlers->AddHandler(make_scoped_ptr(new SimplePolicyHandler(
542 kSimplePolicyMap[i].policy_name, kSimplePolicyMap[i].preference_path,
543 kSimplePolicyMap[i].value_type)));
546 handlers->AddHandler(make_scoped_ptr(new AutofillPolicyHandler()));
547 handlers->AddHandler(make_scoped_ptr(new DefaultSearchPolicyHandler()));
548 handlers->AddHandler(make_scoped_ptr(new IncognitoModePolicyHandler()));
549 handlers->AddHandler(
550 make_scoped_ptr(new ManagedBookmarksPolicyHandler(chrome_schema)));
551 handlers->AddHandler(make_scoped_ptr(new ProxyPolicyHandler()));
552 handlers->AddHandler(make_scoped_ptr(new URLBlacklistPolicyHandler()));
554 #if defined(OS_ANDROID)
555 handlers->AddHandler(
556 make_scoped_ptr(new ContextualSearchPolicyHandlerAndroid()));
557 #endif
559 #if !defined(OS_IOS)
560 handlers->AddHandler(
561 make_scoped_ptr(new FileSelectionDialogsPolicyHandler()));
562 handlers->AddHandler(make_scoped_ptr(new JavascriptPolicyHandler()));
563 handlers->AddHandler(make_scoped_ptr(new NetworkPredictionPolicyHandler()));
564 handlers->AddHandler(make_scoped_ptr(new RestoreOnStartupPolicyHandler()));
565 handlers->AddHandler(make_scoped_ptr(new browser_sync::SyncPolicyHandler()));
567 handlers->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
568 key::kEnableDeprecatedWebPlatformFeatures,
569 prefs::kEnableDeprecatedWebPlatformFeatures,
570 base::Bind(GetDeprecatedFeaturesMap))));
571 #endif // !defined(OS_IOS)
573 #if defined(ENABLE_EXTENSIONS)
574 handlers->AddHandler(
575 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
576 key::kExtensionInstallWhitelist,
577 extensions::pref_names::kInstallAllowList, false)));
578 handlers->AddHandler(
579 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
580 key::kExtensionInstallBlacklist,
581 extensions::pref_names::kInstallDenyList, true)));
582 handlers->AddHandler(make_scoped_ptr(
583 new extensions::ExtensionInstallForcelistPolicyHandler()));
584 handlers->AddHandler(
585 make_scoped_ptr(new extensions::ExtensionURLPatternListPolicyHandler(
586 key::kExtensionInstallSources,
587 extensions::pref_names::kAllowedInstallSites)));
588 handlers->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
589 key::kExtensionAllowedTypes, extensions::pref_names::kAllowedTypes,
590 base::Bind(GetExtensionAllowedTypesMap))));
591 handlers->AddHandler(make_scoped_ptr(
592 new extensions::ExtensionSettingsPolicyHandler(chrome_schema)));
593 #endif
595 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
596 handlers->AddHandler(make_scoped_ptr(new DiskCacheDirPolicyHandler()));
598 handlers->AddHandler(
599 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
600 key::kNativeMessagingWhitelist,
601 extensions::pref_names::kNativeMessagingWhitelist, false)));
602 handlers->AddHandler(
603 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
604 key::kNativeMessagingBlacklist,
605 extensions::pref_names::kNativeMessagingBlacklist, true)));
606 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
608 #if !defined(OS_ANDROID) && !defined(OS_IOS)
609 handlers->AddHandler(make_scoped_ptr(new DownloadDirPolicyHandler));
611 handlers->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
612 key::kRegisteredProtocolHandlers,
613 prefs::kPolicyRegisteredProtocolHandlers, chrome_schema, SCHEMA_STRICT,
614 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
615 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
616 #endif
618 #if defined(OS_CHROMEOS)
619 handlers->AddHandler(
620 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
621 key::kAttestationExtensionWhitelist,
622 prefs::kAttestationExtensionWhitelist, false)));
623 handlers->AddHandler(make_scoped_ptr(
624 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
625 handlers->AddHandler(make_scoped_ptr(
626 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
627 handlers->AddHandler(make_scoped_ptr(new PinnedLauncherAppsPolicyHandler()));
628 handlers->AddHandler(make_scoped_ptr(new ScreenMagnifierPolicyHandler()));
629 handlers->AddHandler(make_scoped_ptr(
630 new LoginScreenPowerManagementPolicyHandler(chrome_schema)));
632 ScopedVector<ConfigurationPolicyHandler>
633 power_management_idle_legacy_policies;
634 power_management_idle_legacy_policies.push_back(
635 new IntRangePolicyHandler(key::kScreenDimDelayAC,
636 prefs::kPowerAcScreenDimDelayMs,
638 INT_MAX,
639 true));
640 power_management_idle_legacy_policies.push_back(
641 new IntRangePolicyHandler(key::kScreenOffDelayAC,
642 prefs::kPowerAcScreenOffDelayMs,
644 INT_MAX,
645 true));
646 power_management_idle_legacy_policies.push_back(
647 new IntRangePolicyHandler(key::kIdleWarningDelayAC,
648 prefs::kPowerAcIdleWarningDelayMs,
650 INT_MAX,
651 true));
652 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
653 key::kIdleDelayAC, prefs::kPowerAcIdleDelayMs, 0, INT_MAX, true));
654 power_management_idle_legacy_policies.push_back(
655 new IntRangePolicyHandler(key::kScreenDimDelayBattery,
656 prefs::kPowerBatteryScreenDimDelayMs,
658 INT_MAX,
659 true));
660 power_management_idle_legacy_policies.push_back(
661 new IntRangePolicyHandler(key::kScreenOffDelayBattery,
662 prefs::kPowerBatteryScreenOffDelayMs,
664 INT_MAX,
665 true));
666 power_management_idle_legacy_policies.push_back(
667 new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
668 prefs::kPowerBatteryIdleWarningDelayMs,
670 INT_MAX,
671 true));
672 power_management_idle_legacy_policies.push_back(
673 new IntRangePolicyHandler(key::kIdleDelayBattery,
674 prefs::kPowerBatteryIdleDelayMs,
676 INT_MAX,
677 true));
678 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
679 key::kIdleActionAC,
680 prefs::kPowerAcIdleAction,
681 chromeos::PowerPolicyController::ACTION_SUSPEND,
682 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
683 false));
684 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
685 key::kIdleActionBattery,
686 prefs::kPowerBatteryIdleAction,
687 chromeos::PowerPolicyController::ACTION_SUSPEND,
688 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
689 false));
690 power_management_idle_legacy_policies.push_back(
691 new DeprecatedIdleActionHandler());
693 ScopedVector<ConfigurationPolicyHandler> screen_lock_legacy_policies;
694 screen_lock_legacy_policies.push_back(
695 new IntRangePolicyHandler(key::kScreenLockDelayAC,
696 prefs::kPowerAcScreenLockDelayMs,
698 INT_MAX,
699 true));
700 screen_lock_legacy_policies.push_back(
701 new IntRangePolicyHandler(key::kScreenLockDelayBattery,
702 prefs::kPowerBatteryScreenLockDelayMs,
704 INT_MAX,
705 true));
707 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
708 key::kSAMLOfflineSigninTimeLimit, prefs::kSAMLOfflineSigninTimeLimit, -1,
709 INT_MAX, true)));
710 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
711 key::kLidCloseAction, prefs::kPowerLidClosedAction,
712 chromeos::PowerPolicyController::ACTION_SUSPEND,
713 chromeos::PowerPolicyController::ACTION_DO_NOTHING, false)));
714 handlers->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
715 key::kPresentationScreenDimDelayScale,
716 prefs::kPowerPresentationScreenDimDelayFactor, 100, INT_MAX, true)));
717 handlers->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
718 key::kUserActivityScreenDimDelayScale,
719 prefs::kPowerUserActivityScreenDimDelayFactor, 100, INT_MAX, true)));
720 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
721 key::kUptimeLimit, prefs::kUptimeLimit, 3600, INT_MAX, true)));
722 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
723 key::kDeviceLoginScreenDefaultScreenMagnifierType, NULL, 0,
724 ui::MAGNIFIER_FULL, false)));
725 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
726 // policies once deprecation of legacy power management policies is done.
727 // http://crbug.com/346229
728 handlers->AddHandler(
729 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
730 power_management_idle_legacy_policies.Pass(),
731 make_scoped_ptr(
732 new PowerManagementIdleSettingsPolicyHandler(chrome_schema)))));
733 handlers->AddHandler(
734 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
735 screen_lock_legacy_policies.Pass(),
736 make_scoped_ptr(new ScreenLockDelayPolicyHandler(chrome_schema)))));
737 handlers->AddHandler(
738 make_scoped_ptr(new ExternalDataPolicyHandler(key::kUserAvatarImage)));
739 handlers->AddHandler(
740 make_scoped_ptr(new ExternalDataPolicyHandler(key::kWallpaperImage)));
741 handlers->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
742 key::kSessionLocales, NULL, chrome_schema, SCHEMA_STRICT,
743 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
744 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
745 #endif // defined(OS_CHROMEOS)
747 return handlers.Pass();
750 } // namespace policy