• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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