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