Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1837)

Unified Diff: chrome/browser/policy/cloud/cloud_policy_invalidator.cc

Issue 23592017: Fix policy invalidator lifecycle bugs for Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698