// 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 CHROME_BROWSER_POLICY_FORWARDING_POLICY_PROVIDER_H_
#define CHROME_BROWSER_POLICY_FORWARDING_POLICY_PROVIDER_H_

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "chrome/browser/policy/configuration_policy_provider.h"
#include "components/policy/core/common/policy_namespace.h"

namespace policy {

// A policy provider that forwards calls to another provider.
// This provider also tracks the SchemaRegistry, and becomes ready after making
// sure the delegate provider has refreshed its policies with an updated view
// of the complete schema. It is expected that the delegate's SchemaRegistry
// is a CombinedSchemaRegistry tracking the forwarding provider's registry.
class ForwardingPolicyProvider : public ConfigurationPolicyProvider,
                                 public ConfigurationPolicyProvider::Observer {
 public:
  // The |delegate| must outlive this provider.
  explicit ForwardingPolicyProvider(ConfigurationPolicyProvider* delegate);
  virtual ~ForwardingPolicyProvider();

  // ConfigurationPolicyProvider:
  //
  // Note that Init() and Shutdown() are not forwarded to the |delegate_|, since
  // this provider does not own it and its up to the |delegate_|'s owner to
  // initialize it and shut it down.
  //
  // Note also that this provider may have a SchemaRegistry passed in Init()
  // that doesn't match the |delegate_|'s; therefore OnSchemaRegistryUpdated()
  // and OnSchemaRegistryReady() are not forwarded either. It is assumed that
  // the |delegate_|'s SchemaRegistry contains a superset of this provider's
  // SchemaRegistry though (i.e. it's a CombinedSchemaRegistry that contains
  // this provider's SchemaRegistry).
  //
  // This provider manages its own initialization state for all policy domains
  // except POLICY_DOMAIN_CHROME, whose status is always queried from the
  // |delegate_|. RefreshPolicies() calls are also forwarded, since this
  // provider doesn't have a "real" policy source of its own.
  virtual void Init(SchemaRegistry* registry) OVERRIDE;
  virtual bool IsInitializationComplete(PolicyDomain domain) const OVERRIDE;
  virtual void RefreshPolicies() OVERRIDE;
  virtual void OnSchemaRegistryReady() OVERRIDE;
  virtual void OnSchemaRegistryUpdated(bool has_new_schemas) OVERRIDE;

  // ConfigurationPolicyProvider::Observer:
  virtual void OnUpdatePolicy(ConfigurationPolicyProvider* provider) OVERRIDE;

 private:
  enum InitializationState {
    WAITING_FOR_REGISTRY_READY,
    WAITING_FOR_REFRESH,
    READY,
  };

  ConfigurationPolicyProvider* delegate_;
  InitializationState state_;

  DISALLOW_COPY_AND_ASSIGN(ForwardingPolicyProvider);
};

}  // namespace policy

#endif  // CHROME_BROWSER_POLICY_FORWARDING_POLICY_PROVIDER_H_
