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