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

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: Fix rebase 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 unified diff | Download patch | Annotate | Revision Log
« 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 event_handler, 404 event_handler,
405 sync_service_url, 405 sync_service_url,
406 base::Bind(&MakeHttpBridgeFactory, 406 base::Bind(&MakeHttpBridgeFactory,
407 make_scoped_refptr(profile_->GetRequestContext())), 407 make_scoped_refptr(profile_->GetRequestContext())),
408 credentials, 408 credentials,
409 chrome_sync_notification_bridge_.get(), 409 chrome_sync_notification_bridge_.get(),
410 &sync_notifier_factory_, 410 &sync_notifier_factory_,
411 sync_manager_factory, 411 sync_manager_factory,
412 delete_sync_data_folder, 412 delete_sync_data_folder,
413 sync_prefs_->GetEncryptionBootstrapToken(), 413 sync_prefs_->GetEncryptionBootstrapToken(),
414 sync_prefs_->GetKeystoreEncryptionBootstrapToken(),
414 new InternalComponentsFactoryImpl(), 415 new InternalComponentsFactoryImpl(),
415 unrecoverable_error_handler, 416 unrecoverable_error_handler,
416 report_unrecoverable_error_function)); 417 report_unrecoverable_error_function));
417 } 418 }
418 419
419 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) { 420 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) {
420 sync_thread_.message_loop()->PostTask(FROM_HERE, 421 sync_thread_.message_loop()->PostTask(FROM_HERE,
421 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(), 422 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(),
422 credentials)); 423 credentials));
423 } 424 }
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, 780 syncer::ExtensionsActivityMonitor* extensions_activity_monitor,
780 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, 781 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler,
781 const GURL& service_url, 782 const GURL& service_url,
782 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn, 783 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn,
783 const syncer::SyncCredentials& credentials, 784 const syncer::SyncCredentials& credentials,
784 ChromeSyncNotificationBridge* chrome_sync_notification_bridge, 785 ChromeSyncNotificationBridge* chrome_sync_notification_bridge,
785 syncer::SyncNotifierFactory* sync_notifier_factory, 786 syncer::SyncNotifierFactory* sync_notifier_factory,
786 syncer::SyncManagerFactory* sync_manager_factory, 787 syncer::SyncManagerFactory* sync_manager_factory,
787 bool delete_sync_data_folder, 788 bool delete_sync_data_folder,
788 const std::string& restored_key_for_bootstrapping, 789 const std::string& restored_key_for_bootstrapping,
790 const std::string& restored_keystore_key_for_bootstrapping,
789 InternalComponentsFactory* internal_components_factory, 791 InternalComponentsFactory* internal_components_factory,
790 syncer::UnrecoverableErrorHandler* unrecoverable_error_handler, 792 syncer::UnrecoverableErrorHandler* unrecoverable_error_handler,
791 syncer::ReportUnrecoverableErrorFunction 793 syncer::ReportUnrecoverableErrorFunction
792 report_unrecoverable_error_function) 794 report_unrecoverable_error_function)
793 : sync_loop(sync_loop), 795 : sync_loop(sync_loop),
794 registrar(registrar), 796 registrar(registrar),
795 routing_info(routing_info), 797 routing_info(routing_info),
796 workers(workers), 798 workers(workers),
797 extensions_activity_monitor(extensions_activity_monitor), 799 extensions_activity_monitor(extensions_activity_monitor),
798 event_handler(event_handler), 800 event_handler(event_handler),
799 service_url(service_url), 801 service_url(service_url),
800 make_http_bridge_factory_fn(make_http_bridge_factory_fn), 802 make_http_bridge_factory_fn(make_http_bridge_factory_fn),
801 credentials(credentials), 803 credentials(credentials),
802 chrome_sync_notification_bridge(chrome_sync_notification_bridge), 804 chrome_sync_notification_bridge(chrome_sync_notification_bridge),
803 sync_notifier_factory(sync_notifier_factory), 805 sync_notifier_factory(sync_notifier_factory),
804 sync_manager_factory(sync_manager_factory), 806 sync_manager_factory(sync_manager_factory),
805 delete_sync_data_folder(delete_sync_data_folder), 807 delete_sync_data_folder(delete_sync_data_folder),
806 restored_key_for_bootstrapping(restored_key_for_bootstrapping), 808 restored_key_for_bootstrapping(restored_key_for_bootstrapping),
809 restored_keystore_key_for_bootstrapping(
810 restored_keystore_key_for_bootstrapping),
807 internal_components_factory(internal_components_factory), 811 internal_components_factory(internal_components_factory),
808 unrecoverable_error_handler(unrecoverable_error_handler), 812 unrecoverable_error_handler(unrecoverable_error_handler),
809 report_unrecoverable_error_function( 813 report_unrecoverable_error_function(
810 report_unrecoverable_error_function) { 814 report_unrecoverable_error_function) {
811 } 815 }
812 816
813 SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {} 817 SyncBackendHost::DoInitializeOptions::~DoInitializeOptions() {}
814 818
815 SyncBackendHost::Core::Core(const std::string& name, 819 SyncBackendHost::Core::Core(const std::string& name,
816 const FilePath& sync_data_folder_path, 820 const FilePath& sync_data_folder_path,
(...skipping 10 matching lines...) Expand all
827 SyncBackendHost::Core::~Core() { 831 SyncBackendHost::Core::~Core() {
828 DCHECK(!sync_manager_.get()); 832 DCHECK(!sync_manager_.get());
829 DCHECK(!sync_loop_); 833 DCHECK(!sync_loop_);
830 } 834 }
831 835
832 void SyncBackendHost::Core::OnSyncCycleCompleted( 836 void SyncBackendHost::Core::OnSyncCycleCompleted(
833 const SyncSessionSnapshot& snapshot) { 837 const SyncSessionSnapshot& snapshot) {
834 if (!sync_loop_) 838 if (!sync_loop_)
835 return; 839 return;
836 DCHECK_EQ(MessageLoop::current(), sync_loop_); 840 DCHECK_EQ(MessageLoop::current(), sync_loop_);
841
842 if (snapshot.model_neutral_state().last_get_key_result ==
843 syncer::SYNCER_OK) {
844 // If we just received a new keystore key, get it and make sure we update
845 // the bootstrap token with it.
846 std::string keystore_token;
847 sync_manager_->GetKeystoreKeyBootstrapToken(&keystore_token);
848 if (!keystore_token.empty()) {
849 DVLOG(1) << "Persisting keystore encryption bootstrap token.";
850 host_.Call(FROM_HERE,
851 &SyncBackendHost::PersistEncryptionBootstrapToken,
852 keystore_token,
853 KEYSTORE_BOOTSTRAP_TOKEN);
854 } else {
855 NOTREACHED();
856 }
857 }
858
837 host_.Call( 859 host_.Call(
838 FROM_HERE, 860 FROM_HERE,
839 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop, 861 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop,
840 snapshot); 862 snapshot);
841 } 863 }
842 864
843 865
844 void SyncBackendHost::Core::OnInitializationComplete( 866 void SyncBackendHost::Core::OnInitializationComplete(
845 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 867 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
846 bool success, 868 bool success,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 host_.Call( 908 host_.Call(
887 FROM_HERE, 909 FROM_HERE,
888 &SyncBackendHost::NotifyPassphraseAccepted); 910 &SyncBackendHost::NotifyPassphraseAccepted);
889 } 911 }
890 912
891 void SyncBackendHost::Core::OnBootstrapTokenUpdated( 913 void SyncBackendHost::Core::OnBootstrapTokenUpdated(
892 const std::string& bootstrap_token) { 914 const std::string& bootstrap_token) {
893 if (!sync_loop_) 915 if (!sync_loop_)
894 return; 916 return;
895 DCHECK_EQ(MessageLoop::current(), sync_loop_); 917 DCHECK_EQ(MessageLoop::current(), sync_loop_);
896 host_.Call( 918 host_.Call(FROM_HERE,
897 FROM_HERE, 919 &SyncBackendHost::PersistEncryptionBootstrapToken,
898 &SyncBackendHost::PersistEncryptionBootstrapToken, bootstrap_token); 920 bootstrap_token,
921 PASSPHRASE_BOOTSTRAP_TOKEN);
899 } 922 }
900 923
901 void SyncBackendHost::Core::OnStopSyncingPermanently() { 924 void SyncBackendHost::Core::OnStopSyncingPermanently() {
902 if (!sync_loop_) 925 if (!sync_loop_)
903 return; 926 return;
904 DCHECK_EQ(MessageLoop::current(), sync_loop_); 927 DCHECK_EQ(MessageLoop::current(), sync_loop_);
905 host_.Call( 928 host_.Call(
906 FROM_HERE, 929 FROM_HERE,
907 &SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop); 930 &SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop);
908 } 931 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 BrowserThread::GetBlockingPool(), 1008 BrowserThread::GetBlockingPool(),
986 options.make_http_bridge_factory_fn.Run().Pass(), 1009 options.make_http_bridge_factory_fn.Run().Pass(),
987 options.workers, 1010 options.workers,
988 options.extensions_activity_monitor, 1011 options.extensions_activity_monitor,
989 options.registrar /* as SyncManager::ChangeDelegate */, 1012 options.registrar /* as SyncManager::ChangeDelegate */,
990 options.credentials, 1013 options.credentials,
991 scoped_ptr<syncer::SyncNotifier>(new BridgedSyncNotifier( 1014 scoped_ptr<syncer::SyncNotifier>(new BridgedSyncNotifier(
992 options.chrome_sync_notification_bridge, 1015 options.chrome_sync_notification_bridge,
993 options.sync_notifier_factory->CreateSyncNotifier())), 1016 options.sync_notifier_factory->CreateSyncNotifier())),
994 options.restored_key_for_bootstrapping, 1017 options.restored_key_for_bootstrapping,
1018 options.restored_keystore_key_for_bootstrapping,
995 CommandLine::ForCurrentProcess()->HasSwitch( 1019 CommandLine::ForCurrentProcess()->HasSwitch(
996 switches::kSyncKeystoreEncryption), 1020 switches::kSyncKeystoreEncryption),
997 scoped_ptr<InternalComponentsFactory>( 1021 scoped_ptr<InternalComponentsFactory>(
998 options.internal_components_factory), 1022 options.internal_components_factory),
999 &encryptor_, 1023 &encryptor_,
1000 options.unrecoverable_error_handler, 1024 options.unrecoverable_error_handler,
1001 options.report_unrecoverable_error_function); 1025 options.report_unrecoverable_error_function);
1002 LOG_IF(ERROR, !success) << "Syncapi initialization failed!"; 1026 LOG_IF(ERROR, !success) << "Syncapi initialization failed!";
1003 1027
1004 // Now check the command line to see if we need to simulate an 1028 // Now check the command line to see if we need to simulate an
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 frontend_->OnSyncCycleCompleted(); 1278 frontend_->OnSyncCycleCompleted();
1255 } 1279 }
1256 1280
1257 void SyncBackendHost::RetryConfigurationOnFrontendLoop( 1281 void SyncBackendHost::RetryConfigurationOnFrontendLoop(
1258 const base::Closure& retry_callback) { 1282 const base::Closure& retry_callback) {
1259 SDVLOG(1) << "Failed to complete configuration, informing of retry."; 1283 SDVLOG(1) << "Failed to complete configuration, informing of retry.";
1260 retry_callback.Run(); 1284 retry_callback.Run();
1261 } 1285 }
1262 1286
1263 void SyncBackendHost::PersistEncryptionBootstrapToken( 1287 void SyncBackendHost::PersistEncryptionBootstrapToken(
1264 const std::string& token) { 1288 const std::string& token,
1289 BootstrapTokenType token_type) {
1265 CHECK(sync_prefs_.get()); 1290 CHECK(sync_prefs_.get());
1266 sync_prefs_->SetEncryptionBootstrapToken(token); 1291 DCHECK(!token.empty());
1292 if (token_type == PASSPHRASE_BOOTSTRAP_TOKEN)
1293 sync_prefs_->SetEncryptionBootstrapToken(token);
1294 else
1295 sync_prefs_->SetKeystoreEncryptionBootstrapToken(token);
1267 } 1296 }
1268 1297
1269 void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop( 1298 void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop(
1270 const syncer::SyncProtocolError& sync_error) { 1299 const syncer::SyncProtocolError& sync_error) {
1271 if (!frontend_) 1300 if (!frontend_)
1272 return; 1301 return;
1273 DCHECK_EQ(MessageLoop::current(), frontend_loop_); 1302 DCHECK_EQ(MessageLoop::current(), frontend_loop_);
1274 frontend_->OnActionableError(sync_error); 1303 frontend_->OnActionableError(sync_error);
1275 } 1304 }
1276 1305
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 FROM_HERE, 1410 FROM_HERE,
1382 base::Bind(&SyncBackendHost::Core::DoRefreshNigori, 1411 base::Bind(&SyncBackendHost::Core::DoRefreshNigori,
1383 core_.get(), sync_thread_done_callback)); 1412 core_.get(), sync_thread_done_callback));
1384 } 1413 }
1385 1414
1386 #undef SDVLOG 1415 #undef SDVLOG
1387 1416
1388 #undef SLOG 1417 #undef SLOG
1389 1418
1390 } // namespace browser_sync 1419 } // namespace browser_sync
OLDNEW
« 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