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

Side by Side 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: Created 8 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "chrome/browser/sync/glue/sync_backend_host.h" 7 #include "chrome/browser/sync/glue/sync_backend_host.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <map> 10 #include <map>
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 &extensions_activity_monitor_, 371 &extensions_activity_monitor_,
372 event_handler, 372 event_handler,
373 sync_service_url, 373 sync_service_url,
374 base::Bind(&MakeHttpBridgeFactory, 374 base::Bind(&MakeHttpBridgeFactory,
375 make_scoped_refptr(profile_->GetRequestContext())), 375 make_scoped_refptr(profile_->GetRequestContext())),
376 credentials, 376 credentials,
377 &chrome_sync_notification_bridge_, 377 &chrome_sync_notification_bridge_,
378 &sync_notifier_factory_, 378 &sync_notifier_factory_,
379 delete_sync_data_folder, 379 delete_sync_data_folder,
380 sync_prefs_->GetEncryptionBootstrapToken(), 380 sync_prefs_->GetEncryptionBootstrapToken(),
381 sync_prefs_->GetKeystoreEncryptionBootstrapToken(),
381 sync_api::SyncManager::NON_TEST, 382 sync_api::SyncManager::NON_TEST,
382 unrecoverable_error_handler, 383 unrecoverable_error_handler,
383 report_unrecoverable_error_function)); 384 report_unrecoverable_error_function));
384 } 385 }
385 386
386 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) { 387 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) {
387 sync_thread_.message_loop()->PostTask(FROM_HERE, 388 sync_thread_.message_loop()->PostTask(FROM_HERE,
388 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(), 389 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(),
389 credentials)); 390 credentials));
390 } 391 }
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 base::Bind(&SyncBackendHost::Core::DoConfigureSyncer, 714 base::Bind(&SyncBackendHost::Core::DoConfigureSyncer,
714 core_.get(), 715 core_.get(),
715 reason, 716 reason,
716 types_to_config, 717 types_to_config,
717 routing_info, 718 routing_info,
718 ready_task, 719 ready_task,
719 retry_callback)); 720 retry_callback));
720 } 721 }
721 722
722 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop( 723 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop(
724 const std::string& keystore_bootstrap_token,
rlarocque 2012/06/13 23:35:04 Is it really necessary to send the token back on e
Nicolas Zea 2012/06/15 00:42:07 Yeah, I guess the bootstrap token doesn't really r
rlarocque 2012/06/15 19:02:00 I'm not sure that's much better. Wouldn't it make
Nicolas Zea 2012/06/15 20:15:30 This is effectively the same logic used in the boo
723 const syncable::ModelTypeSet& types_to_configure, 725 const syncable::ModelTypeSet& types_to_configure,
724 const syncable::ModelTypeSet& configured_types, 726 const syncable::ModelTypeSet& configured_types,
725 const base::Callback<void(syncable::ModelTypeSet)>& ready_task) { 727 const base::Callback<void(syncable::ModelTypeSet)>& ready_task) {
726 const syncable::ModelTypeSet failed_configuration_types = 728 const syncable::ModelTypeSet failed_configuration_types =
727 Difference(types_to_configure, configured_types); 729 Difference(types_to_configure, configured_types);
728 SDVLOG(1) 730 SDVLOG(1)
729 << "Added types: " 731 << "Added types: "
730 << syncable::ModelTypeSetToString(types_to_configure) 732 << syncable::ModelTypeSetToString(types_to_configure)
731 << ", configured types: " 733 << ", configured types: "
732 << syncable::ModelTypeSetToString(configured_types) 734 << syncable::ModelTypeSetToString(configured_types)
733 << ", failed configuration types: " 735 << ", failed configuration types: "
734 << syncable::ModelTypeSetToString(failed_configuration_types); 736 << syncable::ModelTypeSetToString(failed_configuration_types);
735 737
736 // Update |chrome_sync_notification_bridge_|'s enabled types here as it has 738 // Update |chrome_sync_notification_bridge_|'s enabled types here as it has
737 // to happen on the UI thread. 739 // to happen on the UI thread.
738 chrome_sync_notification_bridge_.UpdateEnabledTypes(configured_types); 740 chrome_sync_notification_bridge_.UpdateEnabledTypes(configured_types);
739 741
740 // Notify SyncManager (especially the notification listener) about new types. 742 // Notify SyncManager (especially the notification listener) about new types.
741 sync_thread_.message_loop()->PostTask(FROM_HERE, 743 sync_thread_.message_loop()->PostTask(FROM_HERE,
742 base::Bind(&SyncBackendHost::Core::DoUpdateEnabledTypes, core_.get(), 744 base::Bind(&SyncBackendHost::Core::DoUpdateEnabledTypes, core_.get(),
743 configured_types)); 745 configured_types));
744 746
747 if (!keystore_bootstrap_token.empty()) {
748 DVLOG(1) << "Persisting keystore encryption bootstrap token.";
749 sync_prefs_->SetKeystoreEncryptionBootstrapToken(keystore_bootstrap_token);
750 }
751
745 if (!ready_task.is_null()) 752 if (!ready_task.is_null())
746 ready_task.Run(failed_configuration_types); 753 ready_task.Run(failed_configuration_types);
747 } 754 }
748 755
749 SyncBackendHost::DoInitializeOptions::DoInitializeOptions( 756 SyncBackendHost::DoInitializeOptions::DoInitializeOptions(
750 MessageLoop* sync_loop, 757 MessageLoop* sync_loop,
751 SyncBackendRegistrar* registrar, 758 SyncBackendRegistrar* registrar,
752 const ModelSafeRoutingInfo& routing_info, 759 const ModelSafeRoutingInfo& routing_info,
753 const std::vector<ModelSafeWorker*>& workers, 760 const std::vector<ModelSafeWorker*>& workers,
754 ExtensionsActivityMonitor* extensions_activity_monitor, 761 ExtensionsActivityMonitor* extensions_activity_monitor,
755 const WeakHandle<JsEventHandler>& event_handler, 762 const WeakHandle<JsEventHandler>& event_handler,
756 const GURL& service_url, 763 const GURL& service_url,
757 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn, 764 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn,
758 const sync_api::SyncCredentials& credentials, 765 const sync_api::SyncCredentials& credentials,
759 ChromeSyncNotificationBridge* chrome_sync_notification_bridge, 766 ChromeSyncNotificationBridge* chrome_sync_notification_bridge,
760 sync_notifier::SyncNotifierFactory* sync_notifier_factory, 767 sync_notifier::SyncNotifierFactory* sync_notifier_factory,
761 bool delete_sync_data_folder, 768 bool delete_sync_data_folder,
762 const std::string& restored_key_for_bootstrapping, 769 const std::string& restored_key_for_bootstrapping,
770 const std::string& restored_keystore_key_for_bootstrapping,
763 sync_api::SyncManager::TestingMode testing_mode, 771 sync_api::SyncManager::TestingMode testing_mode,
764 UnrecoverableErrorHandler* unrecoverable_error_handler, 772 UnrecoverableErrorHandler* unrecoverable_error_handler,
765 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) 773 ReportUnrecoverableErrorFunction report_unrecoverable_error_function)
766 : sync_loop(sync_loop), 774 : sync_loop(sync_loop),
767 registrar(registrar), 775 registrar(registrar),
768 routing_info(routing_info), 776 routing_info(routing_info),
769 workers(workers), 777 workers(workers),
770 extensions_activity_monitor(extensions_activity_monitor), 778 extensions_activity_monitor(extensions_activity_monitor),
771 event_handler(event_handler), 779 event_handler(event_handler),
772 service_url(service_url), 780 service_url(service_url),
773 make_http_bridge_factory_fn(make_http_bridge_factory_fn), 781 make_http_bridge_factory_fn(make_http_bridge_factory_fn),
774 credentials(credentials), 782 credentials(credentials),
775 chrome_sync_notification_bridge(chrome_sync_notification_bridge), 783 chrome_sync_notification_bridge(chrome_sync_notification_bridge),
776 sync_notifier_factory(sync_notifier_factory), 784 sync_notifier_factory(sync_notifier_factory),
777 delete_sync_data_folder(delete_sync_data_folder), 785 delete_sync_data_folder(delete_sync_data_folder),
778 restored_key_for_bootstrapping(restored_key_for_bootstrapping), 786 restored_key_for_bootstrapping(restored_key_for_bootstrapping),
787 restored_keystore_key_for_bootstrapping(
788 restored_keystore_key_for_bootstrapping),
779 testing_mode(testing_mode), 789 testing_mode(testing_mode),
780 unrecoverable_error_handler(unrecoverable_error_handler), 790 unrecoverable_error_handler(unrecoverable_error_handler),
781 report_unrecoverable_error_function( 791 report_unrecoverable_error_function(
782 report_unrecoverable_error_function) { 792 report_unrecoverable_error_function) {
783 } 793 }
784 794
785 SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {} 795 SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {}
786 796
787 SyncBackendHost::Core::Core(const std::string& name, 797 SyncBackendHost::Core::Core(const std::string& name,
788 const FilePath& sync_data_folder_path, 798 const FilePath& sync_data_folder_path,
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 options.routing_info, 1013 options.routing_info,
1004 options.workers, 1014 options.workers,
1005 options.extensions_activity_monitor, 1015 options.extensions_activity_monitor,
1006 options.registrar /* as SyncManager::ChangeDelegate */, 1016 options.registrar /* as SyncManager::ChangeDelegate */,
1007 MakeUserAgentForSyncApi(), 1017 MakeUserAgentForSyncApi(),
1008 options.credentials, 1018 options.credentials,
1009 new BridgedSyncNotifier( 1019 new BridgedSyncNotifier(
1010 options.chrome_sync_notification_bridge, 1020 options.chrome_sync_notification_bridge,
1011 options.sync_notifier_factory->CreateSyncNotifier()), 1021 options.sync_notifier_factory->CreateSyncNotifier()),
1012 options.restored_key_for_bootstrapping, 1022 options.restored_key_for_bootstrapping,
1023 options.restored_keystore_key_for_bootstrapping,
1013 CommandLine::ForCurrentProcess()->HasSwitch( 1024 CommandLine::ForCurrentProcess()->HasSwitch(
1014 switches::kSyncKeystoreEncryption), 1025 switches::kSyncKeystoreEncryption),
1015 options.testing_mode, 1026 options.testing_mode,
1016 &encryptor_, 1027 &encryptor_,
1017 options.unrecoverable_error_handler, 1028 options.unrecoverable_error_handler,
1018 options.report_unrecoverable_error_function); 1029 options.report_unrecoverable_error_function);
1019 LOG_IF(ERROR, !success) << "Syncapi initialization failed!"; 1030 LOG_IF(ERROR, !success) << "Syncapi initialization failed!";
1020 1031
1021 // Now check the command line to see if we need to simulate an 1032 // Now check the command line to see if we need to simulate an
1022 // unrecoverable error for testing purpose. Note the error is thrown 1033 // unrecoverable error for testing purpose. Note the error is thrown
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 retry_callback)); 1135 retry_callback));
1125 } 1136 }
1126 1137
1127 void SyncBackendHost::Core::DoFinishConfigureDataTypes( 1138 void SyncBackendHost::Core::DoFinishConfigureDataTypes(
1128 syncable::ModelTypeSet types_to_config, 1139 syncable::ModelTypeSet types_to_config,
1129 const base::Callback<void(syncable::ModelTypeSet)>& ready_task) { 1140 const base::Callback<void(syncable::ModelTypeSet)>& ready_task) {
1130 DCHECK_EQ(MessageLoop::current(), sync_loop_); 1141 DCHECK_EQ(MessageLoop::current(), sync_loop_);
1131 syncable::ModelTypeSet configured_types = 1142 syncable::ModelTypeSet configured_types =
1132 sync_manager_->InitialSyncEndedTypes(); 1143 sync_manager_->InitialSyncEndedTypes();
1133 configured_types.RetainAll(types_to_config); 1144 configured_types.RetainAll(types_to_config);
1145
1146 std::string keystore_token;
1147 sync_manager_->GetKeystoreKeyBootstrapToken(&keystore_token);
1148
1134 host_.Call(FROM_HERE, 1149 host_.Call(FROM_HERE,
1135 &SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop, 1150 &SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop,
1151 keystore_token,
1136 types_to_config, 1152 types_to_config,
1137 configured_types, 1153 configured_types,
1138 ready_task); 1154 ready_task);
1139 } 1155 }
1140 1156
1141 void SyncBackendHost::Core::DoRetryConfiguration( 1157 void SyncBackendHost::Core::DoRetryConfiguration(
1142 const base::Closure& retry_callback) { 1158 const base::Closure& retry_callback) {
1143 DCHECK_EQ(MessageLoop::current(), sync_loop_); 1159 DCHECK_EQ(MessageLoop::current(), sync_loop_);
1144 host_.Call(FROM_HERE, 1160 host_.Call(FROM_HERE,
1145 &SyncBackendHost::RetryConfigurationOnFrontendLoop, 1161 &SyncBackendHost::RetryConfigurationOnFrontendLoop,
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 FROM_HERE, 1423 FROM_HERE,
1408 base::Bind(&SyncBackendHost::Core::DoRefreshNigori, 1424 base::Bind(&SyncBackendHost::Core::DoRefreshNigori,
1409 core_.get(), sync_thread_done_callback)); 1425 core_.get(), sync_thread_done_callback));
1410 } 1426 }
1411 1427
1412 #undef SDVLOG 1428 #undef SDVLOG
1413 1429
1414 #undef SLOG 1430 #undef SLOG
1415 1431
1416 } // namespace browser_sync 1432 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698