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