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