| Index: chrome/browser/policy/cloud/cloud_policy_invalidator.h
|
| diff --git a/chrome/browser/policy/cloud/cloud_policy_invalidator.h b/chrome/browser/policy/cloud/cloud_policy_invalidator.h
|
| index 2575d1be371d67a6b97a3248e6e7dcc59eec0960..6ce9aa9c71f5dcd529f53a7703569725f2456b94 100644
|
| --- a/chrome/browser/policy/cloud/cloud_policy_invalidator.h
|
| +++ b/chrome/browser/policy/cloud/cloud_policy_invalidator.h
|
| @@ -12,11 +12,10 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/threading/thread_checker.h"
|
| +#include "chrome/browser/policy/cloud/cloud_policy_core.h"
|
| #include "chrome/browser/policy/cloud/cloud_policy_store.h"
|
| #include "sync/notifier/invalidation_handler.h"
|
|
|
| -class Profile;
|
| -
|
| namespace base {
|
| class SequencedTaskRunner;
|
| }
|
| @@ -27,10 +26,9 @@ class InvalidationService;
|
|
|
| namespace policy {
|
|
|
| -class CloudPolicyInvalidationHandler;
|
| -
|
| // Listens for and provides policy invalidations.
|
| class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| + public CloudPolicyCore::Observer,
|
| public CloudPolicyStore::Observer {
|
| public:
|
| // The number of minutes to delay a policy refresh after receiving an
|
| @@ -42,29 +40,20 @@ class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| static const int kMaxFetchDelayMin;
|
| static const int kMaxFetchDelayMax;
|
|
|
| - // |invalidation_handler| handles invalidations provided by this object and
|
| - // must remain valid until Shutdown is called.
|
| - // |store| is cloud policy store. It must remain valid until Shutdown is
|
| - // called.
|
| + // |core| is the cloud policy core which connects the various policy objects.
|
| + // It must remain valid until Shutdown is called.
|
| // |task_runner| is used for scheduling delayed tasks. It must post tasks to
|
| // the main policy thread.
|
| CloudPolicyInvalidator(
|
| - CloudPolicyInvalidationHandler* invalidation_handler,
|
| - CloudPolicyStore* store,
|
| + CloudPolicyCore* core,
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner);
|
| virtual ~CloudPolicyInvalidator();
|
|
|
| - // Initializes the invalidator with the given profile. The invalidator uses
|
| - // the profile to get a reference to the profile's invalidation service if
|
| - // needed. Both the profile and the invalidation service must remain valid
|
| - // until Shutdown is called. An Initialize method must only be called once.
|
| - void InitializeWithProfile(Profile* profile);
|
| -
|
| - // Initializes the invalidator with the invalidation service. It must remain
|
| - // valid until Shutdown is called. An Initialize method must only be called
|
| - // once.
|
| - void InitializeWithService(
|
| - invalidation::InvalidationService* invalidation_service);
|
| + // Initializes the invalidator. No invalidations will be generated before this
|
| + // method is called. This method must only be called once.
|
| + // |invalidation_service| is the invalidation service to use and must remain
|
| + // valid until Shutdown is called.
|
| + void Initialize(invalidation::InvalidationService* invalidation_service);
|
|
|
| // Shuts down and disables invalidations. It must be called before the object
|
| // is destroyed.
|
| @@ -81,23 +70,22 @@ class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| virtual void OnIncomingInvalidation(
|
| const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
|
|
|
| + // CloudPolicyCore::Observer:
|
| + virtual void OnCoreConnected(CloudPolicyCore* core) OVERRIDE;
|
| + virtual void OnRefreshSchedulerStarted(CloudPolicyCore* core) OVERRIDE;
|
| + virtual void OnCoreDisconnecting(CloudPolicyCore* core) OVERRIDE;
|
| +
|
| // CloudPolicyStore::Observer:
|
| virtual void OnStoreLoaded(CloudPolicyStore* store) OVERRIDE;
|
| virtual void OnStoreError(CloudPolicyStore* store) OVERRIDE;
|
|
|
| - protected:
|
| - // Allows subclasses to create a weak pointer to the object. The pointer
|
| - // should only be used to call one of the Initialize methods, as after the
|
| - // object is initialized weak pointers may be invalidated at any time.
|
| - base::WeakPtr<CloudPolicyInvalidator> GetWeakPtr();
|
| + // Expose the number of times the invalidator has refreshed the policy. For
|
| + // testing only.
|
| + int policy_refresh_count() {
|
| + return policy_refresh_count_;
|
| + }
|
|
|
| private:
|
| - // Initialize the invalidator.
|
| - void Initialize();
|
| -
|
| - // Returns whether an Initialize method has been called.
|
| - bool IsInitialized();
|
| -
|
| // Handle an invalidation to the policy.
|
| void HandleInvalidation(const syncer::Invalidation& invalidation);
|
|
|
| @@ -119,10 +107,10 @@ class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| // value changed.
|
| void UpdateInvalidationsEnabled();
|
|
|
| - // Run the invalidate callback on the invalidation handler. is_missing_payload
|
| - // is set to true if the callback is being invoked in response to an
|
| - // invalidation with a missing payload.
|
| - void RunInvalidateCallback(bool is_missing_payload);
|
| + // Refresh the policy.
|
| + // |is_missing_payload| is set to true if the callback is being invoked in
|
| + // response to an invalidation with a missing payload.
|
| + void RefreshPolicy(bool is_missing_payload);
|
|
|
| // Acknowledge the latest invalidation.
|
| void AcknowledgeInvalidation();
|
| @@ -131,19 +119,21 @@ class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| // when a policy is stored.
|
| int GetPolicyRefreshMetric();
|
|
|
| - // The handler for invalidations provded by this object.
|
| - CloudPolicyInvalidationHandler* invalidation_handler_;
|
| + // The state of the object.
|
| + enum State {
|
| + UNINITIALIZED,
|
| + STOPPED,
|
| + STARTED,
|
| + SHUT_DOWN
|
| + };
|
| + State state_;
|
|
|
| - // The cloud policy store.
|
| - CloudPolicyStore* store_;
|
| + // The cloud policy core.
|
| + CloudPolicyCore* core_;
|
|
|
| // Schedules delayed tasks.
|
| const scoped_refptr<base::SequencedTaskRunner> task_runner_;
|
|
|
| - // The profile which will be used to get a reference to an invalidation
|
| - // service.
|
| - Profile* profile_;
|
| -
|
| // The invalidation service.
|
| invalidation::InvalidationService* invalidation_service_;
|
|
|
| @@ -191,29 +181,10 @@ class CloudPolicyInvalidator : public syncer::InvalidationHandler,
|
| // thread.
|
| base::ThreadChecker thread_checker_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(CloudPolicyInvalidator);
|
| -};
|
| + // Policy refresh counter used for testing.
|
| + int policy_refresh_count_;
|
|
|
| -// Handles invalidations to cloud policy objects.
|
| -class CloudPolicyInvalidationHandler {
|
| - public:
|
| - virtual ~CloudPolicyInvalidationHandler() {}
|
| -
|
| - // This method is called when the current invalidation info should be set
|
| - // on the cloud policy client.
|
| - virtual void SetInvalidationInfo(
|
| - int64 version,
|
| - const std::string& payload) = 0;
|
| -
|
| - // This method is called when the policy should be refreshed due to an
|
| - // invalidation. A policy fetch should be scheduled in the near future.
|
| - virtual void InvalidatePolicy() = 0;
|
| -
|
| - // This method is called when the invalidator determines that the ability to
|
| - // receive policy invalidations becomes enabled or disabled. The invalidator
|
| - // starts in a disabled state, so the first call to this method is always when
|
| - // the invalidator becomes enabled.
|
| - virtual void OnInvalidatorStateChanged(bool invalidations_enabled) = 0;
|
| + DISALLOW_COPY_AND_ASSIGN(CloudPolicyInvalidator);
|
| };
|
|
|
| } // namespace policy
|
|
|