| Index: chrome/browser/policy/cloud/cloud_policy_invalidator.cc
|
| diff --git a/chrome/browser/policy/cloud/cloud_policy_invalidator.cc b/chrome/browser/policy/cloud/cloud_policy_invalidator.cc
|
| index 5012fe7a3998a386029a0b6b5f9782b03f6b487d..54c7ab0df30ca40662c04de3e357fbd5aad1dad3 100644
|
| --- a/chrome/browser/policy/cloud/cloud_policy_invalidator.cc
|
| +++ b/chrome/browser/policy/cloud/cloud_policy_invalidator.cc
|
| @@ -14,7 +14,6 @@
|
| #include "base/time/time.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/invalidation/invalidation_service.h"
|
| -#include "chrome/browser/invalidation/invalidation_service_factory.h"
|
| #include "chrome/browser/policy/cloud/enterprise_metrics.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "policy/policy_constants.h"
|
| @@ -28,13 +27,15 @@ const int CloudPolicyInvalidator::kMaxFetchDelayMin = 1000;
|
| const int CloudPolicyInvalidator::kMaxFetchDelayMax = 300000;
|
|
|
| CloudPolicyInvalidator::CloudPolicyInvalidator(
|
| + const GetInvalidationService& get_invalidation_service,
|
| CloudPolicyInvalidationHandler* invalidation_handler,
|
| CloudPolicyStore* store,
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner)
|
| - : invalidation_handler_(invalidation_handler),
|
| + : state_(STOPPED),
|
| + get_invalidation_service_(get_invalidation_service),
|
| + invalidation_handler_(invalidation_handler),
|
| store_(store),
|
| task_runner_(task_runner),
|
| - profile_(NULL),
|
| invalidation_service_(NULL),
|
| invalidations_enabled_(false),
|
| invalidation_service_enabled_(false),
|
| @@ -48,36 +49,39 @@ CloudPolicyInvalidator::CloudPolicyInvalidator(
|
| DCHECK(invalidation_handler);
|
| DCHECK(store);
|
| DCHECK(task_runner.get());
|
| - DCHECK(!IsInitialized());
|
| }
|
|
|
| -CloudPolicyInvalidator::~CloudPolicyInvalidator() {}
|
| +CloudPolicyInvalidator::~CloudPolicyInvalidator() {
|
| + DCHECK(state_ == SHUT_DOWN);
|
| +}
|
|
|
| -void CloudPolicyInvalidator::InitializeWithProfile(Profile* profile) {
|
| - DCHECK(!IsInitialized());
|
| - DCHECK(profile);
|
| - profile_ = profile;
|
| - Initialize();
|
| +void CloudPolicyInvalidator::Start() {
|
| + DCHECK(state_ == STOPPED);
|
| + state_ = STARTED;
|
| + OnStoreLoaded(store_);
|
| + store_->AddObserver(this);
|
| }
|
|
|
| -void CloudPolicyInvalidator::InitializeWithService(
|
| - invalidation::InvalidationService* invalidation_service) {
|
| - DCHECK(!IsInitialized());
|
| - DCHECK(invalidation_service);
|
| - invalidation_service_ = invalidation_service;
|
| - Initialize();
|
| +void CloudPolicyInvalidator::Stop() {
|
| + DCHECK(state_ == STARTED);
|
| + Unregister();
|
| + store_->RemoveObserver(this);
|
| + state_ = STOPPED;
|
| }
|
|
|
| void CloudPolicyInvalidator::Shutdown() {
|
| - if (IsInitialized()) {
|
| + if (state_ == STARTED) {
|
| if (registered_timestamp_)
|
| invalidation_service_->UnregisterInvalidationHandler(this);
|
| store_->RemoveObserver(this);
|
| }
|
| + weak_factory_.InvalidateWeakPtrs();
|
| + state_ = SHUT_DOWN;
|
| }
|
|
|
| void CloudPolicyInvalidator::OnInvalidatorStateChange(
|
| syncer::InvalidatorState state) {
|
| + DCHECK(state_ == STARTED);
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| invalidation_service_enabled_ = state == syncer::INVALIDATIONS_ENABLED;
|
| UpdateInvalidationsEnabled();
|
| @@ -85,6 +89,7 @@ void CloudPolicyInvalidator::OnInvalidatorStateChange(
|
|
|
| void CloudPolicyInvalidator::OnIncomingInvalidation(
|
| const syncer::ObjectIdInvalidationMap& invalidation_map) {
|
| + DCHECK(state_ == STARTED);
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| const syncer::ObjectIdInvalidationMap::const_iterator invalidation =
|
| invalidation_map.find(object_id_);
|
| @@ -96,7 +101,7 @@ void CloudPolicyInvalidator::OnIncomingInvalidation(
|
| }
|
|
|
| void CloudPolicyInvalidator::OnStoreLoaded(CloudPolicyStore* store) {
|
| - DCHECK(IsInitialized());
|
| + DCHECK(state_ == STARTED);
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| if (registered_timestamp_) {
|
| // Update the kMetricPolicyRefresh histogram. In some cases, this object can
|
| @@ -124,21 +129,6 @@ void CloudPolicyInvalidator::OnStoreLoaded(CloudPolicyStore* store) {
|
|
|
| void CloudPolicyInvalidator::OnStoreError(CloudPolicyStore* store) {}
|
|
|
| -base::WeakPtr<CloudPolicyInvalidator> CloudPolicyInvalidator::GetWeakPtr() {
|
| - DCHECK(!IsInitialized());
|
| - return weak_factory_.GetWeakPtr();
|
| -}
|
| -
|
| -void CloudPolicyInvalidator::Initialize() {
|
| - OnStoreLoaded(store_);
|
| - store_->AddObserver(this);
|
| -}
|
| -
|
| -bool CloudPolicyInvalidator::IsInitialized() {
|
| - // Could have been initialized with a profile or invalidation service.
|
| - return profile_ || invalidation_service_;
|
| -}
|
| -
|
| void CloudPolicyInvalidator::HandleInvalidation(
|
| const syncer::Invalidation& invalidation) {
|
| // The invalidation service may send an invalidation more than once if there
|
| @@ -217,11 +207,9 @@ void CloudPolicyInvalidator::UpdateRegistration(
|
| void CloudPolicyInvalidator::Register(
|
| int64 timestamp,
|
| const invalidation::ObjectId& object_id) {
|
| - // Get the invalidation service from the profile if needed.
|
| + // Get the invalidation service if needed.
|
| if (!invalidation_service_) {
|
| - DCHECK(profile_);
|
| - invalidation_service_ =
|
| - invalidation::InvalidationServiceFactory::GetForProfile(profile_);
|
| + invalidation_service_ = get_invalidation_service_.Run();
|
| if (!invalidation_service_)
|
| return;
|
| }
|
|
|