Index: chrome/browser/sync/sync_setup_flow.cc |
diff --git a/chrome/browser/sync/sync_setup_flow.cc b/chrome/browser/sync/sync_setup_flow.cc |
index 977c81831d916c666ab6856d9af5c70e9194035d..f6c956806d5db726ed9957d47aa6efabf9912115 100644 |
--- a/chrome/browser/sync/sync_setup_flow.cc |
+++ b/chrome/browser/sync/sync_setup_flow.cc |
@@ -175,6 +175,8 @@ void SyncSetupFlow::GetArgsForConfigure(ProfileSyncService* service, |
service->GetEncryptedDataTypes(&encrypted_types); |
bool encrypt_all = |
encrypted_types.upper_bound(syncable::PASSWORDS) != encrypted_types.end(); |
+ if (service->HasPendingEncryptedTypes()) |
+ encrypt_all = true; |
args->SetBoolean("encryptAllData", encrypt_all); |
// Load the parameters for the encryption tab. |
@@ -267,16 +269,13 @@ void SyncSetupFlow::OnUserConfigured(const SyncConfiguration& configuration) { |
// Go to the "loading..." screen. |
Advance(SyncSetupWizard::SETTING_UP); |
+ // Note: encryption will not occur until OnUserChoseDatatypes is called. |
+ syncable::ModelTypeSet encrypted_types; |
if (configuration.encrypt_all) { |
- syncable::ModelTypeSet data_types; |
- service_->GetRegisteredDataTypes(&data_types); |
- service_->EncryptDataTypes(data_types); |
- } |
- |
- // If we are activating the passphrase, we need to have one supplied. |
- DCHECK(service_->IsUsingSecondaryPassphrase() || |
- !configuration.use_secondary_passphrase || |
- configuration.secondary_passphrase.length() > 0); |
+ // Encrypt all registered types. |
+ service_->GetRegisteredDataTypes(&encrypted_types); |
+ } // Else we clear the pending types for encryption. |
+ service_->set_pending_types_for_encryption(encrypted_types); |
if (!configuration.gaia_passphrase.empty()) { |
// Caller passed a gaia passphrase. This is illegal if we are currently |
@@ -285,6 +284,15 @@ void SyncSetupFlow::OnUserConfigured(const SyncConfiguration& configuration) { |
service_->SetPassphrase(configuration.gaia_passphrase, false, false); |
} |
+ // It's possible the user has to provide a secondary passphrase even when |
+ // they have not set one previously. This occurs when the user has changed |
+ // their gaia password and then sign in to a new machine for the first time. |
+ // The new machine will download data encrypted with their old gaia password, |
+ // which their current gaia password will not be able to decrypt, triggering |
+ // a prompt for a passphrase. At this point, the user must enter their old |
+ // password, which we store as a new secondary passphrase. |
+ // TODO(zea): eventually use the above gaia_passphrase instead of the |
+ // secondary passphrase in this case. |
if (configuration.use_secondary_passphrase) { |
if (!service_->IsUsingSecondaryPassphrase()) { |
service_->SetPassphrase(configuration.secondary_passphrase, true, true); |