configuration_policy_handler_list_factory.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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/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" 29 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 41 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 49 50#if !defined(OS_ANDROID) && !defined(OS_IOS) 51#include "chrome/browser/download/download_dir_policy_handler.h" 52#endif 53 54#if !defined(OS_MACOSX) && !defined(OS_IOS) 55#include "apps/pref_names.h" 56#endif 57 58namespace policy { 59 60namespace { 61 62// List of policy types to preference names. This is used for simple policies 63// that directly map to a single preference. 64const 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::kShowAppsShortcutInBookmarkBar, 303 prefs::kShowAppsShortcutInBookmarkBar, 304 base::Value::TYPE_BOOLEAN }, 305 { key::kAllowFileSelectionDialogs, 306 prefs::kAllowFileSelectionDialogs, 307 base::Value::TYPE_BOOLEAN }, 308 { key::kImportBookmarks, 309 prefs::kImportBookmarks, 310 base::Value::TYPE_BOOLEAN }, 311 { key::kImportHistory, 312 prefs::kImportHistory, 313 base::Value::TYPE_BOOLEAN }, 314 { key::kImportHomepage, 315 prefs::kImportHomepage, 316 base::Value::TYPE_BOOLEAN }, 317 { key::kImportSearchEngine, 318 prefs::kImportSearchEngine, 319 base::Value::TYPE_BOOLEAN }, 320 { key::kImportSavedPasswords, 321 prefs::kImportSavedPasswords, 322 base::Value::TYPE_BOOLEAN }, 323 { key::kMaxConnectionsPerProxy, 324 prefs::kMaxConnectionsPerProxy, 325 base::Value::TYPE_INTEGER }, 326 { key::kURLWhitelist, 327 policy_prefs::kUrlWhitelist, 328 base::Value::TYPE_LIST }, 329 { key::kRestrictSigninToPattern, 330 prefs::kGoogleServicesUsernamePattern, 331 base::Value::TYPE_STRING }, 332 { key::kDefaultMediaStreamSetting, 333 prefs::kManagedDefaultMediaStreamSetting, 334 base::Value::TYPE_INTEGER }, 335 { key::kDisableSafeBrowsingProceedAnyway, 336 prefs::kSafeBrowsingProceedAnywayDisabled, 337 base::Value::TYPE_BOOLEAN }, 338 { key::kSpellCheckServiceEnabled, 339 prefs::kSpellCheckUseSpellingService, 340 base::Value::TYPE_BOOLEAN }, 341 { key::kDisableScreenshots, 342 prefs::kDisableScreenshots, 343 base::Value::TYPE_BOOLEAN }, 344 { key::kAudioCaptureAllowed, 345 prefs::kAudioCaptureAllowed, 346 base::Value::TYPE_BOOLEAN }, 347 { key::kVideoCaptureAllowed, 348 prefs::kVideoCaptureAllowed, 349 base::Value::TYPE_BOOLEAN }, 350 { key::kAudioCaptureAllowedUrls, 351 prefs::kAudioCaptureAllowedUrls, 352 base::Value::TYPE_LIST }, 353 { key::kVideoCaptureAllowedUrls, 354 prefs::kVideoCaptureAllowedUrls, 355 base::Value::TYPE_LIST }, 356 { key::kHideWebStoreIcon, 357 prefs::kHideWebStoreIcon, 358 base::Value::TYPE_BOOLEAN }, 359 { key::kVariationsRestrictParameter, 360 prefs::kVariationsRestrictParameter, 361 base::Value::TYPE_STRING }, 362 { key::kSupervisedUserCreationEnabled, 363 prefs::kSupervisedUserCreationAllowed, 364 base::Value::TYPE_BOOLEAN }, 365 { key::kForceEphemeralProfiles, 366 prefs::kForceEphemeralProfiles, 367 base::Value::TYPE_BOOLEAN }, 368 369#if !defined(OS_MACOSX) && !defined(OS_IOS) 370 { key::kFullscreenAllowed, 371 prefs::kFullscreenAllowed, 372 base::Value::TYPE_BOOLEAN }, 373#if defined(ENABLE_EXTENSIONS) 374 { key::kFullscreenAllowed, 375 apps::prefs::kAppFullscreenAllowed, 376 base::Value::TYPE_BOOLEAN }, 377#endif // defined(ENABLE_EXTENSIONS) 378#endif // !defined(OS_MACOSX) && !defined(OS_IOS) 379 380#if defined(OS_CHROMEOS) 381 { key::kChromeOsLockOnIdleSuspend, 382 prefs::kEnableAutoScreenLock, 383 base::Value::TYPE_BOOLEAN }, 384 { key::kChromeOsReleaseChannel, 385 prefs::kChromeOsReleaseChannel, 386 base::Value::TYPE_STRING }, 387 { key::kDriveDisabled, 388 prefs::kDisableDrive, 389 base::Value::TYPE_BOOLEAN }, 390 { key::kDriveDisabledOverCellular, 391 prefs::kDisableDriveOverCellular, 392 base::Value::TYPE_BOOLEAN }, 393 { key::kExternalStorageDisabled, 394 prefs::kExternalStorageDisabled, 395 base::Value::TYPE_BOOLEAN }, 396 { key::kAudioOutputAllowed, 397 prefs::kAudioOutputAllowed, 398 base::Value::TYPE_BOOLEAN }, 399 { key::kShowLogoutButtonInTray, 400 prefs::kShowLogoutButtonInTray, 401 base::Value::TYPE_BOOLEAN }, 402 { key::kShelfAutoHideBehavior, 403 prefs::kShelfAutoHideBehaviorLocal, 404 base::Value::TYPE_STRING }, 405 { key::kSessionLengthLimit, 406 prefs::kSessionLengthLimit, 407 base::Value::TYPE_INTEGER }, 408 { key::kWaitForInitialUserActivity, 409 prefs::kSessionWaitForInitialUserActivity, 410 base::Value::TYPE_BOOLEAN }, 411 { key::kPowerManagementUsesAudioActivity, 412 prefs::kPowerUseAudioActivity, 413 base::Value::TYPE_BOOLEAN }, 414 { key::kPowerManagementUsesVideoActivity, 415 prefs::kPowerUseVideoActivity, 416 base::Value::TYPE_BOOLEAN }, 417 { key::kAllowScreenWakeLocks, 418 prefs::kPowerAllowScreenWakeLocks, 419 base::Value::TYPE_BOOLEAN }, 420 { key::kWaitForInitialUserActivity, 421 prefs::kPowerWaitForInitialUserActivity, 422 base::Value::TYPE_BOOLEAN }, 423 { key::kTermsOfServiceURL, 424 prefs::kTermsOfServiceURL, 425 base::Value::TYPE_STRING }, 426 { key::kShowAccessibilityOptionsInSystemTrayMenu, 427 prefs::kShouldAlwaysShowAccessibilityMenu, 428 base::Value::TYPE_BOOLEAN }, 429 { key::kLargeCursorEnabled, 430 prefs::kAccessibilityLargeCursorEnabled, 431 base::Value::TYPE_BOOLEAN }, 432 { key::kSpokenFeedbackEnabled, 433 prefs::kAccessibilitySpokenFeedbackEnabled, 434 base::Value::TYPE_BOOLEAN }, 435 { key::kHighContrastEnabled, 436 prefs::kAccessibilityHighContrastEnabled, 437 base::Value::TYPE_BOOLEAN }, 438 { key::kVirtualKeyboardEnabled, 439 prefs::kAccessibilityVirtualKeyboardEnabled, 440 base::Value::TYPE_BOOLEAN }, 441 { key::kDeviceLoginScreenDefaultLargeCursorEnabled, 442 NULL, 443 base::Value::TYPE_BOOLEAN }, 444 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled, 445 NULL, 446 base::Value::TYPE_BOOLEAN }, 447 { key::kDeviceLoginScreenDefaultHighContrastEnabled, 448 NULL, 449 base::Value::TYPE_BOOLEAN }, 450 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled, 451 NULL, 452 base::Value::TYPE_BOOLEAN }, 453 { key::kRebootAfterUpdate, 454 prefs::kRebootAfterUpdate, 455 base::Value::TYPE_BOOLEAN }, 456 { key::kAttestationEnabledForUser, 457 prefs::kAttestationEnabled, 458 base::Value::TYPE_BOOLEAN }, 459 { key::kChromeOsMultiProfileUserBehavior, 460 prefs::kMultiProfileUserBehavior, 461 base::Value::TYPE_STRING }, 462 { key::kKeyboardDefaultToFunctionKeys, 463 prefs::kLanguageSendFunctionKeys, 464 base::Value::TYPE_BOOLEAN }, 465#endif // defined(OS_CHROMEOS) 466 467#if !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 468 { key::kBackgroundModeEnabled, 469 prefs::kBackgroundModeEnabled, 470 base::Value::TYPE_BOOLEAN }, 471#endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 472 473#if defined(OS_ANDROID) 474 { key::kDataCompressionProxyEnabled, 475 data_reduction_proxy::prefs::kDataReductionProxyEnabled, 476 base::Value::TYPE_BOOLEAN }, 477#endif // defined(OS_ANDROID) 478 479#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS) 480 { key::kNativeMessagingUserLevelHosts, 481 extensions::pref_names::kNativeMessagingUserLevelHosts, 482 base::Value::TYPE_BOOLEAN }, 483#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS) 484}; 485 486#if !defined(OS_IOS) 487void GetExtensionAllowedTypesMap( 488 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) { 489 // Mapping from extension type names to Manifest::Type. 490 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 491 "extension", scoped_ptr<base::Value>(base::Value::CreateIntegerValue( 492 extensions::Manifest::TYPE_EXTENSION)))); 493 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 494 "theme", scoped_ptr<base::Value>(base::Value::CreateIntegerValue( 495 extensions::Manifest::TYPE_THEME)))); 496 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 497 "user_script", scoped_ptr<base::Value>(base::Value::CreateIntegerValue( 498 extensions::Manifest::TYPE_USER_SCRIPT)))); 499 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 500 "hosted_app", scoped_ptr<base::Value>(base::Value::CreateIntegerValue( 501 extensions::Manifest::TYPE_HOSTED_APP)))); 502 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 503 "legacy_packaged_app", scoped_ptr<base::Value>( 504 base::Value::CreateIntegerValue( 505 extensions::Manifest::TYPE_LEGACY_PACKAGED_APP)))); 506 result->push_back(new StringMappingListPolicyHandler::MappingEntry( 507 "platform_app", scoped_ptr<base::Value>(base::Value::CreateIntegerValue( 508 extensions::Manifest::TYPE_PLATFORM_APP)))); 509} 510#endif // !defined(OS_IOS) 511 512} // namespace 513 514void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) { 515#if defined(OS_CHROMEOS) 516 if (chromeos::UserManager::IsInitialized()) { 517 const chromeos::User* user = chromeos::UserManager::Get()->GetActiveUser(); 518 if (user) 519 parameters->user_id_hash = user->username_hash(); 520 } 521#endif 522} 523 524scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList( 525 const Schema& chrome_schema) { 526 scoped_ptr<ConfigurationPolicyHandlerList> handlers( 527 new ConfigurationPolicyHandlerList( 528 base::Bind(&PopulatePolicyHandlerParameters), 529 base::Bind(&GetChromePolicyDetails))); 530 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) { 531 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 532 new SimplePolicyHandler(kSimplePolicyMap[i].policy_name, 533 kSimplePolicyMap[i].preference_path, 534 kSimplePolicyMap[i].value_type))); 535 } 536 537 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 538 new AutofillPolicyHandler())); 539 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 540 new DefaultSearchPolicyHandler())); 541 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 542 new IncognitoModePolicyHandler())); 543 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 544 new ManagedBookmarksPolicyHandler(chrome_schema))); 545 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 546 new ProxyPolicyHandler())); 547 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 548 new URLBlacklistPolicyHandler())); 549 550#if !defined(OS_IOS) 551 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 552 new FileSelectionDialogsPolicyHandler())); 553 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 554 new JavascriptPolicyHandler())); 555 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 556 new RestoreOnStartupPolicyHandler())); 557 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 558 new browser_sync::SyncPolicyHandler())); 559 560 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 561 new extensions::ExtensionListPolicyHandler( 562 key::kExtensionInstallWhitelist, 563 extensions::pref_names::kInstallAllowList, 564 false))); 565 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 566 new extensions::ExtensionListPolicyHandler( 567 key::kExtensionInstallBlacklist, 568 extensions::pref_names::kInstallDenyList, 569 true))); 570 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 571 new extensions::ExtensionInstallForcelistPolicyHandler())); 572 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 573 new extensions::ExtensionURLPatternListPolicyHandler( 574 key::kExtensionInstallSources, 575 extensions::pref_names::kAllowedInstallSites))); 576 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 577 new StringMappingListPolicyHandler( 578 key::kExtensionAllowedTypes, 579 extensions::pref_names::kAllowedTypes, 580 base::Bind(GetExtensionAllowedTypesMap)))); 581#endif // !defined(OS_IOS) 582 583#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS) 584 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 585 new DiskCacheDirPolicyHandler())); 586 587 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 588 new extensions::NativeMessagingHostListPolicyHandler( 589 key::kNativeMessagingWhitelist, 590 extensions::pref_names::kNativeMessagingWhitelist, 591 false))); 592 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 593 new extensions::NativeMessagingHostListPolicyHandler( 594 key::kNativeMessagingBlacklist, 595 extensions::pref_names::kNativeMessagingBlacklist, 596 true))); 597#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS) 598 599#if !defined(OS_ANDROID) && !defined(OS_IOS) 600 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 601 new DownloadDirPolicyHandler)); 602 603 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 604 new SimpleSchemaValidatingPolicyHandler( 605 key::kRegisteredProtocolHandlers, 606 prefs::kPolicyRegisteredProtocolHandlers, 607 chrome_schema, 608 SCHEMA_STRICT, 609 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED, 610 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED))); 611#endif 612 613#if defined(OS_CHROMEOS) 614 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 615 new extensions::ExtensionListPolicyHandler( 616 key::kAttestationExtensionWhitelist, 617 prefs::kAttestationExtensionWhitelist, 618 false))); 619 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 620 NetworkConfigurationPolicyHandler::CreateForDevicePolicy())); 621 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 622 NetworkConfigurationPolicyHandler::CreateForUserPolicy())); 623 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 624 new PinnedLauncherAppsPolicyHandler())); 625 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 626 new ScreenMagnifierPolicyHandler())); 627 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 628 new LoginScreenPowerManagementPolicyHandler(chrome_schema))); 629 630 ScopedVector<ConfigurationPolicyHandler> 631 power_management_idle_legacy_policies; 632 power_management_idle_legacy_policies.push_back( 633 new IntRangePolicyHandler(key::kScreenDimDelayAC, 634 prefs::kPowerAcScreenDimDelayMs, 635 0, 636 INT_MAX, 637 true)); 638 power_management_idle_legacy_policies.push_back( 639 new IntRangePolicyHandler(key::kScreenOffDelayAC, 640 prefs::kPowerAcScreenOffDelayMs, 641 0, 642 INT_MAX, 643 true)); 644 power_management_idle_legacy_policies.push_back( 645 new IntRangePolicyHandler(key::kIdleWarningDelayAC, 646 prefs::kPowerAcIdleWarningDelayMs, 647 0, 648 INT_MAX, 649 true)); 650 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler( 651 key::kIdleDelayAC, prefs::kPowerAcIdleDelayMs, 0, INT_MAX, true)); 652 power_management_idle_legacy_policies.push_back( 653 new IntRangePolicyHandler(key::kScreenDimDelayBattery, 654 prefs::kPowerBatteryScreenDimDelayMs, 655 0, 656 INT_MAX, 657 true)); 658 power_management_idle_legacy_policies.push_back( 659 new IntRangePolicyHandler(key::kScreenOffDelayBattery, 660 prefs::kPowerBatteryScreenOffDelayMs, 661 0, 662 INT_MAX, 663 true)); 664 power_management_idle_legacy_policies.push_back( 665 new IntRangePolicyHandler(key::kIdleWarningDelayBattery, 666 prefs::kPowerBatteryIdleWarningDelayMs, 667 0, 668 INT_MAX, 669 true)); 670 power_management_idle_legacy_policies.push_back( 671 new IntRangePolicyHandler(key::kIdleDelayBattery, 672 prefs::kPowerBatteryIdleDelayMs, 673 0, 674 INT_MAX, 675 true)); 676 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler( 677 key::kIdleActionAC, 678 prefs::kPowerAcIdleAction, 679 chromeos::PowerPolicyController::ACTION_SUSPEND, 680 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 681 false)); 682 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler( 683 key::kIdleActionBattery, 684 prefs::kPowerBatteryIdleAction, 685 chromeos::PowerPolicyController::ACTION_SUSPEND, 686 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 687 false)); 688 power_management_idle_legacy_policies.push_back( 689 new DeprecatedIdleActionHandler()); 690 691 ScopedVector<ConfigurationPolicyHandler> screen_lock_legacy_policies; 692 screen_lock_legacy_policies.push_back( 693 new IntRangePolicyHandler(key::kScreenLockDelayAC, 694 prefs::kPowerAcScreenLockDelayMs, 695 0, 696 INT_MAX, 697 true)); 698 screen_lock_legacy_policies.push_back( 699 new IntRangePolicyHandler(key::kScreenLockDelayBattery, 700 prefs::kPowerBatteryScreenLockDelayMs, 701 0, 702 INT_MAX, 703 true)); 704 705 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 706 new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit, 707 prefs::kSAMLOfflineSigninTimeLimit, 708 -1, 709 INT_MAX, 710 true))); 711 handlers->AddHandler( 712 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler( 713 key::kLidCloseAction, 714 prefs::kPowerLidClosedAction, 715 chromeos::PowerPolicyController::ACTION_SUSPEND, 716 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 717 false))); 718 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 719 new IntPercentageToDoublePolicyHandler( 720 key::kPresentationScreenDimDelayScale, 721 prefs::kPowerPresentationScreenDimDelayFactor, 722 100, 723 INT_MAX, 724 true))); 725 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 726 new IntPercentageToDoublePolicyHandler( 727 key::kUserActivityScreenDimDelayScale, 728 prefs::kPowerUserActivityScreenDimDelayFactor, 729 100, 730 INT_MAX, 731 true))); 732 handlers->AddHandler( 733 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler( 734 key::kUptimeLimit, prefs::kUptimeLimit, 3600, INT_MAX, true))); 735 handlers->AddHandler( 736 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler( 737 key::kDeviceLoginScreenDefaultScreenMagnifierType, 738 NULL, 739 0, 740 ash::MAGNIFIER_FULL, 741 false))); 742 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two 743 // policies once deprecation of legacy power management policies is done. 744 // http://crbug.com/346229 745 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 746 new LegacyPoliciesDeprecatingPolicyHandler( 747 power_management_idle_legacy_policies.Pass(), 748 make_scoped_ptr<SchemaValidatingPolicyHandler>( 749 new PowerManagementIdleSettingsPolicyHandler(chrome_schema))))); 750 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 751 new LegacyPoliciesDeprecatingPolicyHandler( 752 screen_lock_legacy_policies.Pass(), 753 make_scoped_ptr<SchemaValidatingPolicyHandler>( 754 new ScreenLockDelayPolicyHandler(chrome_schema))))); 755 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 756 new ExternalDataPolicyHandler(key::kUserAvatarImage))); 757 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( 758 new ExternalDataPolicyHandler(key::kWallpaperImage))); 759#endif // defined(OS_CHROMEOS) 760 761 return handlers.Pass(); 762} 763 764} // namespace policy 765