1 // Copyright (c) 2012 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.h" 6 7 #include <limits> 8 9 #include "base/prefs/pref_value_map.h" 10 #include "base/stl_util.h" 11 #include "base/values.h" 12 #include "chrome/browser/policy/configuration_policy_handler.h" 13 #include "chrome/browser/policy/policy_error_map.h" 14 #include "chrome/browser/policy/policy_map.h" 15 #include "chrome/common/extensions/manifest.h" 16 #include "chrome/common/pref_names.h" 17 #include "grit/generated_resources.h" 18 #include "policy/policy_constants.h" 19 20 #if defined(OS_CHROMEOS) 21 #include "ash/magnifier/magnifier_constants.h" 22 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h" 23 #include "chromeos/dbus/power_policy_controller.h" 24 #endif // defined(OS_CHROMEOS) 25 26 #if defined(OS_ANDROID) 27 #include "chrome/browser/policy/configuration_policy_handler_android.h" 28 #endif // defined(OS_ANDROID) 29 30 namespace policy { 31 32 namespace { 33 34 // Maps a policy type to a preference path, and to the expected value type. 35 // This is the entry type of |kSimplePolicyMap| below. 36 struct PolicyToPreferenceMapEntry { 37 const char* policy_name; 38 const char* preference_path; 39 base::Value::Type value_type; 40 }; 41 42 // List of policy types to preference names. This is used for simple policies 43 // that directly map to a single preference. 44 const PolicyToPreferenceMapEntry kSimplePolicyMap[] = { 45 { key::kHomepageLocation, 46 prefs::kHomePage, 47 Value::TYPE_STRING }, 48 { key::kHomepageIsNewTabPage, 49 prefs::kHomePageIsNewTabPage, 50 Value::TYPE_BOOLEAN }, 51 { key::kRestoreOnStartupURLs, 52 prefs::kURLsToRestoreOnStartup, 53 Value::TYPE_LIST }, 54 { key::kAlternateErrorPagesEnabled, 55 prefs::kAlternateErrorPagesEnabled, 56 Value::TYPE_BOOLEAN }, 57 { key::kSearchSuggestEnabled, 58 prefs::kSearchSuggestEnabled, 59 Value::TYPE_BOOLEAN }, 60 { key::kDnsPrefetchingEnabled, 61 prefs::kNetworkPredictionEnabled, 62 Value::TYPE_BOOLEAN }, 63 { key::kBuiltInDnsClientEnabled, 64 prefs::kBuiltInDnsClientEnabled, 65 Value::TYPE_BOOLEAN }, 66 { key::kDisableSpdy, 67 prefs::kDisableSpdy, 68 Value::TYPE_BOOLEAN }, 69 { key::kSafeBrowsingEnabled, 70 prefs::kSafeBrowsingEnabled, 71 Value::TYPE_BOOLEAN }, 72 { key::kForceSafeSearch, 73 prefs::kForceSafeSearch, 74 Value::TYPE_BOOLEAN }, 75 { key::kPasswordManagerEnabled, 76 prefs::kPasswordManagerEnabled, 77 Value::TYPE_BOOLEAN }, 78 { key::kPasswordManagerAllowShowPasswords, 79 prefs::kPasswordManagerAllowShowPasswords, 80 Value::TYPE_BOOLEAN }, 81 { key::kPrintingEnabled, 82 prefs::kPrintingEnabled, 83 Value::TYPE_BOOLEAN }, 84 { key::kDisablePrintPreview, 85 prefs::kPrintPreviewDisabled, 86 Value::TYPE_BOOLEAN }, 87 { key::kMetricsReportingEnabled, 88 prefs::kMetricsReportingEnabled, 89 Value::TYPE_BOOLEAN }, 90 { key::kApplicationLocaleValue, 91 prefs::kApplicationLocale, 92 Value::TYPE_STRING }, 93 { key::kExtensionInstallForcelist, 94 prefs::kExtensionInstallForceList, 95 Value::TYPE_LIST }, 96 { key::kDisabledPlugins, 97 prefs::kPluginsDisabledPlugins, 98 Value::TYPE_LIST }, 99 { key::kDisabledPluginsExceptions, 100 prefs::kPluginsDisabledPluginsExceptions, 101 Value::TYPE_LIST }, 102 { key::kEnabledPlugins, 103 prefs::kPluginsEnabledPlugins, 104 Value::TYPE_LIST }, 105 { key::kShowHomeButton, 106 prefs::kShowHomeButton, 107 Value::TYPE_BOOLEAN }, 108 { key::kSavingBrowserHistoryDisabled, 109 prefs::kSavingBrowserHistoryDisabled, 110 Value::TYPE_BOOLEAN }, 111 { key::kAllowDeletingBrowserHistory, 112 prefs::kAllowDeletingBrowserHistory, 113 Value::TYPE_BOOLEAN }, 114 { key::kDeveloperToolsDisabled, 115 prefs::kDevToolsDisabled, 116 Value::TYPE_BOOLEAN }, 117 { key::kBlockThirdPartyCookies, 118 prefs::kBlockThirdPartyCookies, 119 Value::TYPE_BOOLEAN }, 120 { key::kDefaultCookiesSetting, 121 prefs::kManagedDefaultCookiesSetting, 122 Value::TYPE_INTEGER }, 123 { key::kDefaultImagesSetting, 124 prefs::kManagedDefaultImagesSetting, 125 Value::TYPE_INTEGER }, 126 { key::kDefaultPluginsSetting, 127 prefs::kManagedDefaultPluginsSetting, 128 Value::TYPE_INTEGER }, 129 { key::kDefaultPopupsSetting, 130 prefs::kManagedDefaultPopupsSetting, 131 Value::TYPE_INTEGER }, 132 { key::kAutoSelectCertificateForUrls, 133 prefs::kManagedAutoSelectCertificateForUrls, 134 Value::TYPE_LIST }, 135 { key::kCookiesAllowedForUrls, 136 prefs::kManagedCookiesAllowedForUrls, 137 Value::TYPE_LIST }, 138 { key::kCookiesBlockedForUrls, 139 prefs::kManagedCookiesBlockedForUrls, 140 Value::TYPE_LIST }, 141 { key::kCookiesSessionOnlyForUrls, 142 prefs::kManagedCookiesSessionOnlyForUrls, 143 Value::TYPE_LIST }, 144 { key::kImagesAllowedForUrls, 145 prefs::kManagedImagesAllowedForUrls, 146 Value::TYPE_LIST }, 147 { key::kImagesBlockedForUrls, 148 prefs::kManagedImagesBlockedForUrls, 149 Value::TYPE_LIST }, 150 { key::kJavaScriptAllowedForUrls, 151 prefs::kManagedJavaScriptAllowedForUrls, 152 Value::TYPE_LIST }, 153 { key::kJavaScriptBlockedForUrls, 154 prefs::kManagedJavaScriptBlockedForUrls, 155 Value::TYPE_LIST }, 156 { key::kPluginsAllowedForUrls, 157 prefs::kManagedPluginsAllowedForUrls, 158 Value::TYPE_LIST }, 159 { key::kPluginsBlockedForUrls, 160 prefs::kManagedPluginsBlockedForUrls, 161 Value::TYPE_LIST }, 162 { key::kPopupsAllowedForUrls, 163 prefs::kManagedPopupsAllowedForUrls, 164 Value::TYPE_LIST }, 165 { key::kPopupsBlockedForUrls, 166 prefs::kManagedPopupsBlockedForUrls, 167 Value::TYPE_LIST }, 168 { key::kNotificationsAllowedForUrls, 169 prefs::kManagedNotificationsAllowedForUrls, 170 Value::TYPE_LIST }, 171 { key::kNotificationsBlockedForUrls, 172 prefs::kManagedNotificationsBlockedForUrls, 173 Value::TYPE_LIST }, 174 { key::kDefaultNotificationsSetting, 175 prefs::kManagedDefaultNotificationsSetting, 176 Value::TYPE_INTEGER }, 177 { key::kDefaultGeolocationSetting, 178 prefs::kManagedDefaultGeolocationSetting, 179 Value::TYPE_INTEGER }, 180 { key::kSigninAllowed, 181 prefs::kSigninAllowed, 182 Value::TYPE_BOOLEAN }, 183 { key::kEnableOriginBoundCerts, 184 prefs::kEnableOriginBoundCerts, 185 Value::TYPE_BOOLEAN }, 186 { key::kDisableSSLRecordSplitting, 187 prefs::kDisableSSLRecordSplitting, 188 Value::TYPE_BOOLEAN }, 189 { key::kEnableOnlineRevocationChecks, 190 prefs::kCertRevocationCheckingEnabled, 191 Value::TYPE_BOOLEAN }, 192 { key::kRequireOnlineRevocationChecksForLocalAnchors, 193 prefs::kCertRevocationCheckingRequiredLocalAnchors, 194 Value::TYPE_BOOLEAN }, 195 { key::kAuthSchemes, 196 prefs::kAuthSchemes, 197 Value::TYPE_STRING }, 198 { key::kDisableAuthNegotiateCnameLookup, 199 prefs::kDisableAuthNegotiateCnameLookup, 200 Value::TYPE_BOOLEAN }, 201 { key::kEnableAuthNegotiatePort, 202 prefs::kEnableAuthNegotiatePort, 203 Value::TYPE_BOOLEAN }, 204 { key::kAuthServerWhitelist, 205 prefs::kAuthServerWhitelist, 206 Value::TYPE_STRING }, 207 { key::kAuthNegotiateDelegateWhitelist, 208 prefs::kAuthNegotiateDelegateWhitelist, 209 Value::TYPE_STRING }, 210 { key::kGSSAPILibraryName, 211 prefs::kGSSAPILibraryName, 212 Value::TYPE_STRING }, 213 { key::kAllowCrossOriginAuthPrompt, 214 prefs::kAllowCrossOriginAuthPrompt, 215 Value::TYPE_BOOLEAN }, 216 { key::kDisable3DAPIs, 217 prefs::kDisable3DAPIs, 218 Value::TYPE_BOOLEAN }, 219 { key::kDisablePluginFinder, 220 prefs::kDisablePluginFinder, 221 Value::TYPE_BOOLEAN }, 222 { key::kDiskCacheSize, 223 prefs::kDiskCacheSize, 224 Value::TYPE_INTEGER }, 225 { key::kMediaCacheSize, 226 prefs::kMediaCacheSize, 227 Value::TYPE_INTEGER }, 228 { key::kPolicyRefreshRate, 229 prefs::kUserPolicyRefreshRate, 230 Value::TYPE_INTEGER }, 231 { key::kDevicePolicyRefreshRate, 232 prefs::kDevicePolicyRefreshRate, 233 Value::TYPE_INTEGER }, 234 { key::kDefaultBrowserSettingEnabled, 235 prefs::kDefaultBrowserSettingEnabled, 236 Value::TYPE_BOOLEAN }, 237 { key::kRemoteAccessHostFirewallTraversal, 238 prefs::kRemoteAccessHostFirewallTraversal, 239 Value::TYPE_BOOLEAN }, 240 { key::kRemoteAccessHostRequireTwoFactor, 241 prefs::kRemoteAccessHostRequireTwoFactor, 242 Value::TYPE_BOOLEAN }, 243 { key::kRemoteAccessHostDomain, 244 prefs::kRemoteAccessHostDomain, 245 Value::TYPE_STRING }, 246 { key::kRemoteAccessHostTalkGadgetPrefix, 247 prefs::kRemoteAccessHostTalkGadgetPrefix, 248 Value::TYPE_STRING }, 249 { key::kRemoteAccessHostRequireCurtain, 250 prefs::kRemoteAccessHostRequireCurtain, 251 Value::TYPE_BOOLEAN }, 252 { key::kRemoteAccessHostAllowClientPairing, 253 prefs::kRemoteAccessHostAllowClientPairing, 254 Value::TYPE_BOOLEAN }, 255 { key::kCloudPrintProxyEnabled, 256 prefs::kCloudPrintProxyEnabled, 257 Value::TYPE_BOOLEAN }, 258 { key::kCloudPrintSubmitEnabled, 259 prefs::kCloudPrintSubmitEnabled, 260 Value::TYPE_BOOLEAN }, 261 { key::kTranslateEnabled, 262 prefs::kEnableTranslate, 263 Value::TYPE_BOOLEAN }, 264 { key::kAllowOutdatedPlugins, 265 prefs::kPluginsAllowOutdated, 266 Value::TYPE_BOOLEAN }, 267 { key::kAlwaysAuthorizePlugins, 268 prefs::kPluginsAlwaysAuthorize, 269 Value::TYPE_BOOLEAN }, 270 { key::kBookmarkBarEnabled, 271 prefs::kShowBookmarkBar, 272 Value::TYPE_BOOLEAN }, 273 { key::kEditBookmarksEnabled, 274 prefs::kEditBookmarksEnabled, 275 Value::TYPE_BOOLEAN }, 276 { key::kAllowFileSelectionDialogs, 277 prefs::kAllowFileSelectionDialogs, 278 Value::TYPE_BOOLEAN }, 279 { key::kImportBookmarks, 280 prefs::kImportBookmarks, 281 Value::TYPE_BOOLEAN }, 282 { key::kImportHistory, 283 prefs::kImportHistory, 284 Value::TYPE_BOOLEAN }, 285 { key::kImportHomepage, 286 prefs::kImportHomepage, 287 Value::TYPE_BOOLEAN }, 288 { key::kImportSearchEngine, 289 prefs::kImportSearchEngine, 290 Value::TYPE_BOOLEAN }, 291 { key::kImportSavedPasswords, 292 prefs::kImportSavedPasswords, 293 Value::TYPE_BOOLEAN }, 294 { key::kMaxConnectionsPerProxy, 295 prefs::kMaxConnectionsPerProxy, 296 Value::TYPE_INTEGER }, 297 { key::kURLWhitelist, 298 prefs::kUrlWhitelist, 299 Value::TYPE_LIST }, 300 { key::kEnableMemoryInfo, 301 prefs::kEnableMemoryInfo, 302 Value::TYPE_BOOLEAN }, 303 { key::kRestrictSigninToPattern, 304 prefs::kGoogleServicesUsernamePattern, 305 Value::TYPE_STRING }, 306 { key::kDefaultMediaStreamSetting, 307 prefs::kManagedDefaultMediaStreamSetting, 308 Value::TYPE_INTEGER }, 309 { key::kDisableSafeBrowsingProceedAnyway, 310 prefs::kSafeBrowsingProceedAnywayDisabled, 311 Value::TYPE_BOOLEAN }, 312 { key::kSpellCheckServiceEnabled, 313 prefs::kSpellCheckUseSpellingService, 314 Value::TYPE_BOOLEAN }, 315 { key::kDisableScreenshots, 316 prefs::kDisableScreenshots, 317 Value::TYPE_BOOLEAN }, 318 { key::kAudioCaptureAllowed, 319 prefs::kAudioCaptureAllowed, 320 Value::TYPE_BOOLEAN }, 321 { key::kVideoCaptureAllowed, 322 prefs::kVideoCaptureAllowed, 323 Value::TYPE_BOOLEAN }, 324 { key::kAudioCaptureAllowedUrls, 325 prefs::kAudioCaptureAllowedUrls, 326 Value::TYPE_LIST }, 327 { key::kVideoCaptureAllowedUrls, 328 prefs::kVideoCaptureAllowedUrls, 329 Value::TYPE_LIST }, 330 { key::kHideWebStoreIcon, 331 prefs::kHideWebStoreIcon, 332 Value::TYPE_BOOLEAN }, 333 { key::kVariationsRestrictParameter, 334 prefs::kVariationsRestrictParameter, 335 Value::TYPE_STRING }, 336 { key::kContentPackDefaultFilteringBehavior, 337 prefs::kDefaultManagedModeFilteringBehavior, 338 Value::TYPE_INTEGER }, 339 { key::kContentPackManualBehaviorHosts, 340 prefs::kManagedModeManualHosts, 341 Value::TYPE_DICTIONARY }, 342 { key::kContentPackManualBehaviorURLs, 343 prefs::kManagedModeManualURLs, 344 Value::TYPE_DICTIONARY }, 345 { key::kSupervisedUserCreationEnabled, 346 prefs::kManagedUserCreationAllowed, 347 Value::TYPE_BOOLEAN }, 348 349 #if defined(OS_CHROMEOS) 350 { key::kChromeOsLockOnIdleSuspend, 351 prefs::kEnableScreenLock, 352 Value::TYPE_BOOLEAN }, 353 { key::kChromeOsReleaseChannel, 354 prefs::kChromeOsReleaseChannel, 355 Value::TYPE_STRING }, 356 { key::kDriveDisabled, 357 prefs::kDisableDrive, 358 Value::TYPE_BOOLEAN }, 359 { key::kDriveDisabledOverCellular, 360 prefs::kDisableDriveOverCellular, 361 Value::TYPE_BOOLEAN }, 362 { key::kExternalStorageDisabled, 363 prefs::kExternalStorageDisabled, 364 Value::TYPE_BOOLEAN }, 365 { key::kAudioOutputAllowed, 366 prefs::kAudioOutputAllowed, 367 Value::TYPE_BOOLEAN }, 368 { key::kShowLogoutButtonInTray, 369 prefs::kShowLogoutButtonInTray, 370 Value::TYPE_BOOLEAN }, 371 { key::kShelfAutoHideBehavior, 372 prefs::kShelfAutoHideBehaviorLocal, 373 Value::TYPE_STRING }, 374 { key::kSessionLengthLimit, 375 prefs::kSessionLengthLimit, 376 Value::TYPE_INTEGER }, 377 { key::kPowerManagementUsesAudioActivity, 378 prefs::kPowerUseAudioActivity, 379 Value::TYPE_BOOLEAN }, 380 { key::kPowerManagementUsesVideoActivity, 381 prefs::kPowerUseVideoActivity, 382 Value::TYPE_BOOLEAN }, 383 { key::kAllowScreenWakeLocks, 384 prefs::kPowerAllowScreenWakeLocks, 385 Value::TYPE_BOOLEAN }, 386 { key::kTermsOfServiceURL, 387 prefs::kTermsOfServiceURL, 388 Value::TYPE_STRING }, 389 { key::kShowAccessibilityOptionsInSystemTrayMenu, 390 prefs::kShouldAlwaysShowAccessibilityMenu, 391 Value::TYPE_BOOLEAN }, 392 { key::kLargeCursorEnabled, 393 prefs::kLargeCursorEnabled, 394 Value::TYPE_BOOLEAN }, 395 { key::kSpokenFeedbackEnabled, 396 prefs::kSpokenFeedbackEnabled, 397 Value::TYPE_BOOLEAN }, 398 { key::kHighContrastEnabled, 399 prefs::kHighContrastEnabled, 400 Value::TYPE_BOOLEAN }, 401 { key::kDeviceLoginScreenDefaultLargeCursorEnabled, 402 NULL, 403 Value::TYPE_BOOLEAN }, 404 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled, 405 NULL, 406 Value::TYPE_BOOLEAN }, 407 { key::kDeviceLoginScreenDefaultHighContrastEnabled, 408 NULL, 409 Value::TYPE_BOOLEAN }, 410 { key::kRebootAfterUpdate, 411 prefs::kRebootAfterUpdate, 412 Value::TYPE_BOOLEAN }, 413 { key::kAttestationEnabledForUser, 414 prefs::kAttestationEnabled, 415 Value::TYPE_BOOLEAN }, 416 #endif // defined(OS_CHROMEOS) 417 418 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 419 { key::kBackgroundModeEnabled, 420 prefs::kBackgroundModeEnabled, 421 Value::TYPE_BOOLEAN }, 422 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 423 }; 424 425 // Mapping from extension type names to Manifest::Type. 426 StringToIntEnumListPolicyHandler::MappingEntry kExtensionAllowedTypesMap[] = { 427 { "extension", extensions::Manifest::TYPE_EXTENSION }, 428 { "theme", extensions::Manifest::TYPE_THEME }, 429 { "user_script", extensions::Manifest::TYPE_USER_SCRIPT }, 430 { "hosted_app", extensions::Manifest::TYPE_HOSTED_APP }, 431 { "legacy_packaged_app", extensions::Manifest::TYPE_LEGACY_PACKAGED_APP }, 432 { "platform_app", extensions::Manifest::TYPE_PLATFORM_APP }, 433 }; 434 435 } // namespace 436 437 ConfigurationPolicyHandlerList::ConfigurationPolicyHandlerList() { 438 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) { 439 handlers_.push_back( 440 new SimplePolicyHandler(kSimplePolicyMap[i].policy_name, 441 kSimplePolicyMap[i].preference_path, 442 kSimplePolicyMap[i].value_type)); 443 } 444 445 handlers_.push_back(new AutofillPolicyHandler()); 446 handlers_.push_back(new DefaultSearchPolicyHandler()); 447 handlers_.push_back(new FileSelectionDialogsHandler()); 448 handlers_.push_back(new IncognitoModePolicyHandler()); 449 handlers_.push_back(new JavascriptPolicyHandler()); 450 handlers_.push_back(new ProxyPolicyHandler()); 451 handlers_.push_back(new RestoreOnStartupPolicyHandler()); 452 handlers_.push_back(new SyncPolicyHandler()); 453 handlers_.push_back(new URLBlacklistPolicyHandler()); 454 455 handlers_.push_back( 456 new ExtensionListPolicyHandler(key::kExtensionInstallWhitelist, 457 prefs::kExtensionInstallAllowList, 458 false)); 459 handlers_.push_back( 460 new ExtensionListPolicyHandler(key::kExtensionInstallBlacklist, 461 prefs::kExtensionInstallDenyList, 462 true)); 463 handlers_.push_back(new ExtensionInstallForcelistPolicyHandler()); 464 handlers_.push_back( 465 new ExtensionURLPatternListPolicyHandler( 466 key::kExtensionInstallSources, 467 prefs::kExtensionAllowedInstallSites)); 468 handlers_.push_back( 469 new StringToIntEnumListPolicyHandler( 470 key::kExtensionAllowedTypes, prefs::kExtensionAllowedTypes, 471 kExtensionAllowedTypesMap, 472 kExtensionAllowedTypesMap + arraysize(kExtensionAllowedTypesMap))); 473 #if defined(OS_CHROMEOS) 474 handlers_.push_back( 475 new ExtensionListPolicyHandler(key::kAttestationExtensionWhitelist, 476 prefs::kAttestationExtensionWhitelist, 477 false)); 478 #endif // defined(OS_CHROMEOS) 479 480 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) 481 handlers_.push_back(new DiskCacheDirPolicyHandler()); 482 handlers_.push_back(new DownloadDirPolicyHandler()); 483 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) 484 485 #if defined(OS_CHROMEOS) 486 handlers_.push_back( 487 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()); 488 handlers_.push_back(NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 489 handlers_.push_back(new PinnedLauncherAppsPolicyHandler()); 490 handlers_.push_back(new ScreenMagnifierPolicyHandler()); 491 handlers_.push_back(new LoginScreenPowerManagementPolicyHandler); 492 493 handlers_.push_back( 494 new IntRangePolicyHandler( 495 key::kScreenDimDelayAC, 496 prefs::kPowerAcScreenDimDelayMs, 497 0, INT_MAX, true)); 498 handlers_.push_back( 499 new IntRangePolicyHandler( 500 key::kScreenOffDelayAC, 501 prefs::kPowerAcScreenOffDelayMs, 502 0, INT_MAX, true)); 503 handlers_.push_back( 504 new IntRangePolicyHandler( 505 key::kScreenLockDelayAC, 506 prefs::kPowerAcScreenLockDelayMs, 507 0, INT_MAX, true)); 508 handlers_.push_back( 509 new IntRangePolicyHandler( 510 key::kIdleWarningDelayAC, 511 prefs::kPowerAcIdleWarningDelayMs, 512 0, INT_MAX, true)); 513 handlers_.push_back( 514 new IntRangePolicyHandler( 515 key::kIdleDelayAC, 516 prefs::kPowerAcIdleDelayMs, 517 0, INT_MAX, true)); 518 handlers_.push_back( 519 new IntRangePolicyHandler( 520 key::kScreenDimDelayBattery, 521 prefs::kPowerBatteryScreenDimDelayMs, 522 0, INT_MAX, true)); 523 handlers_.push_back( 524 new IntRangePolicyHandler( 525 key::kScreenOffDelayBattery, 526 prefs::kPowerBatteryScreenOffDelayMs, 527 0, INT_MAX, true)); 528 handlers_.push_back( 529 new IntRangePolicyHandler( 530 key::kScreenLockDelayBattery, 531 prefs::kPowerBatteryScreenLockDelayMs, 532 0, INT_MAX, true)); 533 handlers_.push_back( 534 new IntRangePolicyHandler( 535 key::kIdleWarningDelayBattery, 536 prefs::kPowerBatteryIdleWarningDelayMs, 537 0, INT_MAX, true)); 538 handlers_.push_back( 539 new IntRangePolicyHandler( 540 key::kIdleDelayBattery, 541 prefs::kPowerBatteryIdleDelayMs, 542 0, INT_MAX, true)); 543 handlers_.push_back( 544 new IntRangePolicyHandler( 545 key::kIdleActionAC, 546 prefs::kPowerAcIdleAction, 547 chromeos::PowerPolicyController::ACTION_SUSPEND, 548 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 549 false)); 550 handlers_.push_back( 551 new IntRangePolicyHandler( 552 key::kIdleActionBattery, 553 prefs::kPowerBatteryIdleAction, 554 chromeos::PowerPolicyController::ACTION_SUSPEND, 555 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 556 false)); 557 handlers_.push_back(new DeprecatedIdleActionHandler()); 558 handlers_.push_back( 559 new IntRangePolicyHandler( 560 key::kLidCloseAction, 561 prefs::kPowerLidClosedAction, 562 chromeos::PowerPolicyController::ACTION_SUSPEND, 563 chromeos::PowerPolicyController::ACTION_DO_NOTHING, 564 false)); 565 handlers_.push_back( 566 new IntPercentageToDoublePolicyHandler( 567 key::kPresentationScreenDimDelayScale, 568 prefs::kPowerPresentationScreenDimDelayFactor, 569 100, INT_MAX, true)); 570 handlers_.push_back( 571 new IntPercentageToDoublePolicyHandler( 572 key::kUserActivityScreenDimDelayScale, 573 prefs::kPowerUserActivityScreenDimDelayFactor, 574 100, INT_MAX, true)); 575 handlers_.push_back(new IntRangePolicyHandler(key::kUptimeLimit, 576 prefs::kUptimeLimit, 577 3600, INT_MAX, true)); 578 handlers_.push_back(new IntRangePolicyHandler( 579 key::kDeviceLoginScreenDefaultScreenMagnifierType, 580 NULL, 581 0, ash::MAGNIFIER_FULL, false)); 582 #endif // defined(OS_CHROMEOS) 583 584 #if defined(OS_ANDROID) 585 handlers_.push_back(new ManagedBookmarksPolicyHandler()); 586 #endif 587 } 588 589 ConfigurationPolicyHandlerList::~ConfigurationPolicyHandlerList() { 590 STLDeleteElements(&handlers_); 591 } 592 593 void ConfigurationPolicyHandlerList::ApplyPolicySettings( 594 const PolicyMap& policies, 595 PrefValueMap* prefs, 596 PolicyErrorMap* errors) const { 597 PolicyErrorMap scoped_errors; 598 if (!errors) 599 errors = &scoped_errors; 600 601 std::vector<ConfigurationPolicyHandler*>::const_iterator handler; 602 for (handler = handlers_.begin(); handler != handlers_.end(); ++handler) { 603 if ((*handler)->CheckPolicySettings(policies, errors) && prefs) 604 (*handler)->ApplyPolicySettings(policies, prefs); 605 } 606 607 for (PolicyMap::const_iterator it = policies.begin(); 608 it != policies.end(); 609 ++it) { 610 if (IsDeprecatedPolicy(it->first)) 611 errors->AddError(it->first, IDS_POLICY_DEPRECATED); 612 } 613 } 614 615 void ConfigurationPolicyHandlerList::PrepareForDisplaying( 616 PolicyMap* policies) const { 617 std::vector<ConfigurationPolicyHandler*>::const_iterator handler; 618 for (handler = handlers_.begin(); handler != handlers_.end(); ++handler) 619 (*handler)->PrepareForDisplaying(policies); 620 } 621 622 } // namespace policy 623