13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/policy/configuration_policy_provider.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/values.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/policy/policy_map.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace policy { 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Class ConfigurationPolicyProvider. 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenConfigurationPolicyProvider::ConfigurationPolicyProvider( 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const PolicyDefinitionList* policy_list) 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch : policy_definition_list_(policy_list) { 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickConfigurationPolicyProvider::~ConfigurationPolicyProvider() {} 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool ConfigurationPolicyProvider::IsInitializationComplete() const { 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return true; 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid ConfigurationPolicyProvider::ApplyPolicyValueTree( 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const DictionaryValue* policies, 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ConfigurationPolicyStoreInterface* store) { 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const PolicyDefinitionList* policy_list(policy_definition_list()); 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch for (const PolicyDefinitionList::Entry* i = policy_list->begin; 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch i != policy_list->end; ++i) { 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Value* value; 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (policies->Get(i->name, &value) && value->IsType(i->value_type)) 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch store->Apply(i->policy_type, value->DeepCopy()); 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // TODO(mnissler): Handle preference overrides once |ConfigurationPolicyStore| 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // supports it. 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid ConfigurationPolicyProvider::ApplyPolicyMap( 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const PolicyMap* policies, 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ConfigurationPolicyStoreInterface* store) { 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const PolicyDefinitionList* policy_list(policy_definition_list()); 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (const PolicyDefinitionList::Entry* i = policy_list->begin; 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i != policy_list->end; ++i) { 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const Value* value = policies->Get(i->policy_type); 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (value && value->IsType(i->value_type)) 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen store->Apply(i->policy_type, value->DeepCopy()); 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Class ConfigurationPolicyObserverRegistrar. 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenConfigurationPolicyObserverRegistrar::ConfigurationPolicyObserverRegistrar() 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : provider_(NULL), 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen observer_(NULL) {} 573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 583f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenConfigurationPolicyObserverRegistrar::~ConfigurationPolicyObserverRegistrar() { 593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (provider_) 603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen provider_->RemoveObserver(this); 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid ConfigurationPolicyObserverRegistrar::Init( 643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ConfigurationPolicyProvider* provider, 653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ConfigurationPolicyProvider::Observer* observer) { 663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen provider_ = provider; 673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen observer_ = observer; 683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen provider_->AddObserver(this); 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid ConfigurationPolicyObserverRegistrar::OnUpdatePolicy() { 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen observer_->OnUpdatePolicy(); 733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid ConfigurationPolicyObserverRegistrar::OnProviderGoingAway() { 763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen observer_->OnProviderGoingAway(); 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen provider_->RemoveObserver(this); 783f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen provider_ = NULL; 793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace policy 82