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