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; |
} |