| Index: chrome/browser/sync/glue/sync_backend_host.cc
|
| diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
|
| index d57a931de21541f1d2c80bac20ca7ac4a710be16..b237aa04275d13945dc0415084dd221395c40471 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_host.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_host.cc
|
| @@ -2,8 +2,6 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "build/build_config.h"
|
| -
|
| #include "chrome/browser/sync/glue/sync_backend_host.h"
|
|
|
| #include <algorithm>
|
| @@ -21,17 +19,15 @@
|
| #include "base/timer.h"
|
| #include "base/tracked_objects.h"
|
| #include "build/build_config.h"
|
| -#include "chrome/browser/invalidation/invalidator_storage.h"
|
| +#include "chrome/browser/invalidation/invalidation_service.h"
|
| +#include "chrome/browser/invalidation/invalidation_service_factory.h"
|
| #include "chrome/browser/net/network_time_tracker.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/signin/token_service.h"
|
| #include "chrome/browser/signin/token_service_factory.h"
|
| -#include "chrome/browser/sync/glue/android_invalidator_bridge.h"
|
| -#include "chrome/browser/sync/glue/android_invalidator_bridge_proxy.h"
|
| #include "chrome/browser/sync/glue/change_processor.h"
|
| #include "chrome/browser/sync/glue/chrome_encryptor.h"
|
| #include "chrome/browser/sync/glue/device_info.h"
|
| -#include "chrome/browser/sync/glue/dummy_invalidator.h"
|
| #include "chrome/browser/sync/glue/sync_backend_registrar.h"
|
| #include "chrome/browser/sync/glue/synced_device_tracker.h"
|
| #include "chrome/browser/sync/sync_prefs.h"
|
| @@ -57,7 +53,6 @@
|
| #include "sync/internal_api/public/sync_manager_factory.h"
|
| #include "sync/internal_api/public/util/experiments.h"
|
| #include "sync/internal_api/public/util/sync_string_conversions.h"
|
| -#include "sync/notifier/invalidator.h"
|
| #include "sync/protocol/encryption.pb.h"
|
| #include "sync/protocol/sync.pb.h"
|
| #include "sync/util/nigori.h"
|
| @@ -107,8 +102,7 @@ struct DoConfigureSyncerTypes {
|
| class SyncBackendHost::Core
|
| : public base::RefCountedThreadSafe<SyncBackendHost::Core>,
|
| public syncer::SyncEncryptionHandler::Observer,
|
| - public syncer::SyncManager::Observer,
|
| - public syncer::InvalidationHandler {
|
| + public syncer::SyncManager::Observer {
|
| public:
|
| Core(const std::string& name,
|
| const base::FilePath& sync_data_folder_path,
|
| @@ -149,11 +143,12 @@ class SyncBackendHost::Core
|
| virtual void OnPassphraseTypeChanged(syncer::PassphraseType type,
|
| base::Time passphrase_time) OVERRIDE;
|
|
|
| - // syncer::InvalidationHandler implementation.
|
| - virtual void OnInvalidatorStateChange(
|
| - syncer::InvalidatorState state) OVERRIDE;
|
| - virtual void OnIncomingInvalidation(
|
| - const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
|
| + // Forwards an invalidation state change to the sync manager.
|
| + void DoOnInvalidatorStateChange(syncer::InvalidatorState state);
|
| +
|
| + // Forwards an invalidation to the sync manager.
|
| + void DoOnIncomingInvalidation(
|
| + syncer::ObjectIdInvalidationMap invalidation_map);
|
|
|
| // Note:
|
| //
|
| @@ -170,15 +165,6 @@ class SyncBackendHost::Core
|
| // SyncBackendHost::UpdateCredentials.
|
| void DoUpdateCredentials(const syncer::SyncCredentials& credentials);
|
|
|
| - // Called to update the given registered ids on behalf of
|
| - // SyncBackendHost::UpdateRegisteredInvalidationIds.
|
| - void DoUpdateRegisteredInvalidationIds(const syncer::ObjectIdSet& ids);
|
| -
|
| - // Called to acknowledge an invalidation on behalf of
|
| - // SyncBackendHost::AcknowledgeInvalidation.
|
| - void DoAcknowledgeInvalidation(const invalidation::ObjectId& id,
|
| - const syncer::AckHandle& ack_handle);
|
| -
|
| // Called to tell the syncapi to start syncing (generally after
|
| // initialization and authentication).
|
| void DoStartSyncing(const syncer::ModelSafeRoutingInfo& routing_info);
|
| @@ -309,69 +295,13 @@ class SyncBackendHost::Core
|
| // The top-level syncapi entry point. Lives on the sync thread.
|
| scoped_ptr<syncer::SyncManager> sync_manager_;
|
|
|
| - // Whether or not we registered with |sync_manager_| as an invalidation
|
| - // handler. Necessary since we may end up trying to unregister before we
|
| - // register in tests (in synchronous initialization mode).
|
| - //
|
| - // TODO(akalin): Fix this behavior (see http://crbug.com/140354).
|
| - bool registered_as_invalidation_handler_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(Core);
|
| };
|
|
|
| -namespace {
|
| -
|
| -// Parses the given command line for notifier options.
|
| -notifier::NotifierOptions ParseNotifierOptions(
|
| - const CommandLine& command_line,
|
| - const scoped_refptr<net::URLRequestContextGetter>&
|
| - request_context_getter) {
|
| - notifier::NotifierOptions notifier_options;
|
| - notifier_options.request_context_getter = request_context_getter;
|
| - if (!command_line.HasSwitch(switches::kSyncDisableOAuth2Token))
|
| - notifier_options.auth_mechanism = "X-OAUTH2";
|
| -
|
| - if (command_line.HasSwitch(switches::kSyncNotificationHostPort)) {
|
| - notifier_options.xmpp_host_port =
|
| - net::HostPortPair::FromString(
|
| - command_line.GetSwitchValueASCII(
|
| - switches::kSyncNotificationHostPort));
|
| - DVLOG(1) << "Using " << notifier_options.xmpp_host_port.ToString()
|
| - << " for test sync notification server.";
|
| - }
|
| -
|
| - notifier_options.try_ssltcp_first =
|
| - command_line.HasSwitch(switches::kSyncTrySsltcpFirstForXmpp);
|
| - DVLOG_IF(1, notifier_options.try_ssltcp_first)
|
| - << "Trying SSL/TCP port before XMPP port for notifications.";
|
| -
|
| - notifier_options.invalidate_xmpp_login =
|
| - command_line.HasSwitch(switches::kSyncInvalidateXmppLogin);
|
| - DVLOG_IF(1, notifier_options.invalidate_xmpp_login)
|
| - << "Invalidating sync XMPP login.";
|
| -
|
| - notifier_options.allow_insecure_connection =
|
| - command_line.HasSwitch(switches::kSyncAllowInsecureXmppConnection);
|
| - DVLOG_IF(1, notifier_options.allow_insecure_connection)
|
| - << "Allowing insecure XMPP connections.";
|
| -
|
| - if (command_line.HasSwitch(switches::kSyncNotificationMethod)) {
|
| - const std::string notification_method_str(
|
| - command_line.GetSwitchValueASCII(switches::kSyncNotificationMethod));
|
| - notifier_options.notification_method =
|
| - notifier::StringToNotificationMethod(notification_method_str);
|
| - }
|
| -
|
| - return notifier_options;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| SyncBackendHost::SyncBackendHost(
|
| const std::string& name,
|
| Profile* profile,
|
| - const base::WeakPtr<SyncPrefs>& sync_prefs,
|
| - const base::WeakPtr<invalidation::InvalidatorStorage>& invalidator_storage)
|
| + const base::WeakPtr<SyncPrefs>& sync_prefs)
|
| : weak_ptr_factory_(this),
|
| sync_thread_("Chrome_SyncThread"),
|
| frontend_loop_(base::MessageLoop::current()),
|
| @@ -381,13 +311,10 @@ SyncBackendHost::SyncBackendHost(
|
| weak_ptr_factory_.GetWeakPtr())),
|
| initialization_state_(NOT_ATTEMPTED),
|
| sync_prefs_(sync_prefs),
|
| - invalidator_factory_(
|
| - ParseNotifierOptions(*CommandLine::ForCurrentProcess(),
|
| - profile_->GetRequestContext()),
|
| - content::GetUserAgent(GURL()),
|
| - invalidator_storage),
|
| frontend_(NULL),
|
| - cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) {
|
| + cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE),
|
| + invalidator_(
|
| + invalidation::InvalidationServiceFactory::GetForProfile(profile)) {
|
| }
|
|
|
| SyncBackendHost::SyncBackendHost(Profile* profile)
|
| @@ -397,18 +324,12 @@ SyncBackendHost::SyncBackendHost(Profile* profile)
|
| profile_(profile),
|
| name_("Unknown"),
|
| initialization_state_(NOT_ATTEMPTED),
|
| - invalidator_factory_(
|
| - ParseNotifierOptions(*CommandLine::ForCurrentProcess(),
|
| - profile_->GetRequestContext()),
|
| - content::GetUserAgent(GURL()),
|
| - base::WeakPtr<syncer::InvalidationStateTracker>()),
|
| frontend_(NULL),
|
| cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) {
|
| }
|
|
|
| SyncBackendHost::~SyncBackendHost() {
|
| DCHECK(!core_.get() && !frontend_) << "Must call Shutdown before destructor.";
|
| - DCHECK(!android_invalidator_bridge_.get());
|
| DCHECK(!registrar_.get());
|
| }
|
|
|
| @@ -440,10 +361,6 @@ void SyncBackendHost::Initialize(
|
| if (!sync_thread_.Start())
|
| return;
|
|
|
| - android_invalidator_bridge_.reset(
|
| - new AndroidInvalidatorBridge(
|
| - profile_, sync_thread_.message_loop_proxy()));
|
| -
|
| frontend_ = frontend;
|
| DCHECK(frontend);
|
|
|
| @@ -466,11 +383,7 @@ void SyncBackendHost::Initialize(
|
| InternalComponentsFactoryImpl::BACKOFF_SHORT_INITIAL_RETRY_OVERRIDE;
|
| }
|
|
|
| - bool create_invalidator = true;
|
| -#if defined(ENABLE_MANAGED_USERS)
|
| - if (ManagedUserService::ProfileIsManaged(profile_))
|
| - create_invalidator = false;
|
| -#endif
|
| + invalidator_->RegisterInvalidationHandler(this);
|
|
|
| initialization_state_ = CREATING_SYNC_MANAGER;
|
| InitCore(DoInitializeOptions(
|
| @@ -485,8 +398,7 @@ void SyncBackendHost::Initialize(
|
| make_scoped_refptr(profile_->GetRequestContext()),
|
| NetworkTimeTracker::BuildNotifierUpdateCallback()),
|
| credentials,
|
| - android_invalidator_bridge_.get(),
|
| - &invalidator_factory_,
|
| + invalidator_->GetInvalidatorClientId(),
|
| sync_manager_factory,
|
| delete_sync_data_folder,
|
| sync_prefs_->GetEncryptionBootstrapToken(),
|
| @@ -494,8 +406,7 @@ void SyncBackendHost::Initialize(
|
| new InternalComponentsFactoryImpl(factory_switches),
|
| unrecoverable_error_handler,
|
| report_unrecoverable_error_function,
|
| - !cl->HasSwitch(switches::kSyncDisableOAuth2Token),
|
| - create_invalidator));
|
| + !cl->HasSwitch(switches::kSyncDisableOAuth2Token)));
|
| }
|
|
|
| void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) {
|
| @@ -505,24 +416,6 @@ void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) {
|
| credentials));
|
| }
|
|
|
| -void SyncBackendHost::UpdateRegisteredInvalidationIds(
|
| - const syncer::ObjectIdSet& ids) {
|
| - DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| - DCHECK(sync_thread_.IsRunning());
|
| - sync_thread_.message_loop()->PostTask(FROM_HERE,
|
| - base::Bind(&SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds,
|
| - core_.get(), ids));
|
| -}
|
| -
|
| -void SyncBackendHost::AcknowledgeInvalidation(
|
| - const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) {
|
| - DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| - DCHECK(sync_thread_.IsRunning());
|
| - sync_thread_.message_loop()->PostTask(FROM_HERE,
|
| - base::Bind(&SyncBackendHost::Core::DoAcknowledgeInvalidation,
|
| - core_.get(), id, ack_handle));
|
| -}
|
| -
|
| void SyncBackendHost::StartSyncingWithServer() {
|
| SDVLOG(1) << "SyncBackendHost::StartSyncingWithServer called.";
|
|
|
| @@ -666,14 +559,17 @@ void SyncBackendHost::Shutdown(bool sync_disabled) {
|
| // StopSyncingForShutdown() (which nulls out |frontend_|) should be
|
| // called first.
|
| DCHECK(!frontend_);
|
| +
|
| + if (sync_disabled)
|
| + invalidator_->UpdateRegisteredInvalidationIds(this, syncer::ObjectIdSet());
|
| + invalidator_->UnregisterInvalidationHandler(this);
|
| + invalidator_ = NULL;
|
| +
|
| // TODO(tim): DCHECK(registrar_->StoppedOnUIThread()) would be nice.
|
| if (sync_thread_.IsRunning()) {
|
| sync_thread_.message_loop()->PostTask(FROM_HERE,
|
| base::Bind(&SyncBackendHost::Core::DoShutdown, core_.get(),
|
| sync_disabled));
|
| -
|
| - if (android_invalidator_bridge_)
|
| - android_invalidator_bridge_->StopForShutdown();
|
| }
|
|
|
| // Stop will return once the thread exits, which will be after DoShutdown
|
| @@ -699,7 +595,6 @@ void SyncBackendHost::Shutdown(bool sync_disabled) {
|
|
|
| registrar_.reset();
|
| js_backend_.Reset();
|
| - android_invalidator_bridge_.reset();
|
| core_ = NULL; // Releases reference to core_.
|
| }
|
|
|
| @@ -910,13 +805,18 @@ void SyncBackendHost::RequestConfigureSyncer(
|
| }
|
|
|
| void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop(
|
| + const syncer::ModelTypeSet enabled_types,
|
| const syncer::ModelTypeSet succeeded_configuration_types,
|
| const syncer::ModelTypeSet failed_configuration_types,
|
| const base::Callback<void(syncer::ModelTypeSet,
|
| syncer::ModelTypeSet)>& ready_task) {
|
| if (!frontend_)
|
| return;
|
| - DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| +
|
| + invalidator_->UpdateRegisteredInvalidationIds(
|
| + this,
|
| + ModelTypeSetToObjectIdSet(enabled_types));
|
| +
|
| if (!ready_task.is_null())
|
| ready_task.Run(succeeded_configuration_types, failed_configuration_types);
|
| }
|
| @@ -947,6 +847,10 @@ void SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop(
|
| syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE :
|
| syncer::CONFIGURE_REASON_NEW_CLIENT);
|
|
|
| + // Fake a state change to initialize the SyncManager's cached invalidator
|
| + // state.
|
| + OnInvalidatorStateChange(invalidator_->GetInvalidatorState());
|
| +
|
| // Kick off the next step in SyncBackendHost initialization by downloading
|
| // any necessary control types.
|
| sync_thread_.message_loop()->PostTask(
|
| @@ -983,8 +887,7 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| const GURL& service_url,
|
| MakeHttpBridgeFactoryFn make_http_bridge_factory_fn,
|
| const syncer::SyncCredentials& credentials,
|
| - AndroidInvalidatorBridge* android_invalidator_bridge,
|
| - syncer::InvalidatorFactory* invalidator_factory,
|
| + const std::string& invalidator_client_id,
|
| syncer::SyncManagerFactory* sync_manager_factory,
|
| bool delete_sync_data_folder,
|
| const std::string& restored_key_for_bootstrapping,
|
| @@ -993,8 +896,7 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| syncer::UnrecoverableErrorHandler* unrecoverable_error_handler,
|
| syncer::ReportUnrecoverableErrorFunction
|
| report_unrecoverable_error_function,
|
| - bool use_oauth2_token,
|
| - bool create_invalidator)
|
| + bool use_oauth2_token)
|
| : sync_loop(sync_loop),
|
| registrar(registrar),
|
| routing_info(routing_info),
|
| @@ -1004,8 +906,7 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| service_url(service_url),
|
| make_http_bridge_factory_fn(make_http_bridge_factory_fn),
|
| credentials(credentials),
|
| - android_invalidator_bridge(android_invalidator_bridge),
|
| - invalidator_factory(invalidator_factory),
|
| + invalidator_client_id(invalidator_client_id),
|
| sync_manager_factory(sync_manager_factory),
|
| delete_sync_data_folder(delete_sync_data_folder),
|
| restored_key_for_bootstrapping(restored_key_for_bootstrapping),
|
| @@ -1015,8 +916,7 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| unrecoverable_error_handler(unrecoverable_error_handler),
|
| report_unrecoverable_error_function(
|
| report_unrecoverable_error_function),
|
| - use_oauth2_token(use_oauth2_token),
|
| - create_invalidator(create_invalidator) {
|
| + use_oauth2_token(use_oauth2_token) {
|
| }
|
|
|
| SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {}
|
| @@ -1028,8 +928,7 @@ SyncBackendHost::Core::Core(const std::string& name,
|
| sync_data_folder_path_(sync_data_folder_path),
|
| host_(backend),
|
| sync_loop_(NULL),
|
| - registrar_(NULL),
|
| - registered_as_invalidation_handler_(false) {
|
| + registrar_(NULL) {
|
| DCHECK(backend.get());
|
| }
|
|
|
| @@ -1228,24 +1127,16 @@ void SyncBackendHost::Core::OnActionableError(
|
| sync_error);
|
| }
|
|
|
| -void SyncBackendHost::Core::OnInvalidatorStateChange(
|
| +void SyncBackendHost::Core::DoOnInvalidatorStateChange(
|
| syncer::InvalidatorState state) {
|
| - if (!sync_loop_)
|
| - return;
|
| DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| - host_.Call(FROM_HERE,
|
| - &SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop,
|
| - state);
|
| + sync_manager_->OnInvalidatorStateChange(state);
|
| }
|
|
|
| -void SyncBackendHost::Core::OnIncomingInvalidation(
|
| - const syncer::ObjectIdInvalidationMap& invalidation_map) {
|
| - if (!sync_loop_)
|
| - return;
|
| +void SyncBackendHost::Core::DoOnIncomingInvalidation(
|
| + syncer::ObjectIdInvalidationMap invalidation_map) {
|
| DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| - host_.Call(FROM_HERE,
|
| - &SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop,
|
| - invalidation_map);
|
| + sync_manager_->OnIncomingInvalidation(invalidation_map);
|
| }
|
|
|
| void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
|
| @@ -1271,17 +1162,6 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
|
|
|
| sync_manager_ = options.sync_manager_factory->CreateSyncManager(name_);
|
| sync_manager_->AddObserver(this);
|
| - scoped_ptr<syncer::Invalidator> invalidator;
|
| - if (options.create_invalidator) {
|
| -#if defined(OS_ANDROID)
|
| - invalidator.reset(
|
| - new AndroidInvalidatorBridgeProxy(options.android_invalidator_bridge));
|
| -#else
|
| - invalidator.reset(options.invalidator_factory->CreateInvalidator());
|
| -#endif
|
| - } else {
|
| - invalidator.reset(new DummyInvalidator());
|
| - }
|
| sync_manager_->Init(sync_data_folder_path_,
|
| options.event_handler,
|
| options.service_url.host() + options.service_url.path(),
|
| @@ -1292,8 +1172,7 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
|
| options.extensions_activity_monitor,
|
| options.registrar /* as SyncManager::ChangeDelegate */,
|
| options.credentials,
|
| - invalidator.Pass(),
|
| - options.invalidator_factory->GetInvalidatorClientId(),
|
| + options.invalidator_client_id,
|
| options.restored_key_for_bootstrapping,
|
| options.restored_keystore_key_for_bootstrapping,
|
| scoped_ptr<InternalComponentsFactory>(
|
| @@ -1308,9 +1187,6 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
|
| //
|
| // TODO(akalin): Fix this behavior (see http://crbug.com/140354).
|
| if (sync_manager_) {
|
| - sync_manager_->RegisterInvalidationHandler(this);
|
| - registered_as_invalidation_handler_ = true;
|
| -
|
| // Now check the command line to see if we need to simulate an
|
| // unrecoverable error for testing purpose. Note the error is thrown
|
| // only if the initialization succeeded. Also it makes sense to use this
|
| @@ -1336,31 +1212,6 @@ void SyncBackendHost::Core::DoUpdateCredentials(
|
| }
|
| }
|
|
|
| -void SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds(
|
| - const syncer::ObjectIdSet& ids) {
|
| - DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| - // |sync_manager_| may end up being NULL here in tests (in
|
| - // synchronous initialization mode) since this is called during
|
| - // shutdown.
|
| - //
|
| - // TODO(akalin): Fix this behavior (see http://crbug.com/140354).
|
| - if (sync_manager_) {
|
| - sync_manager_->UpdateRegisteredInvalidationIds(this, ids);
|
| - }
|
| -}
|
| -
|
| -void SyncBackendHost::Core::DoAcknowledgeInvalidation(
|
| - const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) {
|
| - DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| - // |sync_manager_| may end up being NULL here in tests (in
|
| - // synchronous initialization mode).
|
| - //
|
| - // TODO(akalin): Fix this behavior (see http://crbug.com/140354).
|
| - if (sync_manager_) {
|
| - sync_manager_->AcknowledgeInvalidation(id, ack_handle);
|
| - }
|
| -}
|
| -
|
| void SyncBackendHost::Core::DoStartSyncing(
|
| const syncer::ModelSafeRoutingInfo& routing_info) {
|
| DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| @@ -1470,10 +1321,6 @@ void SyncBackendHost::Core::DoDestroySyncManager() {
|
| DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| if (sync_manager_) {
|
| save_changes_timer_.reset();
|
| - if (registered_as_invalidation_handler_) {
|
| - sync_manager_->UnregisterInvalidationHandler(this);
|
| - registered_as_invalidation_handler_ = false;
|
| - }
|
| sync_manager_->RemoveObserver(this);
|
| sync_manager_->ShutdownOnSyncThread();
|
| sync_manager_.reset();
|
| @@ -1515,7 +1362,6 @@ void SyncBackendHost::Core::DoFinishConfigureDataTypes(
|
| registrar_->GetModelSafeRoutingInfo(&routing_info);
|
| syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info);
|
| enabled_types.RemoveAll(syncer::ProxyTypes());
|
| - sync_manager_->UpdateEnabledTypes(enabled_types);
|
|
|
| const syncer::ModelTypeSet failed_configuration_types =
|
| Difference(types_to_config, sync_manager_->InitialSyncEndedTypes());
|
| @@ -1523,7 +1369,9 @@ void SyncBackendHost::Core::DoFinishConfigureDataTypes(
|
| Difference(types_to_config, failed_configuration_types);
|
| host_.Call(FROM_HERE,
|
| &SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop,
|
| - succeeded_configuration_types, failed_configuration_types,
|
| + enabled_types,
|
| + succeeded_configuration_types,
|
| + failed_configuration_types,
|
| ready_task);
|
| }
|
|
|
| @@ -1653,20 +1501,30 @@ void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop(
|
| frontend_->OnActionableError(sync_error);
|
| }
|
|
|
| -void SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop(
|
| - syncer::InvalidatorState state) {
|
| - if (!frontend_)
|
| - return;
|
| - DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| - frontend_->OnInvalidatorStateChange(state);
|
| +void SyncBackendHost::OnInvalidatorStateChange(syncer::InvalidatorState state) {
|
| + sync_thread_.message_loop()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&SyncBackendHost::Core::DoOnInvalidatorStateChange,
|
| + core_.get(),
|
| + state));
|
| }
|
|
|
| -void SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop(
|
| +void SyncBackendHost::OnIncomingInvalidation(
|
| const syncer::ObjectIdInvalidationMap& invalidation_map) {
|
| - if (!frontend_)
|
| - return;
|
| - DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| - frontend_->OnIncomingInvalidation(invalidation_map);
|
| + // TODO(dcheng): Acknowledge immediately for now. Fix this once the
|
| + // invalidator doesn't repeatedly ping for unacknowledged invaliations, since
|
| + // it conflicts with the sync scheduler's internal backoff algorithm.
|
| + // See http://crbug.com/124149 for more information.
|
| + for (syncer::ObjectIdInvalidationMap::const_iterator it =
|
| + invalidation_map.begin(); it != invalidation_map.end(); ++it) {
|
| + invalidator_->AcknowledgeInvalidation(it->first, it->second.ack_handle);
|
| + }
|
| +
|
| + sync_thread_.message_loop()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&SyncBackendHost::Core::DoOnIncomingInvalidation,
|
| + core_.get(),
|
| + invalidation_map));
|
| }
|
|
|
| bool SyncBackendHost::CheckPassphraseAgainstCachedPendingKeys(
|
|
|