| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_POLICY_POLICY_MAP_H_ | |
| 6 #define CHROME_BROWSER_POLICY_POLICY_MAP_H_ | |
| 7 | |
| 8 #include <map> | |
| 9 #include <set> | |
| 10 #include <string> | |
| 11 | |
| 12 #include "base/memory/scoped_ptr.h" | |
| 13 #include "base/values.h" | |
| 14 #include "chrome/browser/policy/external_data_fetcher.h" | |
| 15 #include "chrome/browser/policy/policy_types.h" | |
| 16 | |
| 17 namespace policy { | |
| 18 | |
| 19 // A mapping of policy names to policy values for a given policy namespace. | |
| 20 class PolicyMap { | |
| 21 public: | |
| 22 // Each policy maps to an Entry which keeps the policy value as well as other | |
| 23 // relevant data about the policy. | |
| 24 struct Entry { | |
| 25 PolicyLevel level; | |
| 26 PolicyScope scope; | |
| 27 base::Value* value; | |
| 28 ExternalDataFetcher* external_data_fetcher; | |
| 29 | |
| 30 Entry() | |
| 31 : level(POLICY_LEVEL_RECOMMENDED), | |
| 32 scope(POLICY_SCOPE_USER), | |
| 33 value(NULL), | |
| 34 external_data_fetcher(NULL) {} | |
| 35 | |
| 36 // Returns true if |this| has higher priority than |other|. | |
| 37 bool has_higher_priority_than(const Entry& other) const; | |
| 38 | |
| 39 // Returns true if |this| equals |other|. | |
| 40 bool Equals(const Entry& other) const; | |
| 41 }; | |
| 42 | |
| 43 typedef std::map<std::string, Entry> PolicyMapType; | |
| 44 typedef PolicyMapType::const_iterator const_iterator; | |
| 45 | |
| 46 PolicyMap(); | |
| 47 virtual ~PolicyMap(); | |
| 48 | |
| 49 // Returns a weak reference to the entry currently stored for key |policy|, | |
| 50 // or NULL if not found. Ownership is retained by the PolicyMap. | |
| 51 const Entry* Get(const std::string& policy) const; | |
| 52 | |
| 53 // Returns a weak reference to the value currently stored for key |policy|, | |
| 54 // or NULL if not found. Ownership is retained by the PolicyMap. | |
| 55 // This is equivalent to Get(policy)->value, when it doesn't return NULL. | |
| 56 const base::Value* GetValue(const std::string& policy) const; | |
| 57 | |
| 58 // Takes ownership of |value| and |external_data_fetcher|. Overwrites any | |
| 59 // existing information stored in the map for the key |policy|. | |
| 60 void Set(const std::string& policy, | |
| 61 PolicyLevel level, | |
| 62 PolicyScope scope, | |
| 63 base::Value* value, | |
| 64 ExternalDataFetcher* external_data_fetcher); | |
| 65 | |
| 66 // Erase the given |policy|, if it exists in this map. | |
| 67 void Erase(const std::string& policy); | |
| 68 | |
| 69 // Swaps the internal representation of |this| with |other|. | |
| 70 void Swap(PolicyMap* other); | |
| 71 | |
| 72 // |this| becomes a copy of |other|. Any existing policies are dropped. | |
| 73 void CopyFrom(const PolicyMap& other); | |
| 74 | |
| 75 // Returns a copy of |this|. | |
| 76 scoped_ptr<PolicyMap> DeepCopy() const; | |
| 77 | |
| 78 // Merges policies from |other| into |this|. Existing policies are only | |
| 79 // overridden by those in |other| if they have a higher priority, as defined | |
| 80 // by Entry::has_higher_priority_than(). If a policy is contained in both | |
| 81 // maps with the same priority, the current value in |this| is preserved. | |
| 82 void MergeFrom(const PolicyMap& other); | |
| 83 | |
| 84 // Loads the values in |policies| into this PolicyMap. All policies loaded | |
| 85 // will have |level| and |scope| in their entries. Existing entries are | |
| 86 // replaced. | |
| 87 void LoadFrom(const base::DictionaryValue* policies, | |
| 88 PolicyLevel level, | |
| 89 PolicyScope scope); | |
| 90 | |
| 91 // Compares this value map against |other| and stores all key names that have | |
| 92 // different values or reference different external data in |differing_keys|. | |
| 93 // This includes keys that are present only in one of the maps. | |
| 94 // |differing_keys| is not cleared before the keys are added. | |
| 95 void GetDifferingKeys(const PolicyMap& other, | |
| 96 std::set<std::string>* differing_keys) const; | |
| 97 | |
| 98 // Removes all policies that don't have the specified |level|. This is a | |
| 99 // temporary helper method, until mandatory and recommended levels are served | |
| 100 // by a single provider. | |
| 101 // TODO(joaodasilva): Remove this. http://crbug.com/108999 | |
| 102 void FilterLevel(PolicyLevel level); | |
| 103 | |
| 104 bool Equals(const PolicyMap& other) const; | |
| 105 bool empty() const; | |
| 106 size_t size() const; | |
| 107 | |
| 108 const_iterator begin() const; | |
| 109 const_iterator end() const; | |
| 110 void Clear(); | |
| 111 | |
| 112 private: | |
| 113 // Helper function for Equals(). | |
| 114 static bool MapEntryEquals(const PolicyMapType::value_type& a, | |
| 115 const PolicyMapType::value_type& b); | |
| 116 | |
| 117 PolicyMapType map_; | |
| 118 | |
| 119 DISALLOW_COPY_AND_ASSIGN(PolicyMap); | |
| 120 }; | |
| 121 | |
| 122 } // namespace policy | |
| 123 | |
| 124 #endif // CHROME_BROWSER_POLICY_POLICY_MAP_H_ | |
| OLD | NEW |