1 // Copyright (c) 2011 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_provider.h" 6 7 #include "base/values.h" 8 #include "chrome/browser/policy/policy_map.h" 9 10 namespace policy { 11 12 // Class ConfigurationPolicyProvider. 13 14 ConfigurationPolicyProvider::ConfigurationPolicyProvider( 15 const PolicyDefinitionList* policy_list) 16 : policy_definition_list_(policy_list) { 17 } 18 19 ConfigurationPolicyProvider::~ConfigurationPolicyProvider() {} 20 21 bool ConfigurationPolicyProvider::IsInitializationComplete() const { 22 return true; 23 } 24 25 void ConfigurationPolicyProvider::ApplyPolicyValueTree( 26 const DictionaryValue* policies, 27 ConfigurationPolicyStoreInterface* store) { 28 const PolicyDefinitionList* policy_list(policy_definition_list()); 29 for (const PolicyDefinitionList::Entry* i = policy_list->begin; 30 i != policy_list->end; ++i) { 31 Value* value; 32 if (policies->Get(i->name, &value) && value->IsType(i->value_type)) 33 store->Apply(i->policy_type, value->DeepCopy()); 34 } 35 36 // TODO(mnissler): Handle preference overrides once |ConfigurationPolicyStore| 37 // supports it. 38 } 39 40 void ConfigurationPolicyProvider::ApplyPolicyMap( 41 const PolicyMap* policies, 42 ConfigurationPolicyStoreInterface* store) { 43 const PolicyDefinitionList* policy_list(policy_definition_list()); 44 for (const PolicyDefinitionList::Entry* i = policy_list->begin; 45 i != policy_list->end; ++i) { 46 const Value* value = policies->Get(i->policy_type); 47 if (value && value->IsType(i->value_type)) 48 store->Apply(i->policy_type, value->DeepCopy()); 49 } 50 } 51 52 // Class ConfigurationPolicyObserverRegistrar. 53 54 ConfigurationPolicyObserverRegistrar::ConfigurationPolicyObserverRegistrar() 55 : provider_(NULL), 56 observer_(NULL) {} 57 58 ConfigurationPolicyObserverRegistrar::~ConfigurationPolicyObserverRegistrar() { 59 if (provider_) 60 provider_->RemoveObserver(this); 61 } 62 63 void ConfigurationPolicyObserverRegistrar::Init( 64 ConfigurationPolicyProvider* provider, 65 ConfigurationPolicyProvider::Observer* observer) { 66 provider_ = provider; 67 observer_ = observer; 68 provider_->AddObserver(this); 69 } 70 71 void ConfigurationPolicyObserverRegistrar::OnUpdatePolicy() { 72 observer_->OnUpdatePolicy(); 73 } 74 75 void ConfigurationPolicyObserverRegistrar::OnProviderGoingAway() { 76 observer_->OnProviderGoingAway(); 77 provider_->RemoveObserver(this); 78 provider_ = NULL; 79 } 80 81 } // namespace policy 82