| Index: components/browser_sync/browser/profile_sync_service.cc
|
| diff --git a/components/browser_sync/browser/profile_sync_service.cc b/components/browser_sync/browser/profile_sync_service.cc
|
| index a41b846d748d38185b63c7bdc93751727ff758ed..66489bf320f0c3c638dfe0beaafb8e445c0454f3 100644
|
| --- a/components/browser_sync/browser/profile_sync_service.cc
|
| +++ b/components/browser_sync/browser/profile_sync_service.cc
|
| @@ -1530,15 +1530,18 @@ bool ProfileSyncService::IsFirstSetupInProgress() const {
|
| return !IsFirstSetupComplete() && startup_controller_->IsSetupInProgress();
|
| }
|
|
|
| -void ProfileSyncService::SetSetupInProgress(bool setup_in_progress) {
|
| - // This method is a no-op if |setup_in_progress_| remains unchanged.
|
| - if (startup_controller_->IsSetupInProgress() == setup_in_progress)
|
| - return;
|
| +std::unique_ptr<sync_driver::SyncSetupInProgressHandle>
|
| +ProfileSyncService::GetSetupInProgressHandle() {
|
| + if (++outstanding_setup_in_progress_handles_ == 1 &&
|
| + !startup_controller_->IsSetupInProgress()) {
|
| + startup_controller_->SetSetupInProgress(true);
|
| + NotifyObservers();
|
| + }
|
|
|
| - startup_controller_->SetSetupInProgress(setup_in_progress);
|
| - if (!setup_in_progress && IsBackendInitialized())
|
| - ReconfigureDatatypeManager();
|
| - NotifyObservers();
|
| + return std::unique_ptr<sync_driver::SyncSetupInProgressHandle>(
|
| + new sync_driver::SyncSetupInProgressHandle(
|
| + base::Bind(&ProfileSyncService::OnSetupInProgressHandleDestroyed,
|
| + weak_factory_.GetWeakPtr())));
|
| }
|
|
|
| bool ProfileSyncService::IsSyncAllowed() const {
|
| @@ -2544,3 +2547,17 @@ tracked_objects::Location ProfileSyncService::unrecoverable_error_location()
|
| const {
|
| return unrecoverable_error_location_;
|
| }
|
| +
|
| +void ProfileSyncService::OnSetupInProgressHandleDestroyed() {
|
| + // Don't re-start Sync until all outstanding handles are destroyed.
|
| + if (--outstanding_setup_in_progress_handles_ != 0)
|
| + return;
|
| +
|
| + if (!startup_controller_->IsSetupInProgress())
|
| + return;
|
| +
|
| + startup_controller_->SetSetupInProgress(false);
|
| + if (IsBackendInitialized())
|
| + ReconfigureDatatypeManager();
|
| + NotifyObservers();
|
| +}
|
|
|