1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "components/policy/core/common/policy_namespace.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/policy_export.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps policy namespaces to PolicyMaps. 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class POLICY_EXPORT PolicyBundle { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<PolicyNamespace, PolicyMap*> MapType; 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef MapType::iterator iterator; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef MapType::const_iterator const_iterator; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyBundle(); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PolicyBundle(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the PolicyMap for namespace |ns|. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PolicyMap& Get(const PolicyNamespace& ns); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PolicyMap& Get(const PolicyNamespace& ns) const; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Swaps the internal representation of |this| with |other|. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Swap(PolicyBundle* other); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |this| becomes a copy of |other|. Any existing PolicyMaps are dropped. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CopyFrom(const PolicyBundle& other); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Merges the PolicyMaps of |this| with those of |other| for each namespace 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in common. Also adds copies of the (namespace, PolicyMap) pairs in |other| 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that don't have an entry in |this|. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Each policy in each PolicyMap is replaced only if the policy from |other| 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has a higher priority. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See PolicyMap::MergeFrom for details on merging individual PolicyMaps. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MergeFrom(const PolicyBundle& other); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if |other| has the same keys and value as |this|. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Equals(const PolicyBundle& other) const; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns iterators to the beginning and end of the underlying container. 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) iterator begin() { return policy_bundle_.begin(); } 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) iterator end() { return policy_bundle_.end(); } 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These can be used to iterate over and read the PolicyMaps, but not to 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modify them. 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const_iterator begin() const { return policy_bundle_.begin(); } 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const_iterator end() const { return policy_bundle_.end(); } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Erases all the existing pairs. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Clear(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MapType policy_bundle_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An empty PolicyMap that is returned by const Get() for namespaces that 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // do not exist in |policy_bundle_|. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyMap kEmpty_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PolicyBundle); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_POLICY_CORE_COMMON_POLICY_BUNDLE_H_ 74