summaryrefslogtreecommitdiffstats
path: root/chrome/browser/policy/configuration_policy_reader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/policy/configuration_policy_reader.cc')
-rw-r--r--chrome/browser/policy/configuration_policy_reader.cc88
1 files changed, 46 insertions, 42 deletions
diff --git a/chrome/browser/policy/configuration_policy_reader.cc b/chrome/browser/policy/configuration_policy_reader.cc
index 472a151..c8bf7e1 100644
--- a/chrome/browser/policy/configuration_policy_reader.cc
+++ b/chrome/browser/policy/configuration_policy_reader.cc
@@ -12,23 +12,19 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/policy/browser_policy_connector.h"
#include "chrome/browser/policy/configuration_policy_pref_store.h"
-#include "chrome/browser/policy/configuration_policy_store_interface.h"
+#include "chrome/browser/policy/policy_map.h"
namespace policy {
// This class functions as a container for policy status information used by the
// ConfigurationPolicyReader class. It obtains policy values from a
// ConfigurationPolicyProvider and maps them to their status information.
-class ConfigurationPolicyStatusKeeper
- : public ConfigurationPolicyStoreInterface {
+class ConfigurationPolicyStatusKeeper {
public:
ConfigurationPolicyStatusKeeper(ConfigurationPolicyProvider* provider,
PolicyStatusInfo::PolicyLevel policy_level);
virtual ~ConfigurationPolicyStatusKeeper();
- // ConfigurationPolicyStoreInterface methods.
- virtual void Apply(ConfigurationPolicyType policy, base::Value* value);
-
// Returns a pointer to a DictionaryValue containing the status information
// of the policy |policy|. The caller acquires ownership of the returned
// value. Returns NULL if no such policy is stored in this keeper.
@@ -40,6 +36,9 @@ class ConfigurationPolicyStatusKeeper
typedef ConfigurationPolicyProvider::PolicyDefinitionList
PolicyDefinitionList;
+ // Calls Provide() on the passed in |provider| to get policy values.
+ void GetPoliciesFromProvider(ConfigurationPolicyProvider* provider);
+
// Mapping from ConfigurationPolicyType to PolicyStatusInfo.
PolicyStatusMap policy_map_;
@@ -54,9 +53,7 @@ class ConfigurationPolicyStatusKeeper
ConfigurationPolicyStatusKeeper::ConfigurationPolicyStatusKeeper(
ConfigurationPolicyProvider* provider,
PolicyStatusInfo::PolicyLevel policy_level) : policy_level_(policy_level) {
-
- if (!provider->Provide(this))
- LOG(WARNING) << "Failed to get policy from provider.";
+ GetPoliciesFromProvider(provider);
}
ConfigurationPolicyStatusKeeper::~ConfigurationPolicyStatusKeeper() {
@@ -64,26 +61,6 @@ ConfigurationPolicyStatusKeeper::~ConfigurationPolicyStatusKeeper() {
policy_map_.clear();
}
-void ConfigurationPolicyStatusKeeper::Apply(
- ConfigurationPolicyType policy, base::Value* value) {
- string16 name = PolicyStatus::GetPolicyName(policy);
-
- if (name == string16()) {
- NOTREACHED();
- }
-
- // TODO(simo) actually determine whether the policy is a user or a device one
- // and whether the policy could be enforced or not once this information
- // is available.
- PolicyStatusInfo* info = new PolicyStatusInfo(name,
- PolicyStatusInfo::USER,
- policy_level_,
- value,
- PolicyStatusInfo::ENFORCED,
- string16());
- policy_map_[policy] = info;
-}
-
DictionaryValue* ConfigurationPolicyStatusKeeper::GetPolicyStatus(
ConfigurationPolicyType policy) const {
PolicyStatusMap::const_iterator entry = policy_map_.find(policy);
@@ -91,7 +68,47 @@ DictionaryValue* ConfigurationPolicyStatusKeeper::GetPolicyStatus(
(entry->second)->GetDictionaryValue() : NULL;
}
+void ConfigurationPolicyStatusKeeper::GetPoliciesFromProvider(
+ ConfigurationPolicyProvider* provider) {
+ scoped_ptr<PolicyMap> policies(new PolicyMap());
+ if (!provider->Provide(policies.get()))
+ LOG(WARNING) << "Failed to get policy from provider.";
+
+ PolicyMap::const_iterator policy = policies->begin();
+ for ( ; policy != policies->end(); ++policy) {
+ string16 name = PolicyStatus::GetPolicyName(policy->first);
+
+ if (name == string16()) {
+ NOTREACHED();
+ }
+
+ // TODO(simo) actually determine whether the policy is a user or a device
+ // one and whether the policy could be enforced or not once this information
+ // is available.
+ PolicyStatusInfo* info = new PolicyStatusInfo(name,
+ PolicyStatusInfo::USER,
+ policy_level_,
+ policy->second->DeepCopy(),
+ PolicyStatusInfo::ENFORCED,
+ string16());
+ policy_map_[policy->first] = info;
+ }
+}
+
// ConfigurationPolicyReader
+ConfigurationPolicyReader::ConfigurationPolicyReader(
+ ConfigurationPolicyProvider* provider,
+ PolicyStatusInfo::PolicyLevel policy_level)
+ : provider_(provider),
+ policy_level_(policy_level) {
+ if (provider_) {
+ // Read initial policy.
+ policy_keeper_.reset(
+ new ConfigurationPolicyStatusKeeper(provider, policy_level));
+ registrar_.Init(provider_, this);
+ }
+}
+
ConfigurationPolicyReader::~ConfigurationPolicyReader() {
}
@@ -145,19 +162,6 @@ DictionaryValue* ConfigurationPolicyReader::GetPolicyStatus(
return policy_keeper_->GetPolicyStatus(policy);
}
-ConfigurationPolicyReader::ConfigurationPolicyReader(
- ConfigurationPolicyProvider* provider,
- PolicyStatusInfo::PolicyLevel policy_level)
- : provider_(provider),
- policy_level_(policy_level) {
- if (provider_) {
- // Read initial policy.
- policy_keeper_.reset(
- new ConfigurationPolicyStatusKeeper(provider, policy_level));
- registrar_.Init(provider_, this);
- }
-}
-
ConfigurationPolicyReader::ConfigurationPolicyReader()
: provider_(NULL),
policy_level_(PolicyStatusInfo::LEVEL_UNDEFINED),