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