1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <map> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string> 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_namespace.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/schema.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/policy_export.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace policy { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PolicyBundle; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef std::map<std::string, Schema> ComponentMap; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef std::map<PolicyDomain, ComponentMap> DomainMap; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Contains a mapping of policy namespaces (domain + component ID) to its 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// corresponding Schema. 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class POLICY_EXPORT SchemaMap : public base::RefCountedThreadSafe<SchemaMap> { 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SchemaMap(); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Takes ownership of |map| (its contents will be swapped). 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit SchemaMap(DomainMap& map); 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const DomainMap& GetDomains() const; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ComponentMap* GetComponents(PolicyDomain domain) const; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const Schema* GetSchema(const PolicyNamespace& ns) const; 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Removes all the policies in |bundle| that don't match the known schemas. 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Unknown components are also dropped. 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void FilterBundle(PolicyBundle* bundle) const; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns true if this map contains at least one component of a domain other 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // than POLICY_DOMAIN_CHROME. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HasComponents() const; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void GetChanges(const scoped_refptr<SchemaMap>& older, 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespaceList* removed, 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespaceList* added) const; 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) friend class base::RefCountedThreadSafe<SchemaMap>; 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void GetNamespacesNotInOther(const SchemaMap* other, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespaceList* list) const; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~SchemaMap(); 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DomainMap map_; 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SchemaMap); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace policy 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ 66