• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_FORWARDING_POLICY_PROVIDER_H_
6 #define COMPONENTS_POLICY_CORE_COMMON_FORWARDING_POLICY_PROVIDER_H_
7 
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "components/policy/core/common/configuration_policy_provider.h"
11 #include "components/policy/core/common/policy_namespace.h"
12 #include "components/policy/policy_export.h"
13 
14 namespace policy {
15 
16 // A policy provider that forwards calls to another provider.
17 // This provider also tracks the SchemaRegistry, and becomes ready after making
18 // sure the delegate provider has refreshed its policies with an updated view
19 // of the complete schema. It is expected that the delegate's SchemaRegistry
20 // is a CombinedSchemaRegistry tracking the forwarding provider's registry.
21 class POLICY_EXPORT ForwardingPolicyProvider
22     : public ConfigurationPolicyProvider,
23       public ConfigurationPolicyProvider::Observer {
24  public:
25   // The |delegate| must outlive this provider.
26   explicit ForwardingPolicyProvider(ConfigurationPolicyProvider* delegate);
27   virtual ~ForwardingPolicyProvider();
28 
29   // ConfigurationPolicyProvider:
30   //
31   // Note that Init() and Shutdown() are not forwarded to the |delegate_|, since
32   // this provider does not own it and its up to the |delegate_|'s owner to
33   // initialize it and shut it down.
34   //
35   // Note also that this provider may have a SchemaRegistry passed in Init()
36   // that doesn't match the |delegate_|'s; therefore OnSchemaRegistryUpdated()
37   // and OnSchemaRegistryReady() are not forwarded either. It is assumed that
38   // the |delegate_|'s SchemaRegistry contains a superset of this provider's
39   // SchemaRegistry though (i.e. it's a CombinedSchemaRegistry that contains
40   // this provider's SchemaRegistry).
41   //
42   // This provider manages its own initialization state for all policy domains
43   // except POLICY_DOMAIN_CHROME, whose status is always queried from the
44   // |delegate_|. RefreshPolicies() calls are also forwarded, since this
45   // provider doesn't have a "real" policy source of its own.
46   virtual void Init(SchemaRegistry* registry) OVERRIDE;
47   virtual bool IsInitializationComplete(PolicyDomain domain) const OVERRIDE;
48   virtual void RefreshPolicies() OVERRIDE;
49   virtual void OnSchemaRegistryReady() OVERRIDE;
50   virtual void OnSchemaRegistryUpdated(bool has_new_schemas) OVERRIDE;
51 
52   // ConfigurationPolicyProvider::Observer:
53   virtual void OnUpdatePolicy(ConfigurationPolicyProvider* provider) OVERRIDE;
54 
55  private:
56   enum InitializationState {
57     WAITING_FOR_REGISTRY_READY,
58     WAITING_FOR_REFRESH,
59     READY,
60   };
61 
62   ConfigurationPolicyProvider* delegate_;
63   InitializationState state_;
64 
65   DISALLOW_COPY_AND_ASSIGN(ForwardingPolicyProvider);
66 };
67 
68 }  // namespace policy
69 
70 #endif  // COMPONENTS_POLICY_CORE_COMMON_FORWARDING_POLICY_PROVIDER_H_
71