OLD | NEW |
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 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 const std::string name_; | 265 const std::string name_; |
266 | 266 |
267 // Path of the folder that stores the sync data files. | 267 // Path of the folder that stores the sync data files. |
268 const base::FilePath sync_data_folder_path_; | 268 const base::FilePath sync_data_folder_path_; |
269 | 269 |
270 // Our parent SyncBackendHost. | 270 // Our parent SyncBackendHost. |
271 syncer::WeakHandle<SyncBackendHost> host_; | 271 syncer::WeakHandle<SyncBackendHost> host_; |
272 | 272 |
273 // The loop where all the sync backend operations happen. | 273 // The loop where all the sync backend operations happen. |
274 // Non-NULL only between calls to DoInitialize() and DoShutdown(). | 274 // Non-NULL only between calls to DoInitialize() and DoShutdown(). |
275 MessageLoop* sync_loop_; | 275 base::MessageLoop* sync_loop_; |
276 | 276 |
277 // Our parent's registrar (not owned). Non-NULL only between | 277 // Our parent's registrar (not owned). Non-NULL only between |
278 // calls to DoInitialize() and DoShutdown(). | 278 // calls to DoInitialize() and DoShutdown(). |
279 SyncBackendRegistrar* registrar_; | 279 SyncBackendRegistrar* registrar_; |
280 | 280 |
281 // The timer used to periodically call SaveChanges. | 281 // The timer used to periodically call SaveChanges. |
282 scoped_ptr<base::RepeatingTimer<Core> > save_changes_timer_; | 282 scoped_ptr<base::RepeatingTimer<Core> > save_changes_timer_; |
283 | 283 |
284 // Our encryptor, which uses Chrome's encryption functions. | 284 // Our encryptor, which uses Chrome's encryption functions. |
285 ChromeEncryptor encryptor_; | 285 ChromeEncryptor encryptor_; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 | 346 |
347 } // namespace | 347 } // namespace |
348 | 348 |
349 SyncBackendHost::SyncBackendHost( | 349 SyncBackendHost::SyncBackendHost( |
350 const std::string& name, | 350 const std::string& name, |
351 Profile* profile, | 351 Profile* profile, |
352 const base::WeakPtr<SyncPrefs>& sync_prefs, | 352 const base::WeakPtr<SyncPrefs>& sync_prefs, |
353 const base::WeakPtr<invalidation::InvalidatorStorage>& invalidator_storage) | 353 const base::WeakPtr<invalidation::InvalidatorStorage>& invalidator_storage) |
354 : weak_ptr_factory_(this), | 354 : weak_ptr_factory_(this), |
355 sync_thread_("Chrome_SyncThread"), | 355 sync_thread_("Chrome_SyncThread"), |
356 frontend_loop_(MessageLoop::current()), | 356 frontend_loop_(base::MessageLoop::current()), |
357 profile_(profile), | 357 profile_(profile), |
358 name_(name), | 358 name_(name), |
359 core_(new Core(name, profile_->GetPath().Append(kSyncDataFolderName), | 359 core_(new Core(name, profile_->GetPath().Append(kSyncDataFolderName), |
360 weak_ptr_factory_.GetWeakPtr())), | 360 weak_ptr_factory_.GetWeakPtr())), |
361 initialization_state_(NOT_ATTEMPTED), | 361 initialization_state_(NOT_ATTEMPTED), |
362 sync_prefs_(sync_prefs), | 362 sync_prefs_(sync_prefs), |
363 invalidator_factory_( | 363 invalidator_factory_( |
364 ParseNotifierOptions(*CommandLine::ForCurrentProcess(), | 364 ParseNotifierOptions(*CommandLine::ForCurrentProcess(), |
365 profile_->GetRequestContext()), | 365 profile_->GetRequestContext()), |
366 content::GetUserAgent(GURL()), | 366 content::GetUserAgent(GURL()), |
367 invalidator_storage), | 367 invalidator_storage), |
368 frontend_(NULL), | 368 frontend_(NULL), |
369 cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) { | 369 cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) { |
370 } | 370 } |
371 | 371 |
372 SyncBackendHost::SyncBackendHost(Profile* profile) | 372 SyncBackendHost::SyncBackendHost(Profile* profile) |
373 : weak_ptr_factory_(this), | 373 : weak_ptr_factory_(this), |
374 sync_thread_("Chrome_SyncThread"), | 374 sync_thread_("Chrome_SyncThread"), |
375 frontend_loop_(MessageLoop::current()), | 375 frontend_loop_(base::MessageLoop::current()), |
376 profile_(profile), | 376 profile_(profile), |
377 name_("Unknown"), | 377 name_("Unknown"), |
378 initialization_state_(NOT_ATTEMPTED), | 378 initialization_state_(NOT_ATTEMPTED), |
379 invalidator_factory_( | 379 invalidator_factory_( |
380 ParseNotifierOptions(*CommandLine::ForCurrentProcess(), | 380 ParseNotifierOptions(*CommandLine::ForCurrentProcess(), |
381 profile_->GetRequestContext()), | 381 profile_->GetRequestContext()), |
382 content::GetUserAgent(GURL()), | 382 content::GetUserAgent(GURL()), |
383 base::WeakPtr<syncer::InvalidationStateTracker>()), | 383 base::WeakPtr<syncer::InvalidationStateTracker>()), |
384 frontend_(NULL), | 384 frontend_(NULL), |
385 cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) { | 385 cached_passphrase_type_(syncer::IMPLICIT_PASSPHRASE) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 | 471 |
472 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) { | 472 void SyncBackendHost::UpdateCredentials(const SyncCredentials& credentials) { |
473 DCHECK(sync_thread_.IsRunning()); | 473 DCHECK(sync_thread_.IsRunning()); |
474 sync_thread_.message_loop()->PostTask(FROM_HERE, | 474 sync_thread_.message_loop()->PostTask(FROM_HERE, |
475 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(), | 475 base::Bind(&SyncBackendHost::Core::DoUpdateCredentials, core_.get(), |
476 credentials)); | 476 credentials)); |
477 } | 477 } |
478 | 478 |
479 void SyncBackendHost::UpdateRegisteredInvalidationIds( | 479 void SyncBackendHost::UpdateRegisteredInvalidationIds( |
480 const syncer::ObjectIdSet& ids) { | 480 const syncer::ObjectIdSet& ids) { |
481 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 481 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
482 DCHECK(sync_thread_.IsRunning()); | 482 DCHECK(sync_thread_.IsRunning()); |
483 sync_thread_.message_loop()->PostTask(FROM_HERE, | 483 sync_thread_.message_loop()->PostTask(FROM_HERE, |
484 base::Bind(&SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds, | 484 base::Bind(&SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds, |
485 core_.get(), ids)); | 485 core_.get(), ids)); |
486 } | 486 } |
487 | 487 |
488 void SyncBackendHost::AcknowledgeInvalidation( | 488 void SyncBackendHost::AcknowledgeInvalidation( |
489 const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) { | 489 const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) { |
490 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 490 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
491 DCHECK(sync_thread_.IsRunning()); | 491 DCHECK(sync_thread_.IsRunning()); |
492 sync_thread_.message_loop()->PostTask(FROM_HERE, | 492 sync_thread_.message_loop()->PostTask(FROM_HERE, |
493 base::Bind(&SyncBackendHost::Core::DoAcknowledgeInvalidation, | 493 base::Bind(&SyncBackendHost::Core::DoAcknowledgeInvalidation, |
494 core_.get(), id, ack_handle)); | 494 core_.get(), id, ack_handle)); |
495 } | 495 } |
496 | 496 |
497 void SyncBackendHost::StartSyncingWithServer() { | 497 void SyncBackendHost::StartSyncingWithServer() { |
498 SDVLOG(1) << "SyncBackendHost::StartSyncingWithServer called."; | 498 SDVLOG(1) << "SyncBackendHost::StartSyncingWithServer called."; |
499 | 499 |
500 syncer::ModelSafeRoutingInfo routing_info; | 500 syncer::ModelSafeRoutingInfo routing_info; |
(...skipping 10 matching lines...) Expand all Loading... |
511 if (!IsNigoriEnabled()) { | 511 if (!IsNigoriEnabled()) { |
512 NOTREACHED() << "SetEncryptionPassphrase must never be called when nigori" | 512 NOTREACHED() << "SetEncryptionPassphrase must never be called when nigori" |
513 " is disabled."; | 513 " is disabled."; |
514 return; | 514 return; |
515 } | 515 } |
516 | 516 |
517 // We should never be called with an empty passphrase. | 517 // We should never be called with an empty passphrase. |
518 DCHECK(!passphrase.empty()); | 518 DCHECK(!passphrase.empty()); |
519 | 519 |
520 // This should only be called by the frontend. | 520 // This should only be called by the frontend. |
521 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 521 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
522 | 522 |
523 // SetEncryptionPassphrase should never be called if we are currently | 523 // SetEncryptionPassphrase should never be called if we are currently |
524 // encrypted with an explicit passphrase. | 524 // encrypted with an explicit passphrase. |
525 DCHECK(cached_passphrase_type_ == syncer::KEYSTORE_PASSPHRASE || | 525 DCHECK(cached_passphrase_type_ == syncer::KEYSTORE_PASSPHRASE || |
526 cached_passphrase_type_ == syncer::IMPLICIT_PASSPHRASE); | 526 cached_passphrase_type_ == syncer::IMPLICIT_PASSPHRASE); |
527 | 527 |
528 // Post an encryption task on the syncer thread. | 528 // Post an encryption task on the syncer thread. |
529 sync_thread_.message_loop()->PostTask(FROM_HERE, | 529 sync_thread_.message_loop()->PostTask(FROM_HERE, |
530 base::Bind(&SyncBackendHost::Core::DoSetEncryptionPassphrase, core_.get(), | 530 base::Bind(&SyncBackendHost::Core::DoSetEncryptionPassphrase, core_.get(), |
531 passphrase, is_explicit)); | 531 passphrase, is_explicit)); |
532 } | 532 } |
533 | 533 |
534 bool SyncBackendHost::SetDecryptionPassphrase(const std::string& passphrase) { | 534 bool SyncBackendHost::SetDecryptionPassphrase(const std::string& passphrase) { |
535 if (!IsNigoriEnabled()) { | 535 if (!IsNigoriEnabled()) { |
536 NOTREACHED() << "SetDecryptionPassphrase must never be called when nigori" | 536 NOTREACHED() << "SetDecryptionPassphrase must never be called when nigori" |
537 " is disabled."; | 537 " is disabled."; |
538 return false; | 538 return false; |
539 } | 539 } |
540 | 540 |
541 // We should never be called with an empty passphrase. | 541 // We should never be called with an empty passphrase. |
542 DCHECK(!passphrase.empty()); | 542 DCHECK(!passphrase.empty()); |
543 | 543 |
544 // This should only be called by the frontend. | 544 // This should only be called by the frontend. |
545 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 545 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
546 | 546 |
547 // This should only be called when we have cached pending keys. | 547 // This should only be called when we have cached pending keys. |
548 DCHECK(cached_pending_keys_.has_blob()); | 548 DCHECK(cached_pending_keys_.has_blob()); |
549 | 549 |
550 // Check the passphrase that was provided against our local cache of the | 550 // Check the passphrase that was provided against our local cache of the |
551 // cryptographer's pending keys. If this was unsuccessful, the UI layer can | 551 // cryptographer's pending keys. If this was unsuccessful, the UI layer can |
552 // immediately call OnPassphraseRequired without showing the user a spinner. | 552 // immediately call OnPassphraseRequired without showing the user a spinner. |
553 if (!CheckPassphraseAgainstCachedPendingKeys(passphrase)) | 553 if (!CheckPassphraseAgainstCachedPendingKeys(passphrase)) |
554 return false; | 554 return false; |
555 | 555 |
(...skipping 28 matching lines...) Expand all Loading... |
584 base::Bind( | 584 base::Bind( |
585 &SyncBackendHost::Core::DoStopSyncManagerForShutdown, | 585 &SyncBackendHost::Core::DoStopSyncManagerForShutdown, |
586 core_.get(), | 586 core_.get(), |
587 closure)); | 587 closure)); |
588 } else { | 588 } else { |
589 core_->DoStopSyncManagerForShutdown(closure); | 589 core_->DoStopSyncManagerForShutdown(closure); |
590 } | 590 } |
591 } | 591 } |
592 | 592 |
593 void SyncBackendHost::StopSyncingForShutdown() { | 593 void SyncBackendHost::StopSyncingForShutdown() { |
594 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 594 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
595 | 595 |
596 // Immediately stop sending messages to the frontend. | 596 // Immediately stop sending messages to the frontend. |
597 frontend_ = NULL; | 597 frontend_ = NULL; |
598 | 598 |
599 // Stop listening for and forwarding locally-triggered sync refresh requests. | 599 // Stop listening for and forwarding locally-triggered sync refresh requests. |
600 notification_registrar_.RemoveAll(); | 600 notification_registrar_.RemoveAll(); |
601 | 601 |
602 // Thread shutdown should occur in the following order: | 602 // Thread shutdown should occur in the following order: |
603 // - Sync Thread | 603 // - Sync Thread |
604 // - UI Thread (stops some time after we return from this call). | 604 // - UI Thread (stops some time after we return from this call). |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 retry_callback)); | 841 retry_callback)); |
842 } | 842 } |
843 | 843 |
844 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop( | 844 void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop( |
845 const syncer::ModelTypeSet succeeded_configuration_types, | 845 const syncer::ModelTypeSet succeeded_configuration_types, |
846 const syncer::ModelTypeSet failed_configuration_types, | 846 const syncer::ModelTypeSet failed_configuration_types, |
847 const base::Callback<void(syncer::ModelTypeSet, | 847 const base::Callback<void(syncer::ModelTypeSet, |
848 syncer::ModelTypeSet)>& ready_task) { | 848 syncer::ModelTypeSet)>& ready_task) { |
849 if (!frontend_) | 849 if (!frontend_) |
850 return; | 850 return; |
851 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 851 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
852 if (!ready_task.is_null()) | 852 if (!ready_task.is_null()) |
853 ready_task.Run(succeeded_configuration_types, failed_configuration_types); | 853 ready_task.Run(succeeded_configuration_types, failed_configuration_types); |
854 } | 854 } |
855 | 855 |
856 void SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop( | 856 void SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop( |
857 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 857 const syncer::WeakHandle<syncer::JsBackend>& js_backend, |
858 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 858 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& |
859 debug_info_listener, | 859 debug_info_listener, |
860 syncer::ModelTypeSet restored_types) { | 860 syncer::ModelTypeSet restored_types) { |
861 DCHECK_EQ(initialization_state_, CREATING_SYNC_MANAGER); | 861 DCHECK_EQ(initialization_state_, CREATING_SYNC_MANAGER); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 state_details(details); | 899 state_details(details); |
900 const syncer::ModelTypeInvalidationMap& invalidation_map = | 900 const syncer::ModelTypeInvalidationMap& invalidation_map = |
901 *(state_details.ptr()); | 901 *(state_details.ptr()); |
902 const syncer::ModelTypeSet types = | 902 const syncer::ModelTypeSet types = |
903 ModelTypeInvalidationMapToSet(invalidation_map); | 903 ModelTypeInvalidationMapToSet(invalidation_map); |
904 sync_thread_.message_loop()->PostTask(FROM_HERE, | 904 sync_thread_.message_loop()->PostTask(FROM_HERE, |
905 base::Bind(&SyncBackendHost::Core::DoRefreshTypes, core_.get(), types)); | 905 base::Bind(&SyncBackendHost::Core::DoRefreshTypes, core_.get(), types)); |
906 } | 906 } |
907 | 907 |
908 SyncBackendHost::DoInitializeOptions::DoInitializeOptions( | 908 SyncBackendHost::DoInitializeOptions::DoInitializeOptions( |
909 MessageLoop* sync_loop, | 909 base::MessageLoop* sync_loop, |
910 SyncBackendRegistrar* registrar, | 910 SyncBackendRegistrar* registrar, |
911 const syncer::ModelSafeRoutingInfo& routing_info, | 911 const syncer::ModelSafeRoutingInfo& routing_info, |
912 const std::vector<syncer::ModelSafeWorker*>& workers, | 912 const std::vector<syncer::ModelSafeWorker*>& workers, |
913 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, | 913 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, |
914 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, | 914 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, |
915 const GURL& service_url, | 915 const GURL& service_url, |
916 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn, | 916 MakeHttpBridgeFactoryFn make_http_bridge_factory_fn, |
917 const syncer::SyncCredentials& credentials, | 917 const syncer::SyncCredentials& credentials, |
918 AndroidInvalidatorBridge* android_invalidator_bridge, | 918 AndroidInvalidatorBridge* android_invalidator_bridge, |
919 syncer::InvalidatorFactory* invalidator_factory, | 919 syncer::InvalidatorFactory* invalidator_factory, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 | 963 |
964 SyncBackendHost::Core::~Core() { | 964 SyncBackendHost::Core::~Core() { |
965 DCHECK(!sync_manager_.get()); | 965 DCHECK(!sync_manager_.get()); |
966 DCHECK(!sync_loop_); | 966 DCHECK(!sync_loop_); |
967 } | 967 } |
968 | 968 |
969 void SyncBackendHost::Core::OnSyncCycleCompleted( | 969 void SyncBackendHost::Core::OnSyncCycleCompleted( |
970 const SyncSessionSnapshot& snapshot) { | 970 const SyncSessionSnapshot& snapshot) { |
971 if (!sync_loop_) | 971 if (!sync_loop_) |
972 return; | 972 return; |
973 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 973 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
974 | 974 |
975 host_.Call( | 975 host_.Call( |
976 FROM_HERE, | 976 FROM_HERE, |
977 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop, | 977 &SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop, |
978 snapshot); | 978 snapshot); |
979 } | 979 } |
980 | 980 |
981 void SyncBackendHost::Core::DoDownloadControlTypes( | 981 void SyncBackendHost::Core::DoDownloadControlTypes( |
982 syncer::ConfigureReason reason) { | 982 syncer::ConfigureReason reason) { |
983 syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( | 983 syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( |
984 syncer::ControlTypes(), syncer::ModelTypeSet()); | 984 syncer::ControlTypes(), syncer::ModelTypeSet()); |
985 syncer::ModelSafeRoutingInfo routing_info; | 985 syncer::ModelSafeRoutingInfo routing_info; |
986 registrar_->GetModelSafeRoutingInfo(&routing_info); | 986 registrar_->GetModelSafeRoutingInfo(&routing_info); |
987 SDVLOG(1) << "Control Types " | 987 SDVLOG(1) << "Control Types " |
988 << syncer::ModelTypeSetToString(new_control_types) | 988 << syncer::ModelTypeSetToString(new_control_types) |
989 << " added; calling DoConfigureSyncer"; | 989 << " added; calling DoConfigureSyncer"; |
990 | 990 |
991 sync_manager_->ConfigureSyncer( | 991 sync_manager_->ConfigureSyncer( |
992 reason, | 992 reason, |
993 new_control_types, | 993 new_control_types, |
994 syncer::ModelTypeSet(), | 994 syncer::ModelTypeSet(), |
995 routing_info, | 995 routing_info, |
996 base::Bind(&SyncBackendHost::Core::DoInitialProcessControlTypes, | 996 base::Bind(&SyncBackendHost::Core::DoInitialProcessControlTypes, |
997 this), | 997 this), |
998 base::Bind(&SyncBackendHost::Core::OnControlTypesDownloadRetry, | 998 base::Bind(&SyncBackendHost::Core::OnControlTypesDownloadRetry, |
999 this)); | 999 this)); |
1000 } | 1000 } |
1001 | 1001 |
1002 void SyncBackendHost::Core::DoRefreshTypes(syncer::ModelTypeSet types) { | 1002 void SyncBackendHost::Core::DoRefreshTypes(syncer::ModelTypeSet types) { |
1003 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1003 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1004 sync_manager_->RefreshTypes(types); | 1004 sync_manager_->RefreshTypes(types); |
1005 } | 1005 } |
1006 | 1006 |
1007 void SyncBackendHost::Core::OnControlTypesDownloadRetry() { | 1007 void SyncBackendHost::Core::OnControlTypesDownloadRetry() { |
1008 host_.Call(FROM_HERE, | 1008 host_.Call(FROM_HERE, |
1009 &SyncBackendHost::HandleControlTypesDownloadRetry); | 1009 &SyncBackendHost::HandleControlTypesDownloadRetry); |
1010 } | 1010 } |
1011 | 1011 |
1012 void SyncBackendHost::Core::OnInitializationComplete( | 1012 void SyncBackendHost::Core::OnInitializationComplete( |
1013 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 1013 const syncer::WeakHandle<syncer::JsBackend>& js_backend, |
1014 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 1014 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& |
1015 debug_info_listener, | 1015 debug_info_listener, |
1016 bool success, | 1016 bool success, |
1017 const syncer::ModelTypeSet restored_types) { | 1017 const syncer::ModelTypeSet restored_types) { |
1018 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1018 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1019 | 1019 |
1020 if (!success) { | 1020 if (!success) { |
1021 DoDestroySyncManager(); | 1021 DoDestroySyncManager(); |
1022 host_.Call(FROM_HERE, | 1022 host_.Call(FROM_HERE, |
1023 &SyncBackendHost::HandleInitializationCompletedOnFrontendLoop, | 1023 &SyncBackendHost::HandleInitializationCompletedOnFrontendLoop, |
1024 false); | 1024 false); |
1025 return; | 1025 return; |
1026 } | 1026 } |
1027 | 1027 |
1028 // Register for encryption related changes now. We have to do this before | 1028 // Register for encryption related changes now. We have to do this before |
(...skipping 11 matching lines...) Expand all Loading... |
1040 &SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop, | 1040 &SyncBackendHost::HandleSyncManagerInitializationOnFrontendLoop, |
1041 js_backend, | 1041 js_backend, |
1042 debug_info_listener, | 1042 debug_info_listener, |
1043 restored_types); | 1043 restored_types); |
1044 } | 1044 } |
1045 | 1045 |
1046 void SyncBackendHost::Core::OnConnectionStatusChange( | 1046 void SyncBackendHost::Core::OnConnectionStatusChange( |
1047 syncer::ConnectionStatus status) { | 1047 syncer::ConnectionStatus status) { |
1048 if (!sync_loop_) | 1048 if (!sync_loop_) |
1049 return; | 1049 return; |
1050 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1050 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1051 host_.Call( | 1051 host_.Call( |
1052 FROM_HERE, | 1052 FROM_HERE, |
1053 &SyncBackendHost::HandleConnectionStatusChangeOnFrontendLoop, status); | 1053 &SyncBackendHost::HandleConnectionStatusChangeOnFrontendLoop, status); |
1054 } | 1054 } |
1055 | 1055 |
1056 void SyncBackendHost::Core::OnPassphraseRequired( | 1056 void SyncBackendHost::Core::OnPassphraseRequired( |
1057 syncer::PassphraseRequiredReason reason, | 1057 syncer::PassphraseRequiredReason reason, |
1058 const sync_pb::EncryptedData& pending_keys) { | 1058 const sync_pb::EncryptedData& pending_keys) { |
1059 if (!sync_loop_) | 1059 if (!sync_loop_) |
1060 return; | 1060 return; |
1061 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1061 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1062 host_.Call( | 1062 host_.Call( |
1063 FROM_HERE, | 1063 FROM_HERE, |
1064 &SyncBackendHost::NotifyPassphraseRequired, reason, pending_keys); | 1064 &SyncBackendHost::NotifyPassphraseRequired, reason, pending_keys); |
1065 } | 1065 } |
1066 | 1066 |
1067 void SyncBackendHost::Core::OnPassphraseAccepted() { | 1067 void SyncBackendHost::Core::OnPassphraseAccepted() { |
1068 if (!sync_loop_) | 1068 if (!sync_loop_) |
1069 return; | 1069 return; |
1070 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1070 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1071 host_.Call( | 1071 host_.Call( |
1072 FROM_HERE, | 1072 FROM_HERE, |
1073 &SyncBackendHost::NotifyPassphraseAccepted); | 1073 &SyncBackendHost::NotifyPassphraseAccepted); |
1074 } | 1074 } |
1075 | 1075 |
1076 void SyncBackendHost::Core::OnBootstrapTokenUpdated( | 1076 void SyncBackendHost::Core::OnBootstrapTokenUpdated( |
1077 const std::string& bootstrap_token, | 1077 const std::string& bootstrap_token, |
1078 syncer::BootstrapTokenType type) { | 1078 syncer::BootstrapTokenType type) { |
1079 if (!sync_loop_) | 1079 if (!sync_loop_) |
1080 return; | 1080 return; |
1081 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1081 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1082 host_.Call(FROM_HERE, | 1082 host_.Call(FROM_HERE, |
1083 &SyncBackendHost::PersistEncryptionBootstrapToken, | 1083 &SyncBackendHost::PersistEncryptionBootstrapToken, |
1084 bootstrap_token, | 1084 bootstrap_token, |
1085 type); | 1085 type); |
1086 } | 1086 } |
1087 | 1087 |
1088 void SyncBackendHost::Core::OnStopSyncingPermanently() { | 1088 void SyncBackendHost::Core::OnStopSyncingPermanently() { |
1089 if (!sync_loop_) | 1089 if (!sync_loop_) |
1090 return; | 1090 return; |
1091 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1091 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1092 host_.Call( | 1092 host_.Call( |
1093 FROM_HERE, | 1093 FROM_HERE, |
1094 &SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop); | 1094 &SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop); |
1095 } | 1095 } |
1096 | 1096 |
1097 void SyncBackendHost::Core::OnUpdatedToken(const std::string& token) { | 1097 void SyncBackendHost::Core::OnUpdatedToken(const std::string& token) { |
1098 if (!sync_loop_) | 1098 if (!sync_loop_) |
1099 return; | 1099 return; |
1100 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1100 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1101 host_.Call( | 1101 host_.Call( |
1102 FROM_HERE, | 1102 FROM_HERE, |
1103 &SyncBackendHost::NotifyUpdatedToken, token); | 1103 &SyncBackendHost::NotifyUpdatedToken, token); |
1104 } | 1104 } |
1105 | 1105 |
1106 void SyncBackendHost::Core::OnEncryptedTypesChanged( | 1106 void SyncBackendHost::Core::OnEncryptedTypesChanged( |
1107 syncer::ModelTypeSet encrypted_types, | 1107 syncer::ModelTypeSet encrypted_types, |
1108 bool encrypt_everything) { | 1108 bool encrypt_everything) { |
1109 if (!sync_loop_) | 1109 if (!sync_loop_) |
1110 return; | 1110 return; |
1111 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1111 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1112 // NOTE: We're in a transaction. | 1112 // NOTE: We're in a transaction. |
1113 host_.Call( | 1113 host_.Call( |
1114 FROM_HERE, | 1114 FROM_HERE, |
1115 &SyncBackendHost::NotifyEncryptedTypesChanged, | 1115 &SyncBackendHost::NotifyEncryptedTypesChanged, |
1116 encrypted_types, encrypt_everything); | 1116 encrypted_types, encrypt_everything); |
1117 } | 1117 } |
1118 | 1118 |
1119 void SyncBackendHost::Core::OnEncryptionComplete() { | 1119 void SyncBackendHost::Core::OnEncryptionComplete() { |
1120 if (!sync_loop_) | 1120 if (!sync_loop_) |
1121 return; | 1121 return; |
1122 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1122 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1123 // NOTE: We're in a transaction. | 1123 // NOTE: We're in a transaction. |
1124 host_.Call( | 1124 host_.Call( |
1125 FROM_HERE, | 1125 FROM_HERE, |
1126 &SyncBackendHost::NotifyEncryptionComplete); | 1126 &SyncBackendHost::NotifyEncryptionComplete); |
1127 } | 1127 } |
1128 | 1128 |
1129 void SyncBackendHost::Core::OnCryptographerStateChanged( | 1129 void SyncBackendHost::Core::OnCryptographerStateChanged( |
1130 syncer::Cryptographer* cryptographer) { | 1130 syncer::Cryptographer* cryptographer) { |
1131 // Do nothing. | 1131 // Do nothing. |
1132 } | 1132 } |
1133 | 1133 |
1134 void SyncBackendHost::Core::OnPassphraseTypeChanged( | 1134 void SyncBackendHost::Core::OnPassphraseTypeChanged( |
1135 syncer::PassphraseType type, base::Time passphrase_time) { | 1135 syncer::PassphraseType type, base::Time passphrase_time) { |
1136 host_.Call( | 1136 host_.Call( |
1137 FROM_HERE, | 1137 FROM_HERE, |
1138 &SyncBackendHost::HandlePassphraseTypeChangedOnFrontendLoop, | 1138 &SyncBackendHost::HandlePassphraseTypeChangedOnFrontendLoop, |
1139 type, passphrase_time); | 1139 type, passphrase_time); |
1140 } | 1140 } |
1141 | 1141 |
1142 void SyncBackendHost::Core::OnActionableError( | 1142 void SyncBackendHost::Core::OnActionableError( |
1143 const syncer::SyncProtocolError& sync_error) { | 1143 const syncer::SyncProtocolError& sync_error) { |
1144 if (!sync_loop_) | 1144 if (!sync_loop_) |
1145 return; | 1145 return; |
1146 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1146 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1147 host_.Call( | 1147 host_.Call( |
1148 FROM_HERE, | 1148 FROM_HERE, |
1149 &SyncBackendHost::HandleActionableErrorEventOnFrontendLoop, | 1149 &SyncBackendHost::HandleActionableErrorEventOnFrontendLoop, |
1150 sync_error); | 1150 sync_error); |
1151 } | 1151 } |
1152 | 1152 |
1153 void SyncBackendHost::Core::OnInvalidatorStateChange( | 1153 void SyncBackendHost::Core::OnInvalidatorStateChange( |
1154 syncer::InvalidatorState state) { | 1154 syncer::InvalidatorState state) { |
1155 if (!sync_loop_) | 1155 if (!sync_loop_) |
1156 return; | 1156 return; |
1157 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1157 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1158 host_.Call(FROM_HERE, | 1158 host_.Call(FROM_HERE, |
1159 &SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop, | 1159 &SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop, |
1160 state); | 1160 state); |
1161 } | 1161 } |
1162 | 1162 |
1163 void SyncBackendHost::Core::OnIncomingInvalidation( | 1163 void SyncBackendHost::Core::OnIncomingInvalidation( |
1164 const syncer::ObjectIdInvalidationMap& invalidation_map) { | 1164 const syncer::ObjectIdInvalidationMap& invalidation_map) { |
1165 if (!sync_loop_) | 1165 if (!sync_loop_) |
1166 return; | 1166 return; |
1167 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1167 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1168 host_.Call(FROM_HERE, | 1168 host_.Call(FROM_HERE, |
1169 &SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop, | 1169 &SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop, |
1170 invalidation_map); | 1170 invalidation_map); |
1171 } | 1171 } |
1172 | 1172 |
1173 void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) { | 1173 void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) { |
1174 DCHECK(!sync_loop_); | 1174 DCHECK(!sync_loop_); |
1175 sync_loop_ = options.sync_loop; | 1175 sync_loop_ = options.sync_loop; |
1176 DCHECK(sync_loop_); | 1176 DCHECK(sync_loop_); |
1177 | 1177 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 // would be encountered. | 1237 // would be encountered. |
1238 if (CommandLine::ForCurrentProcess()->HasSwitch( | 1238 if (CommandLine::ForCurrentProcess()->HasSwitch( |
1239 switches::kSyncThrowUnrecoverableError)) { | 1239 switches::kSyncThrowUnrecoverableError)) { |
1240 sync_manager_->ThrowUnrecoverableError(); | 1240 sync_manager_->ThrowUnrecoverableError(); |
1241 } | 1241 } |
1242 } | 1242 } |
1243 } | 1243 } |
1244 | 1244 |
1245 void SyncBackendHost::Core::DoUpdateCredentials( | 1245 void SyncBackendHost::Core::DoUpdateCredentials( |
1246 const SyncCredentials& credentials) { | 1246 const SyncCredentials& credentials) { |
1247 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1247 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1248 // UpdateCredentials can be called during backend initialization, possibly | 1248 // UpdateCredentials can be called during backend initialization, possibly |
1249 // when backend initialization has failed but hasn't notified the UI thread | 1249 // when backend initialization has failed but hasn't notified the UI thread |
1250 // yet. In that case, the sync manager may have been destroyed on the sync | 1250 // yet. In that case, the sync manager may have been destroyed on the sync |
1251 // thread before this task was executed, so we do nothing. | 1251 // thread before this task was executed, so we do nothing. |
1252 if (sync_manager_) { | 1252 if (sync_manager_) { |
1253 sync_manager_->UpdateCredentials(credentials); | 1253 sync_manager_->UpdateCredentials(credentials); |
1254 } | 1254 } |
1255 } | 1255 } |
1256 | 1256 |
1257 void SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds( | 1257 void SyncBackendHost::Core::DoUpdateRegisteredInvalidationIds( |
1258 const syncer::ObjectIdSet& ids) { | 1258 const syncer::ObjectIdSet& ids) { |
1259 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1259 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1260 // |sync_manager_| may end up being NULL here in tests (in | 1260 // |sync_manager_| may end up being NULL here in tests (in |
1261 // synchronous initialization mode) since this is called during | 1261 // synchronous initialization mode) since this is called during |
1262 // shutdown. | 1262 // shutdown. |
1263 // | 1263 // |
1264 // TODO(akalin): Fix this behavior (see http://crbug.com/140354). | 1264 // TODO(akalin): Fix this behavior (see http://crbug.com/140354). |
1265 if (sync_manager_) { | 1265 if (sync_manager_) { |
1266 sync_manager_->UpdateRegisteredInvalidationIds(this, ids); | 1266 sync_manager_->UpdateRegisteredInvalidationIds(this, ids); |
1267 } | 1267 } |
1268 } | 1268 } |
1269 | 1269 |
1270 void SyncBackendHost::Core::DoAcknowledgeInvalidation( | 1270 void SyncBackendHost::Core::DoAcknowledgeInvalidation( |
1271 const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) { | 1271 const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) { |
1272 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1272 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1273 // |sync_manager_| may end up being NULL here in tests (in | 1273 // |sync_manager_| may end up being NULL here in tests (in |
1274 // synchronous initialization mode). | 1274 // synchronous initialization mode). |
1275 // | 1275 // |
1276 // TODO(akalin): Fix this behavior (see http://crbug.com/140354). | 1276 // TODO(akalin): Fix this behavior (see http://crbug.com/140354). |
1277 if (sync_manager_) { | 1277 if (sync_manager_) { |
1278 sync_manager_->AcknowledgeInvalidation(id, ack_handle); | 1278 sync_manager_->AcknowledgeInvalidation(id, ack_handle); |
1279 } | 1279 } |
1280 } | 1280 } |
1281 | 1281 |
1282 void SyncBackendHost::Core::DoStartSyncing( | 1282 void SyncBackendHost::Core::DoStartSyncing( |
1283 const syncer::ModelSafeRoutingInfo& routing_info) { | 1283 const syncer::ModelSafeRoutingInfo& routing_info) { |
1284 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1284 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1285 sync_manager_->StartSyncingNormally(routing_info); | 1285 sync_manager_->StartSyncingNormally(routing_info); |
1286 } | 1286 } |
1287 | 1287 |
1288 void SyncBackendHost::Core::DoSetEncryptionPassphrase( | 1288 void SyncBackendHost::Core::DoSetEncryptionPassphrase( |
1289 const std::string& passphrase, | 1289 const std::string& passphrase, |
1290 bool is_explicit) { | 1290 bool is_explicit) { |
1291 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1291 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1292 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase( | 1292 sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase( |
1293 passphrase, is_explicit); | 1293 passphrase, is_explicit); |
1294 } | 1294 } |
1295 | 1295 |
1296 void SyncBackendHost::Core::DoInitialProcessControlTypes() { | 1296 void SyncBackendHost::Core::DoInitialProcessControlTypes() { |
1297 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1297 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1298 | 1298 |
1299 DVLOG(1) << "Initilalizing Control Types"; | 1299 DVLOG(1) << "Initilalizing Control Types"; |
1300 | 1300 |
1301 // Initialize encryption. | 1301 // Initialize encryption. |
1302 sync_manager_->GetEncryptionHandler()->Init(); | 1302 sync_manager_->GetEncryptionHandler()->Init(); |
1303 | 1303 |
1304 // Note: experiments are currently handled via SBH::AddExperimentalTypes, | 1304 // Note: experiments are currently handled via SBH::AddExperimentalTypes, |
1305 // which is called at the end of every sync cycle. | 1305 // which is called at the end of every sync cycle. |
1306 // TODO(zea): eventually add an experiment handler and initialize it here. | 1306 // TODO(zea): eventually add an experiment handler and initialize it here. |
1307 | 1307 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 sync_manager_->GetUserShare()); | 1340 sync_manager_->GetUserShare()); |
1341 | 1341 |
1342 host_.Call( | 1342 host_.Call( |
1343 FROM_HERE, | 1343 FROM_HERE, |
1344 &SyncBackendHost::HandleInitializationCompletedOnFrontendLoop, | 1344 &SyncBackendHost::HandleInitializationCompletedOnFrontendLoop, |
1345 true); | 1345 true); |
1346 } | 1346 } |
1347 | 1347 |
1348 void SyncBackendHost::Core::DoSetDecryptionPassphrase( | 1348 void SyncBackendHost::Core::DoSetDecryptionPassphrase( |
1349 const std::string& passphrase) { | 1349 const std::string& passphrase) { |
1350 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1350 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1351 sync_manager_->GetEncryptionHandler()->SetDecryptionPassphrase( | 1351 sync_manager_->GetEncryptionHandler()->SetDecryptionPassphrase( |
1352 passphrase); | 1352 passphrase); |
1353 } | 1353 } |
1354 | 1354 |
1355 void SyncBackendHost::Core::DoEnableEncryptEverything() { | 1355 void SyncBackendHost::Core::DoEnableEncryptEverything() { |
1356 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1356 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1357 sync_manager_->GetEncryptionHandler()->EnableEncryptEverything(); | 1357 sync_manager_->GetEncryptionHandler()->EnableEncryptEverything(); |
1358 } | 1358 } |
1359 | 1359 |
1360 void SyncBackendHost::Core::DoStopSyncManagerForShutdown( | 1360 void SyncBackendHost::Core::DoStopSyncManagerForShutdown( |
1361 const base::Closure& closure) { | 1361 const base::Closure& closure) { |
1362 if (sync_manager_) { | 1362 if (sync_manager_) { |
1363 sync_manager_->StopSyncingForShutdown(closure); | 1363 sync_manager_->StopSyncingForShutdown(closure); |
1364 } else { | 1364 } else { |
1365 sync_loop_->PostTask(FROM_HERE, closure); | 1365 sync_loop_->PostTask(FROM_HERE, closure); |
1366 } | 1366 } |
1367 } | 1367 } |
1368 | 1368 |
1369 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) { | 1369 void SyncBackendHost::Core::DoShutdown(bool sync_disabled) { |
1370 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1370 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1371 // It's safe to do this even if the type was never activated. | 1371 // It's safe to do this even if the type was never activated. |
1372 registrar_->DeactivateDataType(syncer::DEVICE_INFO); | 1372 registrar_->DeactivateDataType(syncer::DEVICE_INFO); |
1373 synced_device_tracker_.reset(); | 1373 synced_device_tracker_.reset(); |
1374 | 1374 |
1375 DoDestroySyncManager(); | 1375 DoDestroySyncManager(); |
1376 | 1376 |
1377 registrar_ = NULL; | 1377 registrar_ = NULL; |
1378 | 1378 |
1379 if (sync_disabled) | 1379 if (sync_disabled) |
1380 DeleteSyncDataFolder(); | 1380 DeleteSyncDataFolder(); |
1381 | 1381 |
1382 sync_loop_ = NULL; | 1382 sync_loop_ = NULL; |
1383 | 1383 |
1384 host_.Reset(); | 1384 host_.Reset(); |
1385 } | 1385 } |
1386 | 1386 |
1387 void SyncBackendHost::Core::DoDestroySyncManager() { | 1387 void SyncBackendHost::Core::DoDestroySyncManager() { |
1388 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1388 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1389 if (sync_manager_) { | 1389 if (sync_manager_) { |
1390 save_changes_timer_.reset(); | 1390 save_changes_timer_.reset(); |
1391 if (registered_as_invalidation_handler_) { | 1391 if (registered_as_invalidation_handler_) { |
1392 sync_manager_->UnregisterInvalidationHandler(this); | 1392 sync_manager_->UnregisterInvalidationHandler(this); |
1393 registered_as_invalidation_handler_ = false; | 1393 registered_as_invalidation_handler_ = false; |
1394 } | 1394 } |
1395 sync_manager_->RemoveObserver(this); | 1395 sync_manager_->RemoveObserver(this); |
1396 sync_manager_->ShutdownOnSyncThread(); | 1396 sync_manager_->ShutdownOnSyncThread(); |
1397 sync_manager_.reset(); | 1397 sync_manager_.reset(); |
1398 } | 1398 } |
1399 } | 1399 } |
1400 | 1400 |
1401 void SyncBackendHost::Core::DoConfigureSyncer( | 1401 void SyncBackendHost::Core::DoConfigureSyncer( |
1402 syncer::ConfigureReason reason, | 1402 syncer::ConfigureReason reason, |
1403 syncer::ModelTypeSet types_to_config, | 1403 syncer::ModelTypeSet types_to_config, |
1404 syncer::ModelTypeSet failed_types, | 1404 syncer::ModelTypeSet failed_types, |
1405 const syncer::ModelSafeRoutingInfo routing_info, | 1405 const syncer::ModelSafeRoutingInfo routing_info, |
1406 const base::Callback<void(syncer::ModelTypeSet, | 1406 const base::Callback<void(syncer::ModelTypeSet, |
1407 syncer::ModelTypeSet)>& ready_task, | 1407 syncer::ModelTypeSet)>& ready_task, |
1408 const base::Closure& retry_callback) { | 1408 const base::Closure& retry_callback) { |
1409 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1409 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1410 sync_manager_->ConfigureSyncer( | 1410 sync_manager_->ConfigureSyncer( |
1411 reason, | 1411 reason, |
1412 types_to_config, | 1412 types_to_config, |
1413 failed_types, | 1413 failed_types, |
1414 routing_info, | 1414 routing_info, |
1415 base::Bind(&SyncBackendHost::Core::DoFinishConfigureDataTypes, | 1415 base::Bind(&SyncBackendHost::Core::DoFinishConfigureDataTypes, |
1416 this, | 1416 this, |
1417 types_to_config, | 1417 types_to_config, |
1418 ready_task), | 1418 ready_task), |
1419 base::Bind(&SyncBackendHost::Core::DoRetryConfiguration, | 1419 base::Bind(&SyncBackendHost::Core::DoRetryConfiguration, |
1420 this, | 1420 this, |
1421 retry_callback)); | 1421 retry_callback)); |
1422 } | 1422 } |
1423 | 1423 |
1424 void SyncBackendHost::Core::DoFinishConfigureDataTypes( | 1424 void SyncBackendHost::Core::DoFinishConfigureDataTypes( |
1425 syncer::ModelTypeSet types_to_config, | 1425 syncer::ModelTypeSet types_to_config, |
1426 const base::Callback<void(syncer::ModelTypeSet, | 1426 const base::Callback<void(syncer::ModelTypeSet, |
1427 syncer::ModelTypeSet)>& ready_task) { | 1427 syncer::ModelTypeSet)>& ready_task) { |
1428 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1428 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1429 | 1429 |
1430 // Update the enabled types for the bridge and sync manager. | 1430 // Update the enabled types for the bridge and sync manager. |
1431 syncer::ModelSafeRoutingInfo routing_info; | 1431 syncer::ModelSafeRoutingInfo routing_info; |
1432 registrar_->GetModelSafeRoutingInfo(&routing_info); | 1432 registrar_->GetModelSafeRoutingInfo(&routing_info); |
1433 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); | 1433 syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); |
1434 enabled_types.RemoveAll(syncer::ProxyTypes()); | 1434 enabled_types.RemoveAll(syncer::ProxyTypes()); |
1435 sync_manager_->UpdateEnabledTypes(enabled_types); | 1435 sync_manager_->UpdateEnabledTypes(enabled_types); |
1436 | 1436 |
1437 const syncer::ModelTypeSet failed_configuration_types = | 1437 const syncer::ModelTypeSet failed_configuration_types = |
1438 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); | 1438 Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); |
1439 const syncer::ModelTypeSet succeeded_configuration_types = | 1439 const syncer::ModelTypeSet succeeded_configuration_types = |
1440 Difference(types_to_config, failed_configuration_types); | 1440 Difference(types_to_config, failed_configuration_types); |
1441 host_.Call(FROM_HERE, | 1441 host_.Call(FROM_HERE, |
1442 &SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop, | 1442 &SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop, |
1443 succeeded_configuration_types, failed_configuration_types, | 1443 succeeded_configuration_types, failed_configuration_types, |
1444 ready_task); | 1444 ready_task); |
1445 } | 1445 } |
1446 | 1446 |
1447 void SyncBackendHost::Core::DoRetryConfiguration( | 1447 void SyncBackendHost::Core::DoRetryConfiguration( |
1448 const base::Closure& retry_callback) { | 1448 const base::Closure& retry_callback) { |
1449 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1449 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1450 host_.Call(FROM_HERE, | 1450 host_.Call(FROM_HERE, |
1451 &SyncBackendHost::RetryConfigurationOnFrontendLoop, | 1451 &SyncBackendHost::RetryConfigurationOnFrontendLoop, |
1452 retry_callback); | 1452 retry_callback); |
1453 } | 1453 } |
1454 | 1454 |
1455 void SyncBackendHost::Core::DeleteSyncDataFolder() { | 1455 void SyncBackendHost::Core::DeleteSyncDataFolder() { |
1456 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1456 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1457 if (file_util::DirectoryExists(sync_data_folder_path_)) { | 1457 if (file_util::DirectoryExists(sync_data_folder_path_)) { |
1458 if (!file_util::Delete(sync_data_folder_path_, true)) | 1458 if (!file_util::Delete(sync_data_folder_path_, true)) |
1459 SLOG(DFATAL) << "Could not delete the Sync Data folder."; | 1459 SLOG(DFATAL) << "Could not delete the Sync Data folder."; |
1460 } | 1460 } |
1461 } | 1461 } |
1462 | 1462 |
1463 void SyncBackendHost::Core::StartSavingChanges() { | 1463 void SyncBackendHost::Core::StartSavingChanges() { |
1464 // We may already be shut down. | 1464 // We may already be shut down. |
1465 if (!sync_loop_) | 1465 if (!sync_loop_) |
1466 return; | 1466 return; |
1467 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1467 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1468 DCHECK(!save_changes_timer_.get()); | 1468 DCHECK(!save_changes_timer_.get()); |
1469 save_changes_timer_.reset(new base::RepeatingTimer<Core>()); | 1469 save_changes_timer_.reset(new base::RepeatingTimer<Core>()); |
1470 save_changes_timer_->Start(FROM_HERE, | 1470 save_changes_timer_->Start(FROM_HERE, |
1471 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 1471 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), |
1472 this, &Core::SaveChanges); | 1472 this, &Core::SaveChanges); |
1473 } | 1473 } |
1474 | 1474 |
1475 void SyncBackendHost::Core::SaveChanges() { | 1475 void SyncBackendHost::Core::SaveChanges() { |
1476 DCHECK_EQ(MessageLoop::current(), sync_loop_); | 1476 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
1477 sync_manager_->SaveChanges(); | 1477 sync_manager_->SaveChanges(); |
1478 } | 1478 } |
1479 | 1479 |
1480 void SyncBackendHost::AddExperimentalTypes() { | 1480 void SyncBackendHost::AddExperimentalTypes() { |
1481 CHECK(initialized()); | 1481 CHECK(initialized()); |
1482 syncer::Experiments experiments; | 1482 syncer::Experiments experiments; |
1483 if (core_->sync_manager()->ReceivedExperiment(&experiments)) | 1483 if (core_->sync_manager()->ReceivedExperiment(&experiments)) |
1484 frontend_->OnExperimentsChanged(experiments); | 1484 frontend_->OnExperimentsChanged(experiments); |
1485 } | 1485 } |
1486 | 1486 |
1487 void SyncBackendHost::HandleControlTypesDownloadRetry() { | 1487 void SyncBackendHost::HandleControlTypesDownloadRetry() { |
1488 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1488 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1489 if (!frontend_) | 1489 if (!frontend_) |
1490 return; | 1490 return; |
1491 | 1491 |
1492 frontend_->OnSyncConfigureRetry(); | 1492 frontend_->OnSyncConfigureRetry(); |
1493 } | 1493 } |
1494 | 1494 |
1495 void SyncBackendHost::HandleInitializationCompletedOnFrontendLoop( | 1495 void SyncBackendHost::HandleInitializationCompletedOnFrontendLoop( |
1496 bool success) { | 1496 bool success) { |
1497 DCHECK_NE(initialization_state_, NOT_ATTEMPTED); | 1497 DCHECK_NE(initialization_state_, NOT_ATTEMPTED); |
1498 if (!frontend_) | 1498 if (!frontend_) |
1499 return; | 1499 return; |
1500 | 1500 |
1501 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1501 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1502 if (!success) { | 1502 if (!success) { |
1503 js_backend_.Reset(); | 1503 js_backend_.Reset(); |
1504 initialization_state_ = NOT_INITIALIZED; | 1504 initialization_state_ = NOT_INITIALIZED; |
1505 frontend_->OnBackendInitialized( | 1505 frontend_->OnBackendInitialized( |
1506 syncer::WeakHandle<syncer::JsBackend>(), | 1506 syncer::WeakHandle<syncer::JsBackend>(), |
1507 syncer::WeakHandle<syncer::DataTypeDebugInfoListener>(), | 1507 syncer::WeakHandle<syncer::DataTypeDebugInfoListener>(), |
1508 false); | 1508 false); |
1509 return; | 1509 return; |
1510 } | 1510 } |
1511 | 1511 |
1512 initialization_state_ = INITIALIZED; | 1512 initialization_state_ = INITIALIZED; |
1513 | 1513 |
1514 // Now that we've downloaded the control types, we can see if there are any | 1514 // Now that we've downloaded the control types, we can see if there are any |
1515 // experimental types to enable. This should be done before we inform | 1515 // experimental types to enable. This should be done before we inform |
1516 // the frontend to ensure they're visible in the customize screen. | 1516 // the frontend to ensure they're visible in the customize screen. |
1517 AddExperimentalTypes(); | 1517 AddExperimentalTypes(); |
1518 frontend_->OnBackendInitialized(js_backend_, | 1518 frontend_->OnBackendInitialized(js_backend_, |
1519 debug_info_listener_, | 1519 debug_info_listener_, |
1520 true); | 1520 true); |
1521 js_backend_.Reset(); | 1521 js_backend_.Reset(); |
1522 } | 1522 } |
1523 | 1523 |
1524 void SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop( | 1524 void SyncBackendHost::HandleSyncCycleCompletedOnFrontendLoop( |
1525 const SyncSessionSnapshot& snapshot) { | 1525 const SyncSessionSnapshot& snapshot) { |
1526 if (!frontend_) | 1526 if (!frontend_) |
1527 return; | 1527 return; |
1528 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1528 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1529 | 1529 |
1530 last_snapshot_ = snapshot; | 1530 last_snapshot_ = snapshot; |
1531 | 1531 |
1532 SDVLOG(1) << "Got snapshot " << snapshot.ToString(); | 1532 SDVLOG(1) << "Got snapshot " << snapshot.ToString(); |
1533 | 1533 |
1534 const syncer::ModelTypeSet to_migrate = | 1534 const syncer::ModelTypeSet to_migrate = |
1535 snapshot.model_neutral_state().types_needing_local_migration; | 1535 snapshot.model_neutral_state().types_needing_local_migration; |
1536 if (!to_migrate.Empty()) | 1536 if (!to_migrate.Empty()) |
1537 frontend_->OnMigrationNeededForTypes(to_migrate); | 1537 frontend_->OnMigrationNeededForTypes(to_migrate); |
1538 | 1538 |
(...skipping 20 matching lines...) Expand all Loading... |
1559 if (token_type == syncer::PASSPHRASE_BOOTSTRAP_TOKEN) | 1559 if (token_type == syncer::PASSPHRASE_BOOTSTRAP_TOKEN) |
1560 sync_prefs_->SetEncryptionBootstrapToken(token); | 1560 sync_prefs_->SetEncryptionBootstrapToken(token); |
1561 else | 1561 else |
1562 sync_prefs_->SetKeystoreEncryptionBootstrapToken(token); | 1562 sync_prefs_->SetKeystoreEncryptionBootstrapToken(token); |
1563 } | 1563 } |
1564 | 1564 |
1565 void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop( | 1565 void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop( |
1566 const syncer::SyncProtocolError& sync_error) { | 1566 const syncer::SyncProtocolError& sync_error) { |
1567 if (!frontend_) | 1567 if (!frontend_) |
1568 return; | 1568 return; |
1569 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1569 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1570 frontend_->OnActionableError(sync_error); | 1570 frontend_->OnActionableError(sync_error); |
1571 } | 1571 } |
1572 | 1572 |
1573 void SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop( | 1573 void SyncBackendHost::HandleInvalidatorStateChangeOnFrontendLoop( |
1574 syncer::InvalidatorState state) { | 1574 syncer::InvalidatorState state) { |
1575 if (!frontend_) | 1575 if (!frontend_) |
1576 return; | 1576 return; |
1577 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1577 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1578 frontend_->OnInvalidatorStateChange(state); | 1578 frontend_->OnInvalidatorStateChange(state); |
1579 } | 1579 } |
1580 | 1580 |
1581 void SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop( | 1581 void SyncBackendHost::HandleIncomingInvalidationOnFrontendLoop( |
1582 const syncer::ObjectIdInvalidationMap& invalidation_map) { | 1582 const syncer::ObjectIdInvalidationMap& invalidation_map) { |
1583 if (!frontend_) | 1583 if (!frontend_) |
1584 return; | 1584 return; |
1585 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1585 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1586 frontend_->OnIncomingInvalidation(invalidation_map); | 1586 frontend_->OnIncomingInvalidation(invalidation_map); |
1587 } | 1587 } |
1588 | 1588 |
1589 bool SyncBackendHost::CheckPassphraseAgainstCachedPendingKeys( | 1589 bool SyncBackendHost::CheckPassphraseAgainstCachedPendingKeys( |
1590 const std::string& passphrase) const { | 1590 const std::string& passphrase) const { |
1591 DCHECK(cached_pending_keys_.has_blob()); | 1591 DCHECK(cached_pending_keys_.has_blob()); |
1592 DCHECK(!passphrase.empty()); | 1592 DCHECK(!passphrase.empty()); |
1593 syncer::Nigori nigori; | 1593 syncer::Nigori nigori; |
1594 nigori.InitByDerivation("localhost", "dummy", passphrase); | 1594 nigori.InitByDerivation("localhost", "dummy", passphrase); |
1595 std::string plaintext; | 1595 std::string plaintext; |
1596 bool result = nigori.Decrypt(cached_pending_keys_.blob(), &plaintext); | 1596 bool result = nigori.Decrypt(cached_pending_keys_.blob(), &plaintext); |
1597 DVLOG_IF(1, result) << "Passphrase failed to decrypt pending keys."; | 1597 DVLOG_IF(1, result) << "Passphrase failed to decrypt pending keys."; |
1598 return result; | 1598 return result; |
1599 } | 1599 } |
1600 | 1600 |
1601 void SyncBackendHost::NotifyPassphraseRequired( | 1601 void SyncBackendHost::NotifyPassphraseRequired( |
1602 syncer::PassphraseRequiredReason reason, | 1602 syncer::PassphraseRequiredReason reason, |
1603 sync_pb::EncryptedData pending_keys) { | 1603 sync_pb::EncryptedData pending_keys) { |
1604 if (!frontend_) | 1604 if (!frontend_) |
1605 return; | 1605 return; |
1606 | 1606 |
1607 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1607 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1608 | 1608 |
1609 // Update our cache of the cryptographer's pending keys. | 1609 // Update our cache of the cryptographer's pending keys. |
1610 cached_pending_keys_ = pending_keys; | 1610 cached_pending_keys_ = pending_keys; |
1611 | 1611 |
1612 frontend_->OnPassphraseRequired(reason, pending_keys); | 1612 frontend_->OnPassphraseRequired(reason, pending_keys); |
1613 } | 1613 } |
1614 | 1614 |
1615 void SyncBackendHost::NotifyPassphraseAccepted() { | 1615 void SyncBackendHost::NotifyPassphraseAccepted() { |
1616 if (!frontend_) | 1616 if (!frontend_) |
1617 return; | 1617 return; |
1618 | 1618 |
1619 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1619 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1620 | 1620 |
1621 // Clear our cache of the cryptographer's pending keys. | 1621 // Clear our cache of the cryptographer's pending keys. |
1622 cached_pending_keys_.clear_blob(); | 1622 cached_pending_keys_.clear_blob(); |
1623 frontend_->OnPassphraseAccepted(); | 1623 frontend_->OnPassphraseAccepted(); |
1624 } | 1624 } |
1625 | 1625 |
1626 void SyncBackendHost::NotifyUpdatedToken(const std::string& token) { | 1626 void SyncBackendHost::NotifyUpdatedToken(const std::string& token) { |
1627 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1627 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1628 TokenAvailableDetails details(GaiaConstants::kSyncService, token); | 1628 TokenAvailableDetails details(GaiaConstants::kSyncService, token); |
1629 | 1629 |
1630 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); | 1630 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); |
1631 CHECK(token_service); | 1631 CHECK(token_service); |
1632 token_service->AddAuthTokenManually(details.service(), details.token()); | 1632 token_service->AddAuthTokenManually(details.service(), details.token()); |
1633 } | 1633 } |
1634 | 1634 |
1635 void SyncBackendHost::NotifyEncryptedTypesChanged( | 1635 void SyncBackendHost::NotifyEncryptedTypesChanged( |
1636 syncer::ModelTypeSet encrypted_types, | 1636 syncer::ModelTypeSet encrypted_types, |
1637 bool encrypt_everything) { | 1637 bool encrypt_everything) { |
1638 if (!frontend_) | 1638 if (!frontend_) |
1639 return; | 1639 return; |
1640 | 1640 |
1641 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1641 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1642 frontend_->OnEncryptedTypesChanged( | 1642 frontend_->OnEncryptedTypesChanged( |
1643 encrypted_types, encrypt_everything); | 1643 encrypted_types, encrypt_everything); |
1644 } | 1644 } |
1645 | 1645 |
1646 void SyncBackendHost::NotifyEncryptionComplete() { | 1646 void SyncBackendHost::NotifyEncryptionComplete() { |
1647 if (!frontend_) | 1647 if (!frontend_) |
1648 return; | 1648 return; |
1649 | 1649 |
1650 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1650 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1651 frontend_->OnEncryptionComplete(); | 1651 frontend_->OnEncryptionComplete(); |
1652 } | 1652 } |
1653 | 1653 |
1654 void SyncBackendHost::HandlePassphraseTypeChangedOnFrontendLoop( | 1654 void SyncBackendHost::HandlePassphraseTypeChangedOnFrontendLoop( |
1655 syncer::PassphraseType type, | 1655 syncer::PassphraseType type, |
1656 base::Time explicit_passphrase_time) { | 1656 base::Time explicit_passphrase_time) { |
1657 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1657 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1658 DVLOG(1) << "Passphrase type changed to " | 1658 DVLOG(1) << "Passphrase type changed to " |
1659 << syncer::PassphraseTypeToString(type); | 1659 << syncer::PassphraseTypeToString(type); |
1660 cached_passphrase_type_ = type; | 1660 cached_passphrase_type_ = type; |
1661 cached_explicit_passphrase_time_ = explicit_passphrase_time; | 1661 cached_explicit_passphrase_time_ = explicit_passphrase_time; |
1662 } | 1662 } |
1663 | 1663 |
1664 void SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop() { | 1664 void SyncBackendHost::HandleStopSyncingPermanentlyOnFrontendLoop() { |
1665 if (!frontend_) | 1665 if (!frontend_) |
1666 return; | 1666 return; |
1667 frontend_->OnStopSyncingPermanently(); | 1667 frontend_->OnStopSyncingPermanently(); |
1668 } | 1668 } |
1669 | 1669 |
1670 void SyncBackendHost::HandleConnectionStatusChangeOnFrontendLoop( | 1670 void SyncBackendHost::HandleConnectionStatusChangeOnFrontendLoop( |
1671 syncer::ConnectionStatus status) { | 1671 syncer::ConnectionStatus status) { |
1672 if (!frontend_) | 1672 if (!frontend_) |
1673 return; | 1673 return; |
1674 | 1674 |
1675 DCHECK_EQ(MessageLoop::current(), frontend_loop_); | 1675 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
1676 | 1676 |
1677 DVLOG(1) << "Connection status changed: " | 1677 DVLOG(1) << "Connection status changed: " |
1678 << syncer::ConnectionStatusToString(status); | 1678 << syncer::ConnectionStatusToString(status); |
1679 frontend_->OnConnectionStatusChange(status); | 1679 frontend_->OnConnectionStatusChange(status); |
1680 } | 1680 } |
1681 | 1681 |
1682 #undef SDVLOG | 1682 #undef SDVLOG |
1683 | 1683 |
1684 #undef SLOG | 1684 #undef SLOG |
1685 | 1685 |
1686 } // namespace browser_sync | 1686 } // namespace browser_sync |
OLD | NEW |