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
ConfigurationPolicyProvider(const PolicyDefinitionList * policy_list)14 ConfigurationPolicyProvider::ConfigurationPolicyProvider(
15 const PolicyDefinitionList* policy_list)
16 : policy_definition_list_(policy_list) {
17 }
18
~ConfigurationPolicyProvider()19 ConfigurationPolicyProvider::~ConfigurationPolicyProvider() {}
20
IsInitializationComplete() const21 bool ConfigurationPolicyProvider::IsInitializationComplete() const {
22 return true;
23 }
24
ApplyPolicyValueTree(const DictionaryValue * policies,ConfigurationPolicyStoreInterface * store)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
ApplyPolicyMap(const PolicyMap * policies,ConfigurationPolicyStoreInterface * store)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
ConfigurationPolicyObserverRegistrar()54 ConfigurationPolicyObserverRegistrar::ConfigurationPolicyObserverRegistrar()
55 : provider_(NULL),
56 observer_(NULL) {}
57
~ConfigurationPolicyObserverRegistrar()58 ConfigurationPolicyObserverRegistrar::~ConfigurationPolicyObserverRegistrar() {
59 if (provider_)
60 provider_->RemoveObserver(this);
61 }
62
Init(ConfigurationPolicyProvider * provider,ConfigurationPolicyProvider::Observer * observer)63 void ConfigurationPolicyObserverRegistrar::Init(
64 ConfigurationPolicyProvider* provider,
65 ConfigurationPolicyProvider::Observer* observer) {
66 provider_ = provider;
67 observer_ = observer;
68 provider_->AddObserver(this);
69 }
70
OnUpdatePolicy()71 void ConfigurationPolicyObserverRegistrar::OnUpdatePolicy() {
72 observer_->OnUpdatePolicy();
73 }
74
OnProviderGoingAway()75 void ConfigurationPolicyObserverRegistrar::OnProviderGoingAway() {
76 observer_->OnProviderGoingAway();
77 provider_->RemoveObserver(this);
78 provider_ = NULL;
79 }
80
81 } // namespace policy
82