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