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