| Index: chrome/browser/invalidation/ticl_invalidation_service.cc
|
| diff --git a/chrome/browser/invalidation/ticl_invalidation_service.cc b/chrome/browser/invalidation/ticl_invalidation_service.cc
|
| index 536d9657a9b3d510dc7a7740824cb208c45ac230..52453699f11a7901a46cc5ecde769e7c1f1305dd 100644
|
| --- a/chrome/browser/invalidation/ticl_invalidation_service.cc
|
| +++ b/chrome/browser/invalidation/ticl_invalidation_service.cc
|
| @@ -19,6 +19,7 @@
|
| #include "chrome/common/pref_names.h"
|
| #include "components/signin/core/browser/profile_oauth2_token_service.h"
|
| #include "google_apis/gaia/gaia_constants.h"
|
| +#include "net/url_request/url_request_context_getter.h"
|
| #include "sync/notifier/gcm_network_channel_delegate.h"
|
| #include "sync/notifier/invalidation_util.h"
|
| #include "sync/notifier/invalidator.h"
|
| @@ -62,13 +63,17 @@ namespace invalidation {
|
|
|
| TiclInvalidationService::TiclInvalidationService(
|
| scoped_ptr<InvalidationAuthProvider> auth_provider,
|
| + const scoped_refptr<net::URLRequestContextGetter>& request_context,
|
| + scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker,
|
| Profile* profile)
|
| : OAuth2TokenService::Consumer("ticl_invalidation"),
|
| profile_(profile),
|
| auth_provider_(auth_provider.Pass()),
|
| invalidator_registrar_(new syncer::InvalidatorRegistrar()),
|
| + invalidation_state_tracker_(invalidation_state_tracker.Pass()),
|
| request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy),
|
| network_channel_type_(PUSH_CLIENT_CHANNEL),
|
| + request_context_(request_context),
|
| logger_() {}
|
|
|
| TiclInvalidationService::~TiclInvalidationService() {
|
| @@ -78,11 +83,9 @@ TiclInvalidationService::~TiclInvalidationService() {
|
| void TiclInvalidationService::Init() {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - invalidator_storage_.reset(new InvalidatorStorage(profile_->GetPrefs()));
|
| - if (invalidator_storage_->GetInvalidatorClientId().empty()) {
|
| - // This also clears any existing state. We can't reuse old invalidator
|
| - // state with the new ID anyway.
|
| - invalidator_storage_->SetInvalidatorClientId(GenerateInvalidatorClientId());
|
| + if (invalidation_state_tracker_->GetInvalidatorClientId().empty()) {
|
| + invalidation_state_tracker_->ClearAndSetNewClientId(
|
| + GenerateInvalidatorClientId());
|
| }
|
|
|
| pref_change_registrar_.Init(profile_->GetPrefs());
|
| @@ -169,7 +172,7 @@ syncer::InvalidatorState TiclInvalidationService::GetInvalidatorState() const {
|
|
|
| std::string TiclInvalidationService::GetInvalidatorClientId() const {
|
| DCHECK(CalledOnValidThread());
|
| - return invalidator_storage_->GetInvalidatorClientId();
|
| + return invalidation_state_tracker_->GetInvalidatorClientId();
|
| }
|
|
|
| InvalidationLogger* TiclInvalidationService::GetInvalidationLogger() {
|
| @@ -280,11 +283,11 @@ void TiclInvalidationService::OnInvalidationAuthLogout() {
|
| StopInvalidator();
|
| }
|
|
|
| - // This service always expects to have a valid invalidator storage.
|
| - // So we must not only clear the old one, but also start a new one.
|
| - invalidator_storage_->Clear();
|
| - invalidator_storage_.reset(new InvalidatorStorage(profile_->GetPrefs()));
|
| - invalidator_storage_->SetInvalidatorClientId(GenerateInvalidatorClientId());
|
| + // This service always expects to have a valid invalidation state. Thus, we
|
| + // must generate a new client ID to replace the existing one. Setting a new
|
| + // client ID also clears all other state.
|
| + invalidation_state_tracker_->
|
| + ClearAndSetNewClientId(GenerateInvalidatorClientId());
|
| }
|
|
|
| void TiclInvalidationService::OnInvalidatorStateChange(
|
| @@ -325,7 +328,7 @@ void TiclInvalidationService::Shutdown() {
|
| if (IsStarted()) {
|
| StopInvalidator();
|
| }
|
| - invalidator_storage_.reset();
|
| + invalidation_state_tracker_.reset();
|
| invalidator_registrar_.reset();
|
| }
|
|
|
| @@ -365,8 +368,8 @@ void TiclInvalidationService::StartInvalidator(
|
| InvalidationNetworkChannel network_channel) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(!invalidator_);
|
| - DCHECK(invalidator_storage_);
|
| - DCHECK(!invalidator_storage_->GetInvalidatorClientId().empty());
|
| + DCHECK(invalidation_state_tracker_);
|
| + DCHECK(!invalidation_state_tracker_->GetInvalidatorClientId().empty());
|
|
|
| // Request access token for PushClientChannel. GCMNetworkChannel will request
|
| // access token before sending message to server.
|
| @@ -384,7 +387,7 @@ void TiclInvalidationService::StartInvalidator(
|
| case PUSH_CLIENT_CHANNEL: {
|
| notifier::NotifierOptions options =
|
| ParseNotifierOptions(*CommandLine::ForCurrentProcess());
|
| - options.request_context_getter = profile_->GetRequestContext();
|
| + options.request_context_getter = request_context_;
|
| options.auth_mechanism = "X-OAUTH2";
|
| network_channel_options_.SetString("Options.HostPort",
|
| options.xmpp_host_port.ToString());
|
| @@ -402,7 +405,7 @@ void TiclInvalidationService::StartInvalidator(
|
| new GCMInvalidationBridge(gcm_profile_service, auth_provider_.get()));
|
| network_channel_creator =
|
| syncer::NonBlockingInvalidator::MakeGCMNetworkChannelCreator(
|
| - profile_->GetRequestContext(),
|
| + request_context_,
|
| gcm_invalidation_bridge_->CreateDelegate().Pass());
|
| break;
|
| }
|
| @@ -413,13 +416,12 @@ void TiclInvalidationService::StartInvalidator(
|
| }
|
| invalidator_.reset(new syncer::NonBlockingInvalidator(
|
| network_channel_creator,
|
| - invalidator_storage_->GetInvalidatorClientId(),
|
| - invalidator_storage_->GetSavedInvalidations(),
|
| - invalidator_storage_->GetBootstrapData(),
|
| - syncer::WeakHandle<syncer::InvalidationStateTracker>(
|
| - invalidator_storage_->AsWeakPtr()),
|
| + invalidation_state_tracker_->GetInvalidatorClientId(),
|
| + invalidation_state_tracker_->GetSavedInvalidations(),
|
| + invalidation_state_tracker_->GetBootstrapData(),
|
| + invalidation_state_tracker_.get(),
|
| GetUserAgent(),
|
| - profile_->GetRequestContext()));
|
| + request_context_));
|
|
|
| UpdateInvalidatorCredentials();
|
|
|
|
|