configuration_policy_handler_list.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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 "components/policy/core/browser/configuration_policy_handler_list.h"
6
7#include "base/prefs/pref_value_map.h"
8#include "base/stl_util.h"
9#include "components/policy/core/browser/configuration_policy_handler.h"
10#include "components/policy/core/browser/policy_error_map.h"
11#include "components/policy/core/common/policy_map.h"
12#include "grit/component_strings.h"
13
14namespace policy {
15ConfigurationPolicyHandlerList::ConfigurationPolicyHandlerList(
16    const GetChromePolicyDetailsCallback& details_callback)
17    : details_callback_(details_callback) {}
18
19ConfigurationPolicyHandlerList::~ConfigurationPolicyHandlerList() {
20  STLDeleteElements(&handlers_);
21}
22
23void ConfigurationPolicyHandlerList::AddHandler(
24    scoped_ptr<ConfigurationPolicyHandler> handler) {
25  handlers_.push_back(handler.release());
26}
27
28void ConfigurationPolicyHandlerList::ApplyPolicySettings(
29    const PolicyMap& policies,
30    PrefValueMap* prefs,
31    PolicyErrorMap* errors) const {
32  PolicyErrorMap scoped_errors;
33  if (!errors)
34    errors = &scoped_errors;
35
36  std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
37  for (handler = handlers_.begin(); handler != handlers_.end(); ++handler) {
38    if ((*handler)->CheckPolicySettings(policies, errors) && prefs)
39      (*handler)->ApplyPolicySettings(policies, prefs);
40  }
41
42  for (PolicyMap::const_iterator it = policies.begin();
43       it != policies.end();
44       ++it) {
45    const PolicyDetails* details =
46        details_callback_.is_null() ? NULL : details_callback_.Run(it->first);
47    if (details && details->is_deprecated)
48      errors->AddError(it->first, IDS_POLICY_DEPRECATED);
49  }
50}
51
52void ConfigurationPolicyHandlerList::PrepareForDisplaying(
53    PolicyMap* policies) const {
54  std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
55  for (handler = handlers_.begin(); handler != handlers_.end(); ++handler)
56    (*handler)->PrepareForDisplaying(policies);
57}
58
59}  // namespace policy
60