diff options
Diffstat (limited to 'components/policy/core/common/schema_map.h')
-rw-r--r-- | components/policy/core/common/schema_map.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/components/policy/core/common/schema_map.h b/components/policy/core/common/schema_map.h new file mode 100644 index 0000000..e91886e --- /dev/null +++ b/components/policy/core/common/schema_map.h @@ -0,0 +1,65 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ +#define COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ + +#include <map> +#include <string> + +#include "base/basictypes.h" +#include "base/memory/ref_counted.h" +#include "components/policy/core/common/policy_namespace.h" +#include "components/policy/core/common/schema.h" +#include "components/policy/policy_export.h" + +namespace policy { + +class PolicyBundle; + +typedef std::map<std::string, Schema> ComponentMap; +typedef std::map<PolicyDomain, ComponentMap> DomainMap; + +// Contains a mapping of policy namespaces (domain + component ID) to its +// corresponding Schema. +class POLICY_EXPORT SchemaMap : public base::RefCountedThreadSafe<SchemaMap> { + public: + SchemaMap(); + // Takes ownership of |map| (its contents will be swapped). + explicit SchemaMap(DomainMap& map); + + const DomainMap& GetDomains() const; + + const ComponentMap* GetComponents(PolicyDomain domain) const; + + const Schema* GetSchema(const PolicyNamespace& ns) const; + + // Removes all the policies in |bundle| that don't match the known schemas. + // Unknown components are also dropped. + void FilterBundle(PolicyBundle* bundle) const; + + // Returns true if this map contains at least one component of a domain other + // than POLICY_DOMAIN_CHROME. + bool HasComponents() const; + + void GetChanges(const scoped_refptr<SchemaMap>& older, + PolicyNamespaceList* removed, + PolicyNamespaceList* added) const; + + private: + friend class base::RefCountedThreadSafe<SchemaMap>; + + void GetNamespacesNotInOther(const SchemaMap* other, + PolicyNamespaceList* list) const; + + ~SchemaMap(); + + DomainMap map_; + + DISALLOW_COPY_AND_ASSIGN(SchemaMap); +}; + +} // namespace policy + +#endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_MAP_H_ |