blob: 629390079f0d3db0938a6165c7904a6a2dee5868 [file] [log] [blame]
// Copyright (c) 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 CHROME_BROWSER_POLICY_POLICY_DOMAIN_DESCRIPTOR_H_
#define CHROME_BROWSER_POLICY_POLICY_DOMAIN_DESCRIPTOR_H_
#include <map>
#include <string>
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "components/policy/core/common/policy_namespace.h"
#include "components/policy/core/common/schema.h"
namespace policy {
class PolicyBundle;
// For each policy domain, this class keeps the complete list of valid
// components for that domain, and the Schema for each component.
class PolicyDomainDescriptor
: public base::RefCountedThreadSafe<PolicyDomainDescriptor> {
public:
typedef std::map<std::string, Schema> SchemaMap;
explicit PolicyDomainDescriptor(PolicyDomain domain);
PolicyDomain domain() const { return domain_; }
const SchemaMap& components() const { return schema_map_; }
// Registers the given |component_id| for this domain, and sets its current
// |schema|. This registration overrides any previously set schema for this
// component.
void RegisterComponent(const std::string& component_id,
scoped_ptr<SchemaOwner> schema);
// Removes all the policies in |bundle| that don't match this descriptor.
// Policies of domains other than |domain_| are ignored.
void FilterBundle(PolicyBundle* bundle) const;
private:
typedef std::map<std::string, SchemaOwner*> SchemaOwnerMap;
friend class base::RefCountedThreadSafe<PolicyDomainDescriptor>;
~PolicyDomainDescriptor();
PolicyDomain domain_;
SchemaOwnerMap schema_owner_map_;
SchemaMap schema_map_;
DISALLOW_COPY_AND_ASSIGN(PolicyDomainDescriptor);
};
} // namespace policy
#endif // CHROME_BROWSER_POLICY_POLICY_DOMAIN_DESCRIPTOR_H_