| 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 2f91728d69096ca2a55838b0e751a67550093421..3816312447d4f0ca82bc0d0907f96c4c14329b82 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_host.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_host.cc
|
| @@ -198,11 +198,10 @@ class SyncBackendHost::Core
|
| void DoFinishInitialProcessControlTypes();
|
|
|
| // The shutdown order is a bit complicated:
|
| - // 1) Call DoStopSyncManagerForShutdown() from |frontend_loop_| to request
|
| - // sync manager to stop as soon as possible.
|
| + // 1) Call the SyncManagerStopHandle's RequestStop() from |frontend_loop_| to
|
| + // request sync manager to stop as soon as possible.
|
| // 2) Post DoShutdown() to sync loop to clean up backend state, save
|
| // directory and destroy sync manager.
|
| - void DoStopSyncManagerForShutdown();
|
| void DoShutdown(bool sync_disabled);
|
| void DoDestroySyncManager();
|
|
|
| @@ -401,7 +400,8 @@ void SyncBackendHost::Initialize(
|
| new InternalComponentsFactoryImpl(factory_switches)).Pass(),
|
| unrecoverable_error_handler.Pass(),
|
| report_unrecoverable_error_function,
|
| - !cl->HasSwitch(switches::kSyncDisableOAuth2Token)));
|
| + !cl->HasSwitch(switches::kSyncDisableOAuth2Token),
|
| + &cancelation_signal_));
|
| InitCore(init_opts.Pass());
|
| }
|
|
|
| @@ -492,24 +492,9 @@ bool SyncBackendHost::SetDecryptionPassphrase(const std::string& passphrase) {
|
| return true;
|
| }
|
|
|
| -void SyncBackendHost::StopSyncManagerForShutdown() {
|
| - DCHECK_GT(initialization_state_, NOT_ATTEMPTED);
|
| - if (initialization_state_ == CREATING_SYNC_MANAGER) {
|
| - // We post here to implicitly wait for the SyncManager to be created,
|
| - // if needed. We have to wait, since we need to shutdown immediately,
|
| - // and we need to tell the SyncManager so it can abort any activity
|
| - // (net I/O, data application).
|
| - DCHECK(registrar_->sync_thread()->IsRunning());
|
| - registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE,
|
| - base::Bind(&SyncBackendHost::Core::DoStopSyncManagerForShutdown,
|
| - core_.get()));
|
| - } else {
|
| - core_->DoStopSyncManagerForShutdown();
|
| - }
|
| -}
|
| -
|
| void SyncBackendHost::StopSyncingForShutdown() {
|
| DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
|
| + DCHECK_GT(initialization_state_, NOT_ATTEMPTED);
|
|
|
| // Immediately stop sending messages to the frontend.
|
| frontend_ = NULL;
|
| @@ -521,7 +506,7 @@ void SyncBackendHost::StopSyncingForShutdown() {
|
|
|
| registrar_->RequestWorkerStopOnUIThread();
|
|
|
| - StopSyncManagerForShutdown();
|
| + cancelation_signal_.RequestStop();
|
| }
|
|
|
| scoped_ptr<base::Thread> SyncBackendHost::Shutdown(ShutdownOption option) {
|
| @@ -883,7 +868,8 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| scoped_ptr<syncer::UnrecoverableErrorHandler> unrecoverable_error_handler,
|
| syncer::ReportUnrecoverableErrorFunction
|
| report_unrecoverable_error_function,
|
| - bool use_oauth2_token)
|
| + bool use_oauth2_token,
|
| + syncer::CancelationSignal* const cancelation_signal)
|
| : sync_loop(sync_loop),
|
| registrar(registrar),
|
| routing_info(routing_info),
|
| @@ -903,7 +889,8 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
|
| unrecoverable_error_handler(unrecoverable_error_handler.Pass()),
|
| report_unrecoverable_error_function(
|
| report_unrecoverable_error_function),
|
| - use_oauth2_token(use_oauth2_token) {
|
| + use_oauth2_token(use_oauth2_token),
|
| + cancelation_signal(cancelation_signal) {
|
| }
|
|
|
| SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {}
|
| @@ -1168,7 +1155,8 @@ void SyncBackendHost::Core::DoInitialize(
|
| &encryptor_,
|
| options->unrecoverable_error_handler.Pass(),
|
| options->report_unrecoverable_error_function,
|
| - options->use_oauth2_token);
|
| + options->use_oauth2_token,
|
| + options->cancelation_signal);
|
|
|
| // |sync_manager_| may end up being NULL here in tests (in
|
| // synchronous initialization mode).
|
| @@ -1278,11 +1266,6 @@ void SyncBackendHost::Core::DoEnableEncryptEverything() {
|
| sync_manager_->GetEncryptionHandler()->EnableEncryptEverything();
|
| }
|
|
|
| -void SyncBackendHost::Core::DoStopSyncManagerForShutdown() {
|
| - if (sync_manager_)
|
| - sync_manager_->StopSyncingForShutdown();
|
| -}
|
| -
|
| void SyncBackendHost::Core::DoShutdown(bool sync_disabled) {
|
| DCHECK_EQ(base::MessageLoop::current(), sync_loop_);
|
| // It's safe to do this even if the type was never activated.
|
|
|