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

Unified Diff: sync/internal_api/sync_encryption_handler_impl.cc

Issue 10824410: [Sync] Refactor passphrase state handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix last test Created 8 years, 4 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: sync/internal_api/sync_encryption_handler_impl.cc
diff --git a/sync/internal_api/sync_encryption_handler_impl.cc b/sync/internal_api/sync_encryption_handler_impl.cc
index 2873bba03143b19cdb5cc77cd7a0cb200986dfaa..9798d9e441d62200519a6777081c83074884125c 100644
--- a/sync/internal_api/sync_encryption_handler_impl.cc
+++ b/sync/internal_api/sync_encryption_handler_impl.cc
@@ -60,7 +60,7 @@ SyncEncryptionHandlerImpl::SyncEncryptionHandlerImpl(
cryptographer_holder_(user_share_, &cryptographer_unsafe_),
encrypted_types_holder_(user_share_, &encrypted_types_unsafe_),
encrypt_everything_(false),
- explicit_passphrase_(false),
+ passphrase_state_(IMPLICIT_PASSPHRASE),
nigori_overwrite_count_(0) {
}
@@ -389,12 +389,9 @@ bool SyncEncryptionHandlerImpl::EncryptEverythingEnabled() const {
return encrypt_everything_;
}
-bool SyncEncryptionHandlerImpl::IsUsingExplicitPassphrase() const {
- // TODO(zea): this is called from the UI thread, so we have to have a
- // transaction while accessing it. Add an OnPassphraseTypeChanged observer
- // and have the SBH cache the value on the UI thread.
- ReadTransaction trans(FROM_HERE, user_share_);
- return explicit_passphrase_;
+PassphraseState SyncEncryptionHandlerImpl::GetPassphraseState() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return passphrase_state_;
}
// Note: this is called from within a syncable transaction, so we need to post
@@ -506,10 +503,15 @@ bool SyncEncryptionHandlerImpl::ApplyNigoriUpdateImpl(
const sync_pb::NigoriSpecifics& nigori,
syncable::BaseTransaction* const trans) {
DCHECK(thread_checker_.CalledOnValidThread());
+ DVLOG(1) << "Applying nigori node update.";
bool nigori_types_need_update = !UpdateEncryptedTypesFromNigori(nigori,
trans);
- if (nigori.using_explicit_passphrase())
- explicit_passphrase_ = true;
+ if (nigori.using_explicit_passphrase() &&
+ passphrase_state_ != CUSTOM_PASSPHRASE) {
+ passphrase_state_ = CUSTOM_PASSPHRASE;
+ FOR_EACH_OBSERVER(SyncEncryptionHandler::Observer, observers_,
+ OnPassphraseStateChanged(passphrase_state_));
+ }
Cryptographer* cryptographer = cryptographer_holder_.GetMutable(trans);
bool nigori_needs_new_keys = false;
@@ -556,7 +558,8 @@ bool SyncEncryptionHandlerImpl::ApplyNigoriUpdateImpl(
// Check if the current local encryption state is stricter/newer than the
// nigori state. If so, we need to overwrite the nigori node with the local
// state.
- if (nigori.using_explicit_passphrase() != explicit_passphrase_ ||
+ if (nigori.using_explicit_passphrase() !=
+ (passphrase_state_ == CUSTOM_PASSPHRASE) ||
akalin 2012/08/22 20:10:39 might be clearer to have an intermediate variable
Nicolas Zea 2012/08/22 20:18:33 Done.
nigori.encrypt_everything() != encrypt_everything_ ||
nigori_types_need_update ||
nigori_needs_new_keys) {
@@ -695,8 +698,6 @@ void SyncEncryptionHandlerImpl::FinishSetPassphrase(
return;
}
- FOR_EACH_OBSERVER(SyncEncryptionHandler::Observer, observers_,
- OnPassphraseAccepted());
DCHECK(cryptographer.is_ready());
sync_pb::NigoriSpecifics specifics(nigori_node->GetNigoriSpecifics());
@@ -704,10 +705,19 @@ void SyncEncryptionHandlerImpl::FinishSetPassphrase(
// the same.
if (!cryptographer.GetKeys(specifics.mutable_encrypted()))
NOTREACHED();
- explicit_passphrase_ = is_explicit;
+ if (is_explicit && passphrase_state_ != CUSTOM_PASSPHRASE) {
+ passphrase_state_ = CUSTOM_PASSPHRASE;
+ FOR_EACH_OBSERVER(SyncEncryptionHandler::Observer, observers_,
+ OnPassphraseStateChanged(passphrase_state_));
+ }
specifics.set_using_explicit_passphrase(is_explicit);
nigori_node->SetNigoriSpecifics(specifics);
+ // Must do this after OnPassphraseStateChanged, in order to ensure the PSS
+ // checks the passphrase state after it has been set.
+ FOR_EACH_OBSERVER(SyncEncryptionHandler::Observer, observers_,
+ OnPassphraseAccepted());
+
// Does nothing if everything is already encrypted.
ReEncryptEverything(trans);
}

Powered by Google App Engine
This is Rietveld 408576698