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 d23fda00339b3d720c51f77a532bbd4146685377..9452217302054daa43c5b1d36a51f86c298d31ad 100644 |
--- a/chrome/browser/sync/sync_setup_flow.cc |
+++ b/chrome/browser/sync/sync_setup_flow.cc |
@@ -34,17 +34,6 @@ void DisablePasswordSync(ProfileSyncService* service) { |
service->OnUserChoseDatatypes(false, types); |
} |
-// Fills |args| for the enter passphrase screen. |
-void GetArgsForEnterPassphrase(bool tried_creating_explicit_passphrase, |
- bool tried_setting_explicit_passphrase, |
- DictionaryValue* args) { |
- args->SetBoolean("show_passphrase", true); |
- args->SetBoolean("passphrase_creation_rejected", |
- tried_creating_explicit_passphrase); |
- args->SetBoolean("passphrase_setting_rejected", |
- tried_setting_explicit_passphrase); |
-} |
- |
// Returns the next step for the non-fatal error case. |
SyncSetupWizard::State GetStepForNonFatalError(ProfileSyncService* service) { |
// TODO(sync): Update this error handling to allow different platforms to |
@@ -89,19 +78,7 @@ SyncSetupFlow* SyncSetupFlow::Run(ProfileSyncService* service, |
SyncSetupWizard::State end) { |
if (start == SyncSetupWizard::NONFATAL_ERROR) |
start = GetStepForNonFatalError(service); |
- |
- DictionaryValue args; |
- if (start == SyncSetupWizard::GAIA_LOGIN) |
- SyncSetupFlow::GetArgsForGaiaLogin(service, &args); |
- else if (start == SyncSetupWizard::CONFIGURE) |
- SyncSetupFlow::GetArgsForConfigure(service, &args); |
- else if (start == SyncSetupWizard::ENTER_PASSPHRASE) |
- GetArgsForEnterPassphrase(false, false, &args); |
- |
- std::string json_args; |
- base::JSONWriter::Write(&args, false, &json_args); |
- |
- return new SyncSetupFlow(start, end, json_args, container, service); |
+ return new SyncSetupFlow(start, end, container, service); |
} |
// static |
@@ -126,7 +103,6 @@ void SyncSetupFlow::GetArgsForGaiaLogin(const ProfileSyncService* service, |
args->SetString("captchaUrl", error.captcha().image_url.spec()); |
} |
-// static |
void SyncSetupFlow::GetArgsForConfigure(ProfileSyncService* service, |
DictionaryValue* args) { |
// The SYNC_EVERYTHING case will set this to true. |
@@ -187,6 +163,18 @@ void SyncSetupFlow::GetArgsForConfigure(ProfileSyncService* service, |
// Load the parameters for the encryption tab. |
args->SetBoolean("usePassphrase", service->IsUsingSecondaryPassphrase()); |
+ |
+ // Determine if we need a passphrase or not, and if so, prompt the user. |
+ if (service->IsPassphraseRequiredForDecryption() && |
+ (service->IsUsingSecondaryPassphrase() || cached_passphrase_.empty())) { |
+ // We need a passphrase, and either it's an explicit passphrase, or we |
+ // don't have a cached gaia passphrase, so we have to prompt the user. |
+ args->SetBoolean("show_passphrase", true); |
+ } |
+ args->SetBoolean("passphrase_creation_rejected", |
+ tried_creating_explicit_passphrase_); |
+ args->SetBoolean("passphrase_setting_rejected", |
+ tried_setting_explicit_passphrase_); |
} |
bool SyncSetupFlow::AttachSyncSetupHandler(SyncSetupFlowHandler* handler) { |
@@ -268,6 +256,7 @@ void SyncSetupFlow::OnUserSubmittedAuth(const std::string& username, |
const std::string& password, |
const std::string& captcha, |
const std::string& access_code) { |
+ cached_passphrase_ = password; |
service_->OnUserSubmittedAuth(username, password, captcha, access_code); |
} |
@@ -287,7 +276,17 @@ void SyncSetupFlow::OnUserConfigured(const SyncConfiguration& configuration) { |
// Caller passed a gaia passphrase. This is illegal if we are currently |
// using a secondary passphrase. |
DCHECK(!service_->IsUsingSecondaryPassphrase()); |
- service_->SetPassphrase(configuration.gaia_passphrase, false, false); |
+ service_->SetPassphrase(configuration.gaia_passphrase, false); |
+ } else if (!service_->IsUsingSecondaryPassphrase() && |
+ !cached_passphrase_.empty()) { |
+ // Service needs a GAIA passphrase and we have one cached, so try it. |
+ service_->SetPassphrase(cached_passphrase_, false); |
+ cached_passphrase_.clear(); |
+ } else { |
+ // No gaia passphrase cached or set, so make sure the ProfileSyncService |
+ // wasn't expecting one. |
+ DCHECK(!service_->IsPassphraseRequiredForDecryption() || |
+ service_->IsUsingSecondaryPassphrase()); |
} |
// It's possible the user has to provide a secondary passphrase even when |
@@ -300,13 +299,11 @@ void SyncSetupFlow::OnUserConfigured(const SyncConfiguration& configuration) { |
// 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); |
- tried_creating_explicit_passphrase_ = true; |
- } else { |
- service_->SetPassphrase(configuration.secondary_passphrase, true, false); |
+ service_->SetPassphrase(configuration.secondary_passphrase, true); |
+ if (service_->IsUsingSecondaryPassphrase()) |
tried_setting_explicit_passphrase_ = true; |
- } |
+ else |
+ tried_creating_explicit_passphrase_ = true; |
} |
service_->OnUserChoseDatatypes(configuration.sync_everything, |
@@ -315,7 +312,7 @@ void SyncSetupFlow::OnUserConfigured(const SyncConfiguration& configuration) { |
void SyncSetupFlow::OnPassphraseEntry(const std::string& passphrase) { |
Advance(SyncSetupWizard::SETTING_UP); |
- service_->SetPassphrase(passphrase, true, false); |
+ service_->SetPassphrase(passphrase, true); |
tried_setting_explicit_passphrase_ = true; |
} |
@@ -331,11 +328,9 @@ void SyncSetupFlow::OnPassphraseCancel() { |
// Use static Run method to get an instance. |
SyncSetupFlow::SyncSetupFlow(SyncSetupWizard::State start_state, |
SyncSetupWizard::State end_state, |
- const std::string& args, |
SyncSetupFlowContainer* container, |
ProfileSyncService* service) |
: container_(container), |
- dialog_start_args_(args), |
current_state_(start_state), |
end_state_(end_state), |
login_start_time_(base::TimeTicks::Now()), |
@@ -426,9 +421,9 @@ void SyncSetupFlow::ActivateState(SyncSetupWizard::State state) { |
case SyncSetupWizard::ENTER_PASSPHRASE: { |
DictionaryValue args; |
SyncSetupFlow::GetArgsForConfigure(service_, &args); |
- GetArgsForEnterPassphrase(tried_creating_explicit_passphrase_, |
- tried_setting_explicit_passphrase_, |
- &args); |
+ GetArgsForConfigure(service_, &args); |
+ // TODO(atwilson): Remove ShowPassphraseEntry in favor of using |
+ // ShowConfigure() - http://crbug.com/90786. |
flow_handler_->ShowPassphraseEntry(args); |
break; |
} |