Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Unified Diff: chrome/browser/sync/profile_sync_service.cc

Issue 6902101: Refactor sync passphrase setup flow and fix passphrase tests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: de Morgan's law simplification. Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 d6347d85b9ffdac614afb43f20dda792dd20f129..db2fd104478180dec30f414e498cf970f1e466d6 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -68,8 +68,7 @@ ProfileSyncService::ProfileSyncService(ProfileSyncFactory* factory,
Profile* profile,
const std::string& cros_user)
: last_auth_error_(AuthError::None()),
- observed_passphrase_required_(false),
- passphrase_required_for_decryption_(false),
+ passphrase_required_reason_(sync_api::REASON_PASSPHRASE_NOT_REQUIRED),
passphrase_migration_in_progress_(false),
factory_(factory),
profile_(profile),
@@ -379,7 +378,7 @@ void ProfileSyncService::Shutdown(bool sync_disabled) {
// Clear various flags.
is_auth_in_progress_ = false;
backend_initialized_ = false;
- observed_passphrase_required_ = false;
+ passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
last_attempted_user_email_.clear();
last_auth_error_ = GoogleServiceAuthError::None();
}
@@ -592,7 +591,8 @@ void ProfileSyncService::OnClearServerDataSucceeded() {
}
}
-void ProfileSyncService::OnPassphraseRequired(bool for_decryption) {
+void ProfileSyncService::OnPassphraseRequired(
+ sync_api::PassphraseRequiredReason reason) {
DCHECK(backend_.get());
DCHECK(backend_->IsNigoriEnabled());
@@ -602,8 +602,8 @@ void ProfileSyncService::OnPassphraseRequired(bool for_decryption) {
// backend. The task might not have executed yet.
return;
}
- observed_passphrase_required_ = true;
- passphrase_required_for_decryption_ = for_decryption;
+
+ passphrase_required_reason_ = reason;
if (!cached_passphrase_.value.empty()) {
SetPassphrase(cached_passphrase_.value,
@@ -613,16 +613,19 @@ void ProfileSyncService::OnPassphraseRequired(bool for_decryption) {
return;
}
- // We will skip the passphrase prompt and suppress the warning
- // if the passphrase is needed for decryption but the user is
- // not syncing an encrypted data type on this machine.
- // Otherwise we prompt.
- if (!IsEncryptedDatatypeEnabled() && for_decryption) {
+ // We will skip the passphrase prompt and suppress the warning if the
+ // passphrase is needed for decryption but the user is not syncing an
+ // encrypted data type on this machine. Otherwise we prompt.
+ if (!IsEncryptedDatatypeEnabled() &&
+ (reason == sync_api::REASON_DECRYPTION ||
+ reason == sync_api::REASON_SET_PASSPHRASE_FAILED)) {
OnPassphraseAccepted();
return;
}
- if (WizardIsVisible() && for_decryption) {
+ if (WizardIsVisible() &&
+ (reason == sync_api::REASON_DECRYPTION ||
+ reason == sync_api::REASON_SET_PASSPHRASE_FAILED)) {
wizard_.Step(SyncSetupWizard::ENTER_PASSPHRASE);
}
@@ -634,9 +637,11 @@ void ProfileSyncService::OnPassphraseAccepted() {
// this time.
syncable::ModelTypeSet types;
GetPreferredDataTypes(&types);
- // Reset "passphrase_required" flag before configuring the DataTypeManager
+
+ // Reset passphrase_required_reason_ before configuring the DataTypeManager
// since we know we no longer require the passphrase.
- observed_passphrase_required_ = false;
+ passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
+
if (data_type_manager_.get())
data_type_manager_->Configure(types);
@@ -684,7 +689,7 @@ void ProfileSyncService::ShowLoginDialog(gfx::NativeWindow parent_window) {
}
void ProfileSyncService::ShowErrorUI(gfx::NativeWindow parent_window) {
- if (observed_passphrase_required()) {
+ if (ObservedPassphraseRequired()) {
if (IsUsingSecondaryPassphrase())
PromptForExistingPassphrase(parent_window);
else
@@ -940,7 +945,7 @@ void ProfileSyncService::GetRegisteredDataTypes(
bool ProfileSyncService::IsUsingSecondaryPassphrase() const {
return backend_.get() && (backend_->IsUsingExplicitPassphrase() ||
(tried_implicit_gaia_remove_when_bug_62103_fixed_ &&
- observed_passphrase_required_));
+ ObservedPassphraseRequired()));
}
bool ProfileSyncService::IsCryptographerReady(
@@ -981,18 +986,20 @@ void ProfileSyncService::ConfigureDataTypeManager() {
encrypted_types_.clear();
if (types.count(syncable::PASSWORDS) > 0)
encrypted_types_.insert(syncable::PASSWORDS);
- if (observed_passphrase_required_ && passphrase_required_for_decryption_) {
+ if (passphrase_required_reason_ == sync_api::REASON_DECRYPTION ||
+ passphrase_required_reason_ == sync_api::REASON_SET_PASSPHRASE_FAILED) {
if (IsEncryptedDatatypeEnabled()) {
// We need a passphrase still. Prompt the user for a passphrase, and
// DataTypeManager::Configure() will get called once the passphrase is
// accepted.
- OnPassphraseRequired(true);
+ OnPassphraseRequired(passphrase_required_reason_);
return;
} else {
// We've been informed that a passphrase is required for decryption, but
- // now there are no encrypted data types enabled, so clear the flag
- // (NotifyObservers() will be called when configuration completes).
- observed_passphrase_required_ = false;
+ // now there are no encrypted data types enabled, so change the value of
+ // passphrase_required_reason_ to its default value. (NotifyObservers()
+ // will be called when configuration completes).
+ passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
}
}
data_type_manager_->Configure(types);
@@ -1098,7 +1105,7 @@ void ProfileSyncService::DeactivateDataType(
void ProfileSyncService::SetPassphrase(const std::string& passphrase,
bool is_explicit,
bool is_creation) {
- if (ShouldPushChanges() || observed_passphrase_required_) {
+ if (ShouldPushChanges() || ObservedPassphraseRequired()) {
backend_->SetPassphrase(passphrase, is_explicit);
} else {
cached_passphrase_.value = passphrase;
@@ -1154,9 +1161,10 @@ void ProfileSyncService::Observe(NotificationType type,
// We should never get in a state where we have no encrypted datatypes
// enabled, and yet we still think we require a passphrase.
- DCHECK(!(observed_passphrase_required_ &&
- passphrase_required_for_decryption_ &&
- !IsEncryptedDatatypeEnabled()));
+ DCHECK(passphrase_required_reason_ ==
+ sync_api::REASON_PASSPHRASE_NOT_REQUIRED ||
+ passphrase_required_reason_ == sync_api::REASON_ENCRYPTION ||
+ IsEncryptedDatatypeEnabled());
// TODO(sync): Less wizard, more toast.
wizard_.Step(SyncSetupWizard::DONE);
@@ -1202,7 +1210,9 @@ void ProfileSyncService::Observe(NotificationType type,
// If this signin was to initiate a passphrase migration (on the
// first computer, thus not for decryption), continue the migration.
if (passphrase_migration_in_progress_ &&
- !passphrase_required_for_decryption_) {
+ passphrase_required_reason_ != sync_api::REASON_DECRYPTION &&
+ passphrase_required_reason_ !=
+ sync_api::REASON_SET_PASSPHRASE_FAILED) {
wizard_.Step(SyncSetupWizard::PASSPHRASE_MIGRATION);
passphrase_migration_in_progress_ = false;
}

Powered by Google App Engine
This is Rietveld 408576698