| // Copyright 2015 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_CHROMEOS_POLICY_AFFILIATED_INVALIDATION_SERVICE_PROVIDER_H_ |
| #define CHROME_BROWSER_CHROMEOS_POLICY_AFFILIATED_INVALIDATION_SERVICE_PROVIDER_H_ |
| |
| #include "base/macros.h" |
| |
| namespace invalidation { |
| class InvalidationService; |
| } |
| |
| namespace policy { |
| |
| // This class provides access to an |InvalidationService| that can be used to |
| // subscribe to invalidations generated by the device's enrollment domain, e.g. |
| // policy pushing and remote commands for: |
| // * the device itself |
| // * device-local accounts |
| // * other users affiliated with the enrollment domain |
| // |
| // If an affiliated user with a connected invalidation service is logged in, |
| // that invalidation service will be used to conserve server resources. If there |
| // are no logged-in users matching these criteria, a device-global |
| // |TiclInvalidationService| is spun up. |
| // The class monitors the status of the invalidation services and switches |
| // between them whenever the service currently in use disconnects or the |
| // device-global invalidation service can be replaced with another service that |
| // just connected. |
| class AffiliatedInvalidationServiceProvider { |
| public: |
| class Consumer { |
| public: |
| Consumer(); |
| |
| // This method is called when the invalidation service that the consumer |
| // should use changes: |
| // * If |invalidation_service| is a nullptr, no invalidation service is |
| // currently available for use. |
| // * Otherwise, |invalidation_service| is the invalidation service that the |
| // consumer should use. It is guaranteed to be connected. Any previously |
| // provided invalidation services must no longer be used. |
| virtual void OnInvalidationServiceSet( |
| invalidation::InvalidationService* invalidation_service) = 0; |
| |
| protected: |
| virtual ~Consumer(); |
| |
| DISALLOW_ASSIGN(Consumer); |
| }; |
| |
| AffiliatedInvalidationServiceProvider(); |
| virtual ~AffiliatedInvalidationServiceProvider(); |
| |
| // Indicates that |consumer| is interested in using the shared |
| // |InvalidationService|. The consumer's OnInvalidationServiceSet() method |
| // will be called back when a connected invalidation service becomes |
| // available. If an invalidation service is available already, the callback |
| // will occur synchronously. The |consumer| must be unregistered before |this| |
| // is destroyed. |
| virtual void RegisterConsumer(Consumer* consumer) = 0; |
| |
| // Indicates that |consumer| is no longer interested in using the |
| // shared |InvalidationService|. |
| virtual void UnregisterConsumer(Consumer* consumer) = 0; |
| |
| // Shuts down the provider. Once the provider is shut down, it no longer makes |
| // any invalidation service available to consumers, no longer observes any |
| // per-profile invalidation services and no longer maintains a device-global |
| // invalidation service. |
| virtual void Shutdown() = 0; |
| |
| private: |
| DISALLOW_ASSIGN(AffiliatedInvalidationServiceProvider); |
| }; |
| |
| } // namespace policy |
| |
| #endif // CHROME_BROWSER_CHROMEOS_POLICY_AFFILIATED_INVALIDATION_SERVICE_PROVIDER_H_ |