Home | History | Annotate | Download | only in policy
      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