Index: chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h |
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h |
index f447b1921190c95b8bef8792c691ec6d625d7939..e767514bc37104d54b6e8ccd6dcdd8155c3e41ff 100644 |
--- a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h |
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h |
@@ -6,61 +6,38 @@ |
#define CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_INVALIDATOR_H_ |
#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/memory/scoped_vector.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
+#include "chrome/browser/chromeos/policy/affiliated_invalidation_service_provider.h" |
namespace invalidation { |
class InvalidationService; |
-class TiclInvalidationService; |
} |
namespace policy { |
class CloudPolicyInvalidator; |
-// This class provides invalidations for device policy via a |
-// |CloudPolicyInvalidator| backed by an |InvalidationService|. If an affiliated |
-// user with a connected invalidation service is logged in, that service is 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 DeviceCloudPolicyInvalidator : public content::NotificationObserver { |
+// This class manages the lifetime of a device-global |CloudPolicyInvalidator| |
+// that handles device policy invalidations. It relies on an |
+// |AffiliatedInvalidationServiceProvider| to provide it with access to a shared |
+// |InvalidationService| to back the |CloudPolicyInvalidator|. Whenever the |
+// shared |InvalidationService| changes, the |CloudPolicyInvalidator| destroyed |
+// and re-created. |
+class DeviceCloudPolicyInvalidator |
+ : public AffiliatedInvalidationServiceProvider::Consumer { |
public: |
- DeviceCloudPolicyInvalidator(); |
+ explicit DeviceCloudPolicyInvalidator( |
+ AffiliatedInvalidationServiceProvider* invalidation_service_provider); |
~DeviceCloudPolicyInvalidator() override; |
- // content::NotificationObserver: |
- void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) override; |
+ // AffiliatedInvalidationServiceProvider::Consumer: |
+ void OnInvalidationServiceSet( |
+ invalidation::InvalidationService* invalidation_service) override; |
- private: |
- friend class DeviceCloudPolicyInvalidatorTest; |
- |
- // Helper that monitors the status of a single |InvalidationService|. |
- class InvalidationServiceObserver; |
- |
- // Status updates received from |InvalidationServiceObserver|s. |
- void OnInvalidationServiceConnected( |
- invalidation::InvalidationService* invalidation_service); |
- void OnInvalidationServiceDisconnected( |
- invalidation::InvalidationService* invalidation_service); |
- |
- // Attempt to create a |CloudPolicyInvalidator| backed by a connected |
- // invalidation service. If no connected invalidation service is available for |
- // use, a |CloudPolicyInvalidator| will be created later when a connected |
- // service becomes available. |
- // Further ensures that a device-global invalidation service is running iff |
- // there is no other connected service available for use. |
- void TryToCreateInvalidator(); |
+ CloudPolicyInvalidator* GetInvalidatorForTest() const; |
+ private: |
// Create a |CloudPolicyInvalidator| backed by the |invalidation_service|. |
void CreateInvalidator( |
invalidation::InvalidationService* invalidation_service); |
@@ -68,30 +45,12 @@ class DeviceCloudPolicyInvalidator : public content::NotificationObserver { |
// Destroy the current |CloudPolicyInvalidator|, if any. |
void DestroyInvalidator(); |
- // Destroy the device-global invalidation service, if any. |
- void DestroyDeviceInvalidationService(); |
- |
- content::NotificationRegistrar registrar_; |
- |
- // Device-global invalidation service. |
- scoped_ptr<invalidation::TiclInvalidationService> |
- device_invalidation_service_; |
- |
- // State observer for the device-global invalidation service. |
- scoped_ptr<InvalidationServiceObserver> device_invalidation_service_observer_; |
- |
- // State observers for logged-in users' invalidation services. |
- ScopedVector<InvalidationServiceObserver> |
- profile_invalidation_service_observers_; |
- |
- // The invalidation service backing the current |CloudPolicyInvalidator|. NULL |
- // if no |CloudPolicyInvalidator| exists. |
- invalidation::InvalidationService* invalidation_service_; |
+ AffiliatedInvalidationServiceProvider* invalidation_service_provider_; |
// The highest invalidation version that was handled already. |
int64 highest_handled_invalidation_version_; |
- // The current |CloudPolicyInvalidator|. NULL if no connected invalidation |
+ // The current |CloudPolicyInvalidator|. nullptr if no connected invalidation |
// service is available. |
scoped_ptr<CloudPolicyInvalidator> invalidator_; |