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

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

Issue 8356026: [Sync] Cache encrypted types info in ProfileSyncService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments (retry) Created 9 years, 2 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
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_harness.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 51c449b7a164cb568527d424712df70d6457ac78..99299b8d7efb72c9139a19144b0b7cb352e55871 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -111,6 +111,8 @@ ProfileSyncService::ProfileSyncService(ProfileSyncFactory* factory,
scoped_runnable_method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
expect_sync_configuration_aborted_(false),
clear_server_data_state_(CLEAR_NOT_STARTED),
+ encrypted_types_(browser_sync::Cryptographer::SensitiveTypes()),
+ encrypt_everything_(false),
encryption_pending_(false),
auto_start_enabled_(false),
failed_datatypes_handler_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
@@ -423,6 +425,8 @@ void ProfileSyncService::Shutdown(bool sync_disabled) {
backend_initialized_ = false;
cached_passphrases_ = CachedPassphrases();
encryption_pending_ = false;
+ encrypt_everything_ = false;
+ encrypted_types_ = browser_sync::Cryptographer::SensitiveTypes();
passphrase_required_reason_ = sync_api::REASON_PASSPHRASE_NOT_REQUIRED;
last_attempted_user_email_.clear();
last_auth_error_ = GoogleServiceAuthError::None();
@@ -838,29 +842,29 @@ void ProfileSyncService::ResolvePassphraseRequired() {
NotifyObservers();
}
-void ProfileSyncService::OnEncryptionComplete(
- const syncable::ModelTypeSet& encrypted_types) {
- if (encryption_pending_) {
- syncable::ModelTypeSet registered_types;
- GetRegisteredDataTypes(&registered_types);
- bool encryption_complete = true;
- for (syncable::ModelTypeSet::const_iterator it = registered_types.begin();
- it != registered_types.end();
- ++it) {
- if (encrypted_types.count(*it) == 0) {
- // One of our types is not yet encrypted - keep waiting.
- encryption_complete = false;
- break;
- }
- }
- if (encryption_complete) {
- encryption_pending_ = false;
- // The user had chosen to encrypt datatypes. This is the last thing to
- // complete, so now that we're done notify the UI.
- wizard_.Step(SyncSetupWizard::DONE);
- }
+void ProfileSyncService::OnEncryptedTypesChanged(
+ const syncable::ModelTypeSet& encrypted_types,
+ bool encrypt_everything) {
+ encrypted_types_ = encrypted_types;
+ encrypt_everything_ = encrypt_everything;
+ VLOG(1) << "Encrypted types changed to "
+ << syncable::ModelTypeSetToString(encrypted_types_)
+ << " (encrypt everything is set to "
+ << (encrypt_everything_ ? "true" : "false") << ")";
+ DCHECK_GT(encrypted_types_.count(syncable::PASSWORDS), 0u);
+}
+
+void ProfileSyncService::OnEncryptionComplete() {
+ VLOG(1) << "Encryption complete";
+ if (encryption_pending_ && encrypt_everything_) {
+ encryption_pending_ = false;
+ // The user had chosen to encrypt datatypes. This is the last thing to
+ // complete, so now that we're done notify the UI.
+ wizard_.Step(SyncSetupWizard::DONE);
+ // This is to nudge the integration tests when encryption is
+ // finished.
+ NotifyObservers();
}
- NotifyObservers();
}
void ProfileSyncService::OnMigrationNeededForTypes(
@@ -1324,37 +1328,35 @@ void ProfileSyncService::SetPassphrase(const std::string& passphrase,
}
void ProfileSyncService::SetEncryptEverything(bool encrypt_everything) {
+ // Tests override sync_initialized() to always return true, so we
+ // must check that instead of |backend_initialized_|.
+ // TODO(akalin): Fix the above. :/
+ DCHECK(sync_initialized());
encryption_pending_ = encrypt_everything;
+ // Callers shouldn't try to disable encrypt everything once it has
+ // already succeeded.
+ DCHECK(!encrypt_everything_);
}
bool ProfileSyncService::encryption_pending() const {
+ // We may be called during the setup process before we're
+ // initialized (via IsEncryptedDatatypeEnabled and
+ // IsPassphraseRequiredForDecryption).
return encryption_pending_;
}
bool ProfileSyncService::EncryptEverythingEnabled() const {
- if (!backend_.get() || !backend_initialized_) {
- NOTREACHED() << "Cannot check encryption without initialized backend.";
- return false;
- }
- return backend_->EncryptEverythingEnabled();
+ DCHECK(backend_initialized_);
+ return encrypt_everything_;
}
-// This will open a transaction to get the encrypted types. Do not call this
-// if you already have a transaction open.
void ProfileSyncService::GetEncryptedDataTypes(
syncable::ModelTypeSet* encrypted_types) const {
CHECK(encrypted_types);
- if (backend_.get()) {
- *encrypted_types = backend_->GetEncryptedDataTypes();
- DCHECK(encrypted_types->count(syncable::PASSWORDS));
- } else {
- // Either we are in an unrecoverable error or the sync is not yet done
- // initializing. In either case just return the sensitive types. During
- // sync initialization the UI might need to know what our encrypted
- // types are.
- *encrypted_types = browser_sync::Cryptographer::SensitiveTypes();
- DCHECK(encrypted_types->count(syncable::PASSWORDS));
- }
+ // We may be called during the setup process before we're
+ // initialized. In this case, we default to the sensitive types.
+ *encrypted_types = encrypted_types_;
+ DCHECK_GT(encrypted_types->count(syncable::PASSWORDS), 0u);
}
void ProfileSyncService::OnSyncManagedPrefChange(bool is_sync_managed) {
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_harness.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698