• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_
6 #define COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_
7 
8 #include <map>
9 #include <string>
10 
11 #include "base/basictypes.h"
12 #include "components/policy/core/common/policy_map.h"
13 #include "components/policy/core/common/policy_namespace.h"
14 #include "components/policy/policy_export.h"
15 
16 namespace policy {
17 
18 // Maps policy namespaces to PolicyMaps.
19 class POLICY_EXPORT PolicyBundle {
20  public:
21   typedef std::map<PolicyNamespace, PolicyMap*> MapType;
22   typedef MapType::iterator iterator;
23   typedef MapType::const_iterator const_iterator;
24 
25   PolicyBundle();
26   virtual ~PolicyBundle();
27 
28   // Returns the PolicyMap for namespace |ns|.
29   PolicyMap& Get(const PolicyNamespace& ns);
30   const PolicyMap& Get(const PolicyNamespace& ns) const;
31 
32   // Swaps the internal representation of |this| with |other|.
33   void Swap(PolicyBundle* other);
34 
35   // |this| becomes a copy of |other|. Any existing PolicyMaps are dropped.
36   void CopyFrom(const PolicyBundle& other);
37 
38   // Merges the PolicyMaps of |this| with those of |other| for each namespace
39   // in common. Also adds copies of the (namespace, PolicyMap) pairs in |other|
40   // that don't have an entry in |this|.
41   // Each policy in each PolicyMap is replaced only if the policy from |other|
42   // has a higher priority.
43   // See PolicyMap::MergeFrom for details on merging individual PolicyMaps.
44   void MergeFrom(const PolicyBundle& other);
45 
46   // Returns true if |other| has the same keys and value as |this|.
47   bool Equals(const PolicyBundle& other) const;
48 
49   // Returns iterators to the beginning and end of the underlying container.
begin()50   iterator begin() { return policy_bundle_.begin(); }
end()51   iterator end() { return policy_bundle_.end(); }
52 
53   // These can be used to iterate over and read the PolicyMaps, but not to
54   // modify them.
begin()55   const_iterator begin() const { return policy_bundle_.begin(); }
end()56   const_iterator end() const { return policy_bundle_.end(); }
57 
58   // Erases all the existing pairs.
59   void Clear();
60 
61  private:
62   MapType policy_bundle_;
63 
64   // An empty PolicyMap that is returned by const Get() for namespaces that
65   // do not exist in |policy_bundle_|.
66   const PolicyMap kEmpty_;
67 
68   DISALLOW_COPY_AND_ASSIGN(PolicyBundle);
69 };
70 
71 }  // namespace policy
72 
73 #endif  // COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_
74