Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: chrome/browser/policy/policy_map.h

Issue 9111022: Removed ConfigurationPolicyType and extended PolicyMap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/policy/policy_error_map.cc ('k') | chrome/browser/policy/policy_map.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/policy_map.h
diff --git a/chrome/browser/policy/policy_map.h b/chrome/browser/policy/policy_map.h
index ab0e9f82be8a793a8b35fdd00a775bc55cb3848b..d677b6ff37895329f7c41431c33377ccb7dd8d1b 100644
--- a/chrome/browser/policy/policy_map.h
+++ b/chrome/browser/policy/policy_map.h
@@ -7,47 +7,119 @@
#pragma once
#include <map>
+#include <set>
+#include <string>
#include "base/values.h"
-#include "policy/configuration_policy_type.h"
namespace policy {
struct PolicyDefinitionList;
-// Wrapper class around a std::map<ConfigurationPolicyType, Value*> that
-// properly cleans up after itself when going out of scope.
-// Exposes interesting methods of the underlying std::map.
+// The level of a policy determines its enforceability and whether users can
+// override it or not. The values are listed in increasing order of priority.
+enum PolicyLevel {
+ // RECOMMENDED policies can be overridden by users. They are meant as a
+ // default value configured by admins, that users can customize.
+ POLICY_LEVEL_RECOMMENDED,
+
+ // MANDATORY policies must be enforced and users can't circumvent them.
+ POLICY_LEVEL_MANDATORY,
+};
+
+// The scope of a policy flags whether it is meant to be applied to the current
+// user or to the machine.
+enum PolicyScope {
+ // USER policies apply to sessions of the current user.
+ POLICY_SCOPE_USER,
+
+ // MACHINE policies apply to any users of the current machine.
+ POLICY_SCOPE_MACHINE,
+};
+
+// A mapping of policy names to policy values for a given policy namespace.
class PolicyMap {
public:
- typedef std::map<ConfigurationPolicyType, Value*> PolicyMapType;
+ // Each policy maps to an Entry which keeps the policy value as well as other
+ // relevant data about the policy.
+ struct Entry {
+ PolicyLevel level;
+ PolicyScope scope;
+ Value* value;
+
+ Entry()
+ : level(POLICY_LEVEL_RECOMMENDED),
+ scope(POLICY_SCOPE_USER),
+ value(NULL) {}
+
+ // Returns true if |this| has higher priority than |other|.
+ bool has_higher_priority_than(const Entry& other) const;
+
+ // Returns true if |this| equals |other|.
+ bool Equals(const Entry& other) const;
+ };
+
+ typedef std::map<std::string, Entry> PolicyMapType;
typedef PolicyMapType::const_iterator const_iterator;
PolicyMap();
virtual ~PolicyMap();
- // Returns a weak reference to the value currently stored for key |policy|.
- // Ownership is retained by PolicyMap; callers should use Value::DeepCopy
- // if they need a copy that they own themselves.
- // Returns NULL if the map does not contain a value for |policy|.
- const Value* Get(ConfigurationPolicyType policy) const;
+ // Returns a weak reference to the entry currently stored for key |policy|,
+ // or NULL if not found. Ownership is retained by the PolicyMap.
+ const Entry* Get(const std::string& policy) const;
+
+ // Returns a weak reference to the value currently stored for key |policy|,
+ // or NULL if not found. Ownership is retained by the PolicyMap.
+ // This is equivalent to Get(policy)->value, when it doesn't return NULL.
+ const Value* GetValue(const std::string& policy) const;
+
// Takes ownership of |value|. Overwrites any existing value stored in the
// map for the key |policy|.
- void Set(ConfigurationPolicyType policy, Value* value);
- void Erase(ConfigurationPolicyType policy);
+ void Set(const std::string& policy,
+ PolicyLevel level,
+ PolicyScope scope,
+ Value* value);
+
+ // Erase the given |policy|, if it exists in this map.
+ void Erase(const std::string& policy);
+ // Swaps the internal representation of |this| with |other|.
void Swap(PolicyMap* other);
+
+ // |this| becomes a copy of |other|. Any existing policies are dropped.
void CopyFrom(const PolicyMap& other);
// Similar to CopyFrom, but doesn't Clear() |this| before merging, and only
// merges keys that aren't already contained in |this|.
+
+ // Merges policies from |other| into |this|. Existing policies are only
+ // overridden by those in |other| if they have a higher priority, as defined
+ // by Entry::has_higher_priority_than(). If a policy is contained in both
+ // maps with the same priority, the current value in |this| is preserved.
void MergeFrom(const PolicyMap& other);
// Loads the values in |policies| into this PolicyMap, mapped to their
// corresponding policy type. The policies to load, and their types, are
- // listed in |list|.
+ // listed in |list|. All policies loaded will have |level| and |scope| in
+ // their entries.
void LoadFrom(const DictionaryValue* policies,
- const PolicyDefinitionList* list);
+ const PolicyDefinitionList* list,
+ PolicyLevel level,
+ PolicyScope scope);
+
+ // Compares this value map against |other| and stores all key names that have
+ // different values in |differing_keys|. This includes keys that are present
+ // only in one of the maps. |differing_keys| is not cleared before the keys
+ // are added.
+ void GetDifferingKeys(const PolicyMap& other,
+ std::set<std::string>* differing_keys) const;
+
+ // Removes all policies that don't have the specified |level|. This is a
+ // temporary helper method, until mandatory and recommended levels are served
+ // by a single provider.
+ // TODO(joaodasilva): Remove this. http://crbug.com/108999
+ void FilterLevel(PolicyLevel level);
bool Equals(const PolicyMap& other) const;
bool empty() const;
@@ -58,7 +130,7 @@ class PolicyMap {
void Clear();
private:
- // Helper function for Equals(...).
+ // Helper function for Equals().
static bool MapEntryEquals(const PolicyMapType::value_type& a,
const PolicyMapType::value_type& b);
« no previous file with comments | « chrome/browser/policy/policy_error_map.cc ('k') | chrome/browser/policy/policy_map.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698