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

Unified Diff: chrome/browser/sync/glue/sync_backend_host.cc

Issue 10540149: [Sync] Persist keystore key across restarts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix rebase Created 8 years, 5 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/glue/sync_backend_host.h ('k') | chrome/browser/sync/sync_prefs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/sync_backend_host.cc
diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
index 8c0d8c7d9f941758f8fd2e4d271799791f51be71..469075ddf8807217a2b92860e8957338573b3174 100644
--- a/chrome/browser/sync/glue/sync_backend_host.cc
+++ b/chrome/browser/sync/glue/sync_backend_host.cc
@@ -411,6 +411,7 @@ void SyncBackendHost::Initialize(
sync_manager_factory,
delete_sync_data_folder,
sync_prefs_->GetEncryptionBootstrapToken(),
+ sync_prefs_->GetKeystoreEncryptionBootstrapToken(),
new InternalComponentsFactoryImpl(),
unrecoverable_error_handler,
report_unrecoverable_error_function));
@@ -786,6 +787,7 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
syncer::SyncManagerFactory* sync_manager_factory,
bool delete_sync_data_folder,
const std::string& restored_key_for_bootstrapping,
+ const std::string& restored_keystore_key_for_bootstrapping,
InternalComponentsFactory* internal_components_factory,
syncer::UnrecoverableErrorHandler* unrecoverable_error_handler,
syncer::ReportUnrecoverableErrorFunction
@@ -804,6 +806,8 @@ SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
sync_manager_factory(sync_manager_factory),
delete_sync_data_folder(delete_sync_data_folder),
restored_key_for_bootstrapping(restored_key_for_bootstrapping),
+ restored_keystore_key_for_bootstrapping(
+ restored_keystore_key_for_bootstrapping),
internal_components_factory(internal_components_factory),
unrecoverable_error_handler(unrecoverable_error_handler),
report_unrecoverable_error_function(
@@ -834,6 +838,24 @@ void SyncBackendHost::Core::OnSyncCycleCompleted(
if (!sync_loop_)
return;
DCHECK_EQ(MessageLoop::current(), sync_loop_);
+
+ if (snapshot.model_neutral_state().last_get_key_result ==
+ syncer::SYNCER_OK) {
+ // If we just received a new keystore key, get it and make sure we update
+ // the bootstrap token with it.
+ std::string keystore_token;
+ sync_manager_->GetKeystoreKeyBootstrapToken(&keystore_token);
+ if (!keystore_token.empty()) {
+ DVLOG(1) << "Persisting keystore encryption bootstrap token.";
+ host_.Call(FROM_HERE,
+ &SyncBackendHost::PersistEncryptionBootstrapToken,
+ keystore_token,
+ KEYSTORE_BOOTSTRAP_TOKEN);
+ } else {
+ NOTREACHED();
+ }
+ }
+
host_.Call(
FROM_HERE,
&SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop,
@@ -893,9 +915,10 @@ void SyncBackendHost::Core::OnBootstrapTokenUpdated(
if (!sync_loop_)
return;
DCHECK_EQ(MessageLoop::current(), sync_loop_);
- host_.Call(
- FROM_HERE,
- &SyncBackendHost::PersistEncryptionBootstrapToken, bootstrap_token);
+ host_.Call(FROM_HERE,
+ &SyncBackendHost::PersistEncryptionBootstrapToken,
+ bootstrap_token,
+ PASSPHRASE_BOOTSTRAP_TOKEN);
}
void SyncBackendHost::Core::OnStopSyncingPermanently() {
@@ -992,6 +1015,7 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
options.chrome_sync_notification_bridge,
options.sync_notifier_factory->CreateSyncNotifier())),
options.restored_key_for_bootstrapping,
+ options.restored_keystore_key_for_bootstrapping,
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kSyncKeystoreEncryption),
scoped_ptr<InternalComponentsFactory>(
@@ -1261,9 +1285,14 @@ void SyncBackendHost::RetryConfigurationOnFrontendLoop(
}
void SyncBackendHost::PersistEncryptionBootstrapToken(
- const std::string& token) {
+ const std::string& token,
+ BootstrapTokenType token_type) {
CHECK(sync_prefs_.get());
- sync_prefs_->SetEncryptionBootstrapToken(token);
+ DCHECK(!token.empty());
+ if (token_type == PASSPHRASE_BOOTSTRAP_TOKEN)
+ sync_prefs_->SetEncryptionBootstrapToken(token);
+ else
+ sync_prefs_->SetKeystoreEncryptionBootstrapToken(token);
}
void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop(
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host.h ('k') | chrome/browser/sync/sync_prefs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698