diff options
author | dconnelly@chromium.org <dconnelly@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 17:50:47 +0000 |
---|---|---|
committer | dconnelly@chromium.org <dconnelly@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 17:50:47 +0000 |
commit | f39e98eb6e1f501e11eb596879a59c1420411500 (patch) | |
tree | 40c1211b431e3af82a9ae996d3949436e196373b /components/policy/core/common/schema_map.h | |
parent | a404789baf4191b0c3fd3b0d5b050c6937c68d87 (diff) | |
download | chromium_src-f39e98eb6e1f501e11eb596879a59c1420411500.zip chromium_src-f39e98eb6e1f501e11eb596879a59c1420411500.tar.gz chromium_src-f39e98eb6e1f501e11eb596879a59c1420411500.tar.bz2 |
Move PolicySchema and PolicySchemaRegistry to components/policy/.
This facilitates the refactoring of chrome/browser/policy into a layered
component.
Depends on https://codereview.chromium.org/78823004/
BUG=271392
Review URL: https://codereview.chromium.org/78453005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236785 0039d316-1c4b-4281-b951-d872f2087c98
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_ |