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