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