| Index: components/policy/core/common/schema_registry.h
|
| diff --git a/components/policy/core/common/schema_registry.h b/components/policy/core/common/schema_registry.h
|
| index b9f7fa8777e02f181d70d6441be6c52755a40589..6df4db2b19a7565337e8ce2a619990584e37afcc 100644
|
| --- a/components/policy/core/common/schema_registry.h
|
| +++ b/components/policy/core/common/schema_registry.h
|
| @@ -43,6 +43,16 @@ class POLICY_EXPORT SchemaRegistry : public base::NonThreadSafe {
|
| virtual ~Observer();
|
| };
|
|
|
| + // This observer is only meant to be used by subclasses.
|
| + class POLICY_EXPORT InternalObserver {
|
| + public:
|
| + // Invoked when |registry| is about to be destroyed.
|
| + virtual void OnSchemaRegistryShuttingDown(SchemaRegistry* registry) = 0;
|
| +
|
| + protected:
|
| + virtual ~InternalObserver();
|
| + };
|
| +
|
| SchemaRegistry();
|
| virtual ~SchemaRegistry();
|
|
|
| @@ -69,7 +79,8 @@ class POLICY_EXPORT SchemaRegistry : public base::NonThreadSafe {
|
| void AddObserver(Observer* observer);
|
| void RemoveObserver(Observer* observer);
|
|
|
| - bool HasObservers() const;
|
| + void AddInternalObserver(InternalObserver* observer);
|
| + void RemoveInternalObserver(InternalObserver* observer);
|
|
|
| protected:
|
| void Notify(bool has_new_schemas);
|
| @@ -78,30 +89,35 @@ class POLICY_EXPORT SchemaRegistry : public base::NonThreadSafe {
|
|
|
| private:
|
| ObserverList<Observer, true> observers_;
|
| + ObserverList<InternalObserver, true> internal_observers_;
|
| bool domains_ready_[POLICY_DOMAIN_SIZE];
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SchemaRegistry);
|
| };
|
|
|
| // A registry that combines the maps of other registries.
|
| -class POLICY_EXPORT CombinedSchemaRegistry : public SchemaRegistry,
|
| - public SchemaRegistry::Observer {
|
| +class POLICY_EXPORT CombinedSchemaRegistry
|
| + : public SchemaRegistry,
|
| + public SchemaRegistry::Observer,
|
| + public SchemaRegistry::InternalObserver {
|
| public:
|
| CombinedSchemaRegistry();
|
| virtual ~CombinedSchemaRegistry();
|
|
|
| void Track(SchemaRegistry* registry);
|
| - void Untrack(SchemaRegistry* registry);
|
|
|
| + // SchemaRegistry:
|
| virtual void RegisterComponents(PolicyDomain domain,
|
| const ComponentMap& components) OVERRIDE;
|
| -
|
| virtual void UnregisterComponent(const PolicyNamespace& ns) OVERRIDE;
|
|
|
| + // SchemaRegistry::Observer:
|
| virtual void OnSchemaRegistryUpdated(bool has_new_schemas) OVERRIDE;
|
| -
|
| virtual void OnSchemaRegistryReady() OVERRIDE;
|
|
|
| + // SchemaRegistry::InternalObserver:
|
| + virtual void OnSchemaRegistryShuttingDown(SchemaRegistry* registry) OVERRIDE;
|
| +
|
| private:
|
| void Combine(bool has_new_schemas);
|
|
|
| @@ -111,6 +127,35 @@ class POLICY_EXPORT CombinedSchemaRegistry : public SchemaRegistry,
|
| DISALLOW_COPY_AND_ASSIGN(CombinedSchemaRegistry);
|
| };
|
|
|
| +// A registry that wraps another schema registry.
|
| +class POLICY_EXPORT ForwardingSchemaRegistry
|
| + : public SchemaRegistry,
|
| + public SchemaRegistry::Observer,
|
| + public SchemaRegistry::InternalObserver {
|
| + public:
|
| + // This registry will stop updating its SchemaMap when |wrapped| is
|
| + // destroyed.
|
| + explicit ForwardingSchemaRegistry(SchemaRegistry* wrapped);
|
| + virtual ~ForwardingSchemaRegistry();
|
| +
|
| + // SchemaRegistry:
|
| + virtual void RegisterComponents(PolicyDomain domain,
|
| + const ComponentMap& components) OVERRIDE;
|
| + virtual void UnregisterComponent(const PolicyNamespace& ns) OVERRIDE;
|
| +
|
| + // SchemaRegistry::Observer:
|
| + virtual void OnSchemaRegistryUpdated(bool has_new_schemas) OVERRIDE;
|
| + virtual void OnSchemaRegistryReady() OVERRIDE;
|
| +
|
| + // SchemaRegistry::InternalObserver:
|
| + virtual void OnSchemaRegistryShuttingDown(SchemaRegistry* registry) OVERRIDE;
|
| +
|
| + private:
|
| + SchemaRegistry* wrapped_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ForwardingSchemaRegistry);
|
| +};
|
| +
|
| } // namespace policy
|
|
|
| #endif // COMPONENTS_POLICY_CORE_COMMON_SCHEMA_REGISTRY_H_
|
|
|