| Index: chrome/browser/sync/profile_sync_service.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
|
| index 99299b8d7efb72c9139a19144b0b7cb352e55871..3884a1964815dc558c3d18c96cede291d2af4ad9 100644
|
| --- a/chrome/browser/sync/profile_sync_service.cc
|
| +++ b/chrome/browser/sync/profile_sync_service.cc
|
| @@ -188,19 +188,20 @@ void ProfileSyncService::Initialize() {
|
| signin_->Initialize(profile_);
|
| }
|
|
|
| - if (!HasSyncSetupCompleted()) {
|
| - // If autostart is enabled, but we haven't completed sync setup, try to
|
| - // start sync anyway (it's possible we crashed/shutdown after logging in
|
| - // but before the backend finished initializing the last time).
|
| - if (auto_start_enabled_ && !sync_prefs_.IsStartSuppressed() &&
|
| - AreCredentialsAvailable()) {
|
| + TryStart();
|
| +}
|
| +
|
| +void ProfileSyncService::TryStart() {
|
| + if (!sync_prefs_.IsStartSuppressed() && AreCredentialsAvailable()) {
|
| + if (HasSyncSetupCompleted() || auto_start_enabled_) {
|
| + // If sync setup has completed we always start the backend.
|
| + // If autostart is enabled, but we haven't completed sync setup, we try to
|
| + // start sync anyway, since it's possible we crashed/shutdown after
|
| + // logging in but before the backend finished initializing the last time.
|
| + // Note that if we haven't finished setting up sync, backend bring up will
|
| + // be done by the wizard.
|
| StartUp();
|
| }
|
| - } else if (AreCredentialsAvailable()) {
|
| - // If we have credentials and sync setup finished, autostart the backend.
|
| - // Note that if we haven't finished setting up sync, backend bring up will
|
| - // be done by the wizard.
|
| - StartUp();
|
| }
|
| }
|
|
|
| @@ -1512,6 +1513,22 @@ bool ProfileSyncService::ShouldPushChanges() {
|
| return data_type_manager_->state() == DataTypeManager::CONFIGURED;
|
| }
|
|
|
| +void ProfileSyncService::StopAndSuppress() {
|
| + sync_prefs_.SetStartSuppressed(true);
|
| + Shutdown(false);
|
| +}
|
| +
|
| +void ProfileSyncService::UnsuppressAndStart() {
|
| + DCHECK(profile_);
|
| + sync_prefs_.SetStartSuppressed(false);
|
| + // Set username in SigninManager, as SigninManager::OnGetUserInfoSuccess
|
| + // is never called for some clients.
|
| + if (signin_->GetUsername().empty()) {
|
| + signin_->SetUsername(sync_prefs_.GetGoogleServicesUsername());
|
| + }
|
| + TryStart();
|
| +}
|
| +
|
| void ProfileSyncService::AcknowledgeSyncedTypes() {
|
| syncable::ModelTypeSet registered_types;
|
| GetRegisteredDataTypes(®istered_types);
|
|
|