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 "sync/internal_api/public/sync_manager.h" | 5 #include "sync/internal_api/public/sync_manager.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "sync/engine/throttled_data_type_tracker.h" | 25 #include "sync/engine/throttled_data_type_tracker.h" |
26 #include "sync/internal_api/change_reorder_buffer.h" | 26 #include "sync/internal_api/change_reorder_buffer.h" |
27 #include "sync/internal_api/debug_info_event_listener.h" | 27 #include "sync/internal_api/debug_info_event_listener.h" |
28 #include "sync/internal_api/js_mutation_event_observer.h" | 28 #include "sync/internal_api/js_mutation_event_observer.h" |
29 #include "sync/internal_api/js_sync_manager_observer.h" | 29 #include "sync/internal_api/js_sync_manager_observer.h" |
30 #include "sync/internal_api/public/base/model_type.h" | 30 #include "sync/internal_api/public/base/model_type.h" |
31 #include "sync/internal_api/public/base/model_type_payload_map.h" | 31 #include "sync/internal_api/public/base/model_type_payload_map.h" |
32 #include "sync/internal_api/public/base_node.h" | 32 #include "sync/internal_api/public/base_node.h" |
33 #include "sync/internal_api/public/configure_reason.h" | 33 #include "sync/internal_api/public/configure_reason.h" |
34 #include "sync/internal_api/public/engine/polling_constants.h" | 34 #include "sync/internal_api/public/engine/polling_constants.h" |
| 35 #include "sync/internal_api/public/http_post_provider_factory.h" |
35 #include "sync/internal_api/public/read_node.h" | 36 #include "sync/internal_api/public/read_node.h" |
36 #include "sync/internal_api/public/read_transaction.h" | 37 #include "sync/internal_api/public/read_transaction.h" |
37 #include "sync/internal_api/public/user_share.h" | 38 #include "sync/internal_api/public/user_share.h" |
38 #include "sync/internal_api/public/util/experiments.h" | 39 #include "sync/internal_api/public/util/experiments.h" |
39 #include "sync/internal_api/public/write_node.h" | 40 #include "sync/internal_api/public/write_node.h" |
40 #include "sync/internal_api/public/write_transaction.h" | 41 #include "sync/internal_api/public/write_transaction.h" |
41 #include "sync/internal_api/syncapi_internal.h" | 42 #include "sync/internal_api/syncapi_internal.h" |
42 #include "sync/internal_api/syncapi_server_connection_manager.h" | 43 #include "sync/internal_api/syncapi_server_connection_manager.h" |
43 #include "sync/js/js_arg_list.h" | 44 #include "sync/js/js_arg_list.h" |
44 #include "sync/js/js_backend.h" | 45 #include "sync/js/js_backend.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 virtual ~SyncInternal() { | 170 virtual ~SyncInternal() { |
170 CHECK(!initialized_); | 171 CHECK(!initialized_); |
171 } | 172 } |
172 | 173 |
173 bool Init(const FilePath& database_location, | 174 bool Init(const FilePath& database_location, |
174 const WeakHandle<JsEventHandler>& event_handler, | 175 const WeakHandle<JsEventHandler>& event_handler, |
175 const std::string& sync_server_and_path, | 176 const std::string& sync_server_and_path, |
176 int port, | 177 int port, |
177 bool use_ssl, | 178 bool use_ssl, |
178 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 179 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
179 HttpPostProviderFactory* post_factory, | 180 scoped_ptr<HttpPostProviderFactory> post_factory, |
180 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, | 181 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, |
181 const std::vector<syncer::ModelSafeWorker*>& workers, | 182 const std::vector<syncer::ModelSafeWorker*>& workers, |
182 syncer::ExtensionsActivityMonitor* | 183 syncer::ExtensionsActivityMonitor* |
183 extensions_activity_monitor, | 184 extensions_activity_monitor, |
184 ChangeDelegate* change_delegate, | 185 ChangeDelegate* change_delegate, |
185 const SyncCredentials& credentials, | 186 const SyncCredentials& credentials, |
186 syncer::SyncNotifier* sync_notifier, | 187 scoped_ptr<syncer::SyncNotifier> sync_notifier, |
187 const std::string& restored_key_for_bootstrapping, | 188 const std::string& restored_key_for_bootstrapping, |
188 TestingMode testing_mode, | 189 TestingMode testing_mode, |
189 Encryptor* encryptor, | 190 Encryptor* encryptor, |
190 UnrecoverableErrorHandler* unrecoverable_error_handler, | 191 UnrecoverableErrorHandler* unrecoverable_error_handler, |
191 ReportUnrecoverableErrorFunction | 192 ReportUnrecoverableErrorFunction |
192 report_unrecoverable_error_function); | 193 report_unrecoverable_error_function); |
193 | 194 |
194 // Sign into sync with given credentials. | 195 // Sign into sync with given credentials. |
195 // We do not verify the tokens given. After this call, the tokens are set | 196 // We do not verify the tokens given. After this call, the tokens are set |
196 // and the sync DB is open. True if successful, false if something | 197 // and the sync DB is open. True if successful, false if something |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 virtual void OnServerConnectionEvent( | 370 virtual void OnServerConnectionEvent( |
370 const ServerConnectionEvent& event) OVERRIDE; | 371 const ServerConnectionEvent& event) OVERRIDE; |
371 | 372 |
372 // JsBackend implementation. | 373 // JsBackend implementation. |
373 virtual void SetJsEventHandler( | 374 virtual void SetJsEventHandler( |
374 const WeakHandle<JsEventHandler>& event_handler) OVERRIDE; | 375 const WeakHandle<JsEventHandler>& event_handler) OVERRIDE; |
375 virtual void ProcessJsMessage( | 376 virtual void ProcessJsMessage( |
376 const std::string& name, const JsArgList& args, | 377 const std::string& name, const JsArgList& args, |
377 const WeakHandle<JsReplyHandler>& reply_handler) OVERRIDE; | 378 const WeakHandle<JsReplyHandler>& reply_handler) OVERRIDE; |
378 | 379 |
| 380 void SetSyncSchedulerForTest(scoped_ptr<SyncScheduler> scheduler); |
| 381 |
379 private: | 382 private: |
380 struct NotificationInfo { | 383 struct NotificationInfo { |
381 int total_count; | 384 int total_count; |
382 std::string payload; | 385 std::string payload; |
383 | 386 |
384 NotificationInfo() : total_count(0) {} | 387 NotificationInfo() : total_count(0) {} |
385 | 388 |
386 ~NotificationInfo() {} | 389 ~NotificationInfo() {} |
387 | 390 |
388 // Returned pointer owned by the caller. | 391 // Returned pointer owned by the caller. |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 SyncManager::SyncManager(const std::string& name) | 688 SyncManager::SyncManager(const std::string& name) |
686 : data_(new SyncInternal(name)) {} | 689 : data_(new SyncInternal(name)) {} |
687 | 690 |
688 bool SyncManager::Init( | 691 bool SyncManager::Init( |
689 const FilePath& database_location, | 692 const FilePath& database_location, |
690 const WeakHandle<JsEventHandler>& event_handler, | 693 const WeakHandle<JsEventHandler>& event_handler, |
691 const std::string& sync_server_and_path, | 694 const std::string& sync_server_and_path, |
692 int sync_server_port, | 695 int sync_server_port, |
693 bool use_ssl, | 696 bool use_ssl, |
694 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 697 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
695 HttpPostProviderFactory* post_factory, | 698 scoped_ptr<HttpPostProviderFactory> post_factory, |
696 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, | 699 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, |
697 const std::vector<syncer::ModelSafeWorker*>& workers, | 700 const std::vector<syncer::ModelSafeWorker*>& workers, |
698 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, | 701 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, |
699 ChangeDelegate* change_delegate, | 702 ChangeDelegate* change_delegate, |
700 const SyncCredentials& credentials, | 703 const SyncCredentials& credentials, |
701 syncer::SyncNotifier* sync_notifier, | 704 scoped_ptr<syncer::SyncNotifier> sync_notifier, |
702 const std::string& restored_key_for_bootstrapping, | 705 const std::string& restored_key_for_bootstrapping, |
703 TestingMode testing_mode, | 706 TestingMode testing_mode, |
704 Encryptor* encryptor, | 707 Encryptor* encryptor, |
705 UnrecoverableErrorHandler* unrecoverable_error_handler, | 708 UnrecoverableErrorHandler* unrecoverable_error_handler, |
706 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { | 709 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { |
707 DCHECK(thread_checker_.CalledOnValidThread()); | 710 DCHECK(thread_checker_.CalledOnValidThread()); |
708 DCHECK(post_factory); | 711 DCHECK(post_factory.get()); |
709 DVLOG(1) << "SyncManager starting Init..."; | 712 DVLOG(1) << "SyncManager starting Init..."; |
710 std::string server_string(sync_server_and_path); | 713 std::string server_string(sync_server_and_path); |
711 return data_->Init(database_location, | 714 return data_->Init(database_location, |
712 event_handler, | 715 event_handler, |
713 server_string, | 716 server_string, |
714 sync_server_port, | 717 sync_server_port, |
715 use_ssl, | 718 use_ssl, |
716 blocking_task_runner, | 719 blocking_task_runner, |
717 post_factory, | 720 post_factory.Pass(), |
718 model_safe_routing_info, | 721 model_safe_routing_info, |
719 workers, | 722 workers, |
720 extensions_activity_monitor, | 723 extensions_activity_monitor, |
721 change_delegate, | 724 change_delegate, |
722 credentials, | 725 credentials, |
723 sync_notifier, | 726 sync_notifier.Pass(), |
724 restored_key_for_bootstrapping, | 727 restored_key_for_bootstrapping, |
725 testing_mode, | 728 testing_mode, |
726 encryptor, | 729 encryptor, |
727 unrecoverable_error_handler, | 730 unrecoverable_error_handler, |
728 report_unrecoverable_error_function); | 731 report_unrecoverable_error_function); |
729 } | 732 } |
730 | 733 |
731 void SyncManager::UpdateCredentials(const SyncCredentials& credentials) { | 734 void SyncManager::UpdateCredentials(const SyncCredentials& credentials) { |
732 DCHECK(thread_checker_.CalledOnValidThread()); | 735 DCHECK(thread_checker_.CalledOnValidThread()); |
733 data_->UpdateCredentials(credentials); | 736 data_->UpdateCredentials(credentials); |
734 } | 737 } |
735 | 738 |
736 void SyncManager::UpdateEnabledTypes(const ModelTypeSet& enabled_types) { | 739 void SyncManager::UpdateEnabledTypes(const ModelTypeSet& enabled_types) { |
737 DCHECK(thread_checker_.CalledOnValidThread()); | 740 DCHECK(thread_checker_.CalledOnValidThread()); |
738 data_->UpdateEnabledTypes(enabled_types); | 741 data_->UpdateEnabledTypes(enabled_types); |
739 } | 742 } |
740 | 743 |
741 void SyncManager::ThrowUnrecoverableError() { | 744 void SyncManager::ThrowUnrecoverableError() { |
742 DCHECK(thread_checker_.CalledOnValidThread()); | 745 DCHECK(thread_checker_.CalledOnValidThread()); |
743 ReadTransaction trans(FROM_HERE, GetUserShare()); | 746 ReadTransaction trans(FROM_HERE, GetUserShare()); |
744 trans.GetWrappedTrans()->OnUnrecoverableError( | 747 trans.GetWrappedTrans()->OnUnrecoverableError( |
745 FROM_HERE, "Simulating unrecoverable error for testing purposes."); | 748 FROM_HERE, "Simulating unrecoverable error for testing purposes."); |
746 } | 749 } |
747 | 750 |
748 syncer::ModelTypeSet SyncManager::InitialSyncEndedTypes() { | 751 syncer::ModelTypeSet SyncManager::InitialSyncEndedTypes() { |
749 return data_->InitialSyncEndedTypes(); | 752 return data_->InitialSyncEndedTypes(); |
750 } | 753 } |
751 | 754 |
| 755 syncer::ModelTypeSet SyncManager::GetTypesWithEmptyProgressMarkerToken( |
| 756 syncer::ModelTypeSet types) { |
| 757 syncer::ModelTypeSet result; |
| 758 for (syncer::ModelTypeSet::Iterator i = types.First(); |
| 759 i.Good(); i.Inc()) { |
| 760 sync_pb::DataTypeProgressMarker marker; |
| 761 GetUserShare()->directory->GetDownloadProgress(i.Get(), &marker); |
| 762 |
| 763 if (marker.token().empty()) |
| 764 result.Put(i.Get()); |
| 765 |
| 766 } |
| 767 return result; |
| 768 } |
| 769 |
752 void SyncManager::StartSyncingNormally( | 770 void SyncManager::StartSyncingNormally( |
753 const syncer::ModelSafeRoutingInfo& routing_info) { | 771 const syncer::ModelSafeRoutingInfo& routing_info) { |
754 DCHECK(thread_checker_.CalledOnValidThread()); | 772 DCHECK(thread_checker_.CalledOnValidThread()); |
755 data_->StartSyncingNormally(routing_info); | 773 data_->StartSyncingNormally(routing_info); |
756 } | 774 } |
757 | 775 |
758 void SyncManager::SetEncryptionPassphrase(const std::string& passphrase, | 776 void SyncManager::SetEncryptionPassphrase(const std::string& passphrase, |
759 bool is_explicit) { | 777 bool is_explicit) { |
760 DCHECK(thread_checker_.CalledOnValidThread()); | 778 DCHECK(thread_checker_.CalledOnValidThread()); |
761 data_->SetEncryptionPassphrase(passphrase, is_explicit); | 779 data_->SetEncryptionPassphrase(passphrase, is_explicit); |
(...skipping 24 matching lines...) Expand all Loading... |
786 | 804 |
787 bool SyncManager::EncryptEverythingEnabledForTest() const { | 805 bool SyncManager::EncryptEverythingEnabledForTest() const { |
788 ReadTransaction trans(FROM_HERE, GetUserShare()); | 806 ReadTransaction trans(FROM_HERE, GetUserShare()); |
789 return trans.GetCryptographer()->encrypt_everything(); | 807 return trans.GetCryptographer()->encrypt_everything(); |
790 } | 808 } |
791 | 809 |
792 bool SyncManager::IsUsingExplicitPassphrase() { | 810 bool SyncManager::IsUsingExplicitPassphrase() { |
793 return data_ && data_->IsUsingExplicitPassphrase(); | 811 return data_ && data_->IsUsingExplicitPassphrase(); |
794 } | 812 } |
795 | 813 |
796 void SyncManager::RequestCleanupDisabledTypes( | 814 void SyncManager::ConfigureSyncer( |
797 const syncer::ModelSafeRoutingInfo& routing_info) { | 815 ConfigureReason reason, |
| 816 const syncer::ModelTypeSet& types_to_config, |
| 817 const syncer::ModelSafeRoutingInfo& new_routing_info, |
| 818 const base::Closure& ready_task, |
| 819 const base::Closure& retry_task) { |
798 DCHECK(thread_checker_.CalledOnValidThread()); | 820 DCHECK(thread_checker_.CalledOnValidThread()); |
799 if (data_->scheduler()) { | 821 DCHECK(!ready_task.is_null()); |
800 data_->session_context()->set_routing_info(routing_info); | 822 DCHECK(!retry_task.is_null()); |
801 data_->scheduler()->CleanupDisabledTypes(); | |
802 } | |
803 } | |
804 | 823 |
805 void SyncManager::RequestConfig( | 824 // TODO(zea): set this based on whether cryptographer has keystore |
806 const syncer::ModelSafeRoutingInfo& routing_info, | 825 // encryption key or not (requires opening a transaction). crbug.com/129665. |
807 const ModelTypeSet& types, ConfigureReason reason) { | 826 ConfigurationParams::KeystoreKeyStatus keystore_key_status = |
808 DCHECK(thread_checker_.CalledOnValidThread()); | 827 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY; |
| 828 |
| 829 ConfigurationParams params(GetSourceFromReason(reason), |
| 830 types_to_config, |
| 831 new_routing_info, |
| 832 keystore_key_status, |
| 833 ready_task); |
| 834 |
809 if (!data_->scheduler()) { | 835 if (!data_->scheduler()) { |
810 LOG(INFO) | 836 LOG(INFO) |
811 << "SyncManager::RequestConfig: bailing out because scheduler is " | 837 << "SyncManager::ConfigureSyncer: could not configure because " |
812 << "null"; | 838 << "scheduler is null"; |
| 839 params.ready_task.Run(); |
813 return; | 840 return; |
814 } | 841 } |
815 StartConfigurationMode(base::Closure()); | |
816 data_->session_context()->set_routing_info(routing_info); | |
817 data_->scheduler()->ScheduleConfiguration(types, GetSourceFromReason(reason)); | |
818 } | |
819 | 842 |
820 void SyncManager::StartConfigurationMode(const base::Closure& callback) { | 843 data_->scheduler()->Start(syncer::SyncScheduler::CONFIGURATION_MODE); |
821 DCHECK(thread_checker_.CalledOnValidThread()); | 844 if (!data_->scheduler()->ScheduleConfiguration(params)) |
822 if (!data_->scheduler()) { | 845 retry_task.Run(); |
823 LOG(INFO) | 846 |
824 << "SyncManager::StartConfigurationMode: could not start " | |
825 << "configuration mode because because scheduler is null"; | |
826 return; | |
827 } | |
828 data_->scheduler()->Start( | |
829 syncer::SyncScheduler::CONFIGURATION_MODE, callback); | |
830 } | 847 } |
831 | 848 |
832 bool SyncManager::SyncInternal::Init( | 849 bool SyncManager::SyncInternal::Init( |
833 const FilePath& database_location, | 850 const FilePath& database_location, |
834 const WeakHandle<JsEventHandler>& event_handler, | 851 const WeakHandle<JsEventHandler>& event_handler, |
835 const std::string& sync_server_and_path, | 852 const std::string& sync_server_and_path, |
836 int port, | 853 int port, |
837 bool use_ssl, | 854 bool use_ssl, |
838 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 855 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
839 HttpPostProviderFactory* post_factory, | 856 scoped_ptr<HttpPostProviderFactory> post_factory, |
840 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, | 857 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, |
841 const std::vector<syncer::ModelSafeWorker*>& workers, | 858 const std::vector<syncer::ModelSafeWorker*>& workers, |
842 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, | 859 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, |
843 ChangeDelegate* change_delegate, | 860 ChangeDelegate* change_delegate, |
844 const SyncCredentials& credentials, | 861 const SyncCredentials& credentials, |
845 syncer::SyncNotifier* sync_notifier, | 862 scoped_ptr<syncer::SyncNotifier> sync_notifier, |
846 const std::string& restored_key_for_bootstrapping, | 863 const std::string& restored_key_for_bootstrapping, |
847 TestingMode testing_mode, | 864 TestingMode testing_mode, |
848 Encryptor* encryptor, | 865 Encryptor* encryptor, |
849 UnrecoverableErrorHandler* unrecoverable_error_handler, | 866 UnrecoverableErrorHandler* unrecoverable_error_handler, |
850 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { | 867 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { |
851 CHECK(!initialized_); | 868 CHECK(!initialized_); |
852 | 869 |
853 DCHECK(thread_checker_.CalledOnValidThread()); | 870 DCHECK(thread_checker_.CalledOnValidThread()); |
854 | 871 |
855 DVLOG(1) << "Starting SyncInternal initialization."; | 872 DVLOG(1) << "Starting SyncInternal initialization."; |
856 | 873 |
857 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); | 874 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); |
858 | 875 |
859 blocking_task_runner_ = blocking_task_runner; | 876 blocking_task_runner_ = blocking_task_runner; |
860 | 877 |
861 change_delegate_ = change_delegate; | 878 change_delegate_ = change_delegate; |
862 testing_mode_ = testing_mode; | 879 testing_mode_ = testing_mode; |
863 | 880 |
864 sync_notifier_.reset(sync_notifier); | 881 sync_notifier_ = sync_notifier.Pass(); |
865 | 882 |
866 AddObserver(&js_sync_manager_observer_); | 883 AddObserver(&js_sync_manager_observer_); |
867 SetJsEventHandler(event_handler); | 884 SetJsEventHandler(event_handler); |
868 | 885 |
869 AddObserver(&debug_info_event_listener_); | 886 AddObserver(&debug_info_event_listener_); |
870 | 887 |
871 database_path_ = database_location.Append( | 888 database_path_ = database_location.Append( |
872 syncable::Directory::kSyncDatabaseFilename); | 889 syncable::Directory::kSyncDatabaseFilename); |
873 encryptor_ = encryptor; | 890 encryptor_ = encryptor; |
874 unrecoverable_error_handler_ = unrecoverable_error_handler; | 891 unrecoverable_error_handler_ = unrecoverable_error_handler; |
(...skipping 13 matching lines...) Expand all Loading... |
888 } | 905 } |
889 | 906 |
890 DCHECK(backing_store); | 907 DCHECK(backing_store); |
891 share_.directory.reset( | 908 share_.directory.reset( |
892 new syncable::Directory(encryptor_, | 909 new syncable::Directory(encryptor_, |
893 unrecoverable_error_handler_, | 910 unrecoverable_error_handler_, |
894 report_unrecoverable_error_function_, | 911 report_unrecoverable_error_function_, |
895 backing_store)); | 912 backing_store)); |
896 | 913 |
897 connection_manager_.reset(new SyncAPIServerConnectionManager( | 914 connection_manager_.reset(new SyncAPIServerConnectionManager( |
898 sync_server_and_path, port, use_ssl, post_factory)); | 915 sync_server_and_path, port, use_ssl, post_factory.release())); |
899 | 916 |
900 net::NetworkChangeNotifier::AddIPAddressObserver(this); | 917 net::NetworkChangeNotifier::AddIPAddressObserver(this); |
901 observing_ip_address_changes_ = true; | 918 observing_ip_address_changes_ = true; |
902 | 919 |
903 connection_manager()->AddListener(this); | 920 connection_manager()->AddListener(this); |
904 | 921 |
905 // Test mode does not use a syncer context or syncer thread. | 922 // Test mode does not use a syncer context or syncer thread. |
906 if (testing_mode_ == NON_TEST) { | 923 if (testing_mode_ == NON_TEST) { |
907 // Build a SyncSessionContext and store the worker in it. | 924 // Build a SyncSessionContext and store the worker in it. |
908 DVLOG(1) << "Sync is bringing up SyncSessionContext."; | 925 DVLOG(1) << "Sync is bringing up SyncSessionContext."; |
(...skipping 11 matching lines...) Expand all Loading... |
920 &debug_info_event_listener_, | 937 &debug_info_event_listener_, |
921 &traffic_recorder_)); | 938 &traffic_recorder_)); |
922 session_context()->set_account_name(credentials.email); | 939 session_context()->set_account_name(credentials.email); |
923 scheduler_.reset(new SyncScheduler(name_, session_context(), new Syncer())); | 940 scheduler_.reset(new SyncScheduler(name_, session_context(), new Syncer())); |
924 } | 941 } |
925 | 942 |
926 bool signed_in = SignIn(credentials); | 943 bool signed_in = SignIn(credentials); |
927 | 944 |
928 if (signed_in) { | 945 if (signed_in) { |
929 if (scheduler()) { | 946 if (scheduler()) { |
930 scheduler()->Start( | 947 scheduler()->Start(syncer::SyncScheduler::CONFIGURATION_MODE); |
931 syncer::SyncScheduler::CONFIGURATION_MODE, base::Closure()); | |
932 } | 948 } |
933 | 949 |
934 initialized_ = true; | 950 initialized_ = true; |
935 | 951 |
936 // Cryptographer should only be accessed while holding a | 952 // Cryptographer should only be accessed while holding a |
937 // transaction. Grabbing the user share for the transaction | 953 // transaction. Grabbing the user share for the transaction |
938 // checks the initialization state, so this must come after | 954 // checks the initialization state, so this must come after |
939 // |initialized_| is set to true. | 955 // |initialized_| is set to true. |
940 ReadTransaction trans(FROM_HERE, GetUserShare()); | 956 ReadTransaction trans(FROM_HERE, GetUserShare()); |
941 trans.GetCryptographer()->Bootstrap(restored_key_for_bootstrapping); | 957 trans.GetCryptographer()->Bootstrap(restored_key_for_bootstrapping); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 allstatus_.SetCryptographerReady(cryptographer->is_ready()); | 1111 allstatus_.SetCryptographerReady(cryptographer->is_ready()); |
1096 allstatus_.SetCryptoHasPendingKeys(cryptographer->has_pending_keys()); | 1112 allstatus_.SetCryptoHasPendingKeys(cryptographer->has_pending_keys()); |
1097 debug_info_event_listener_.SetCryptographerReady(cryptographer->is_ready()); | 1113 debug_info_event_listener_.SetCryptographerReady(cryptographer->is_ready()); |
1098 debug_info_event_listener_.SetCrytographerHasPendingKeys( | 1114 debug_info_event_listener_.SetCrytographerHasPendingKeys( |
1099 cryptographer->has_pending_keys()); | 1115 cryptographer->has_pending_keys()); |
1100 } | 1116 } |
1101 | 1117 |
1102 void SyncManager::SyncInternal::StartSyncingNormally( | 1118 void SyncManager::SyncInternal::StartSyncingNormally( |
1103 const syncer::ModelSafeRoutingInfo& routing_info) { | 1119 const syncer::ModelSafeRoutingInfo& routing_info) { |
1104 // Start the sync scheduler. | 1120 // Start the sync scheduler. |
1105 if (scheduler()) { // NULL during certain unittests. | 1121 if (scheduler()) { // NULL during certain unittests. |
| 1122 // TODO(sync): We always want the newest set of routes when we switch back |
| 1123 // to normal mode. Figure out how to enforce set_routing_info is always |
| 1124 // appropriately set and that it's only modified when switching to normal |
| 1125 // mode. |
1106 session_context()->set_routing_info(routing_info); | 1126 session_context()->set_routing_info(routing_info); |
1107 scheduler()->Start(SyncScheduler::NORMAL_MODE, base::Closure()); | 1127 scheduler()->Start(SyncScheduler::NORMAL_MODE); |
1108 } | 1128 } |
1109 } | 1129 } |
1110 | 1130 |
1111 bool SyncManager::SyncInternal::OpenDirectory() { | 1131 bool SyncManager::SyncInternal::OpenDirectory() { |
1112 DCHECK(!initialized_) << "Should only happen once"; | 1132 DCHECK(!initialized_) << "Should only happen once"; |
1113 | 1133 |
1114 // Set before Open(). | 1134 // Set before Open(). |
1115 change_observer_ = | 1135 change_observer_ = |
1116 syncer::MakeWeakHandle(js_mutation_event_observer_.AsWeakPtr()); | 1136 syncer::MakeWeakHandle(js_mutation_event_observer_.AsWeakPtr()); |
1117 WeakHandle<syncable::TransactionObserver> transaction_observer( | 1137 WeakHandle<syncable::TransactionObserver> transaction_observer( |
(...skipping 1215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2333 void SyncManager::SyncInternal::AddObserver( | 2353 void SyncManager::SyncInternal::AddObserver( |
2334 SyncManager::Observer* observer) { | 2354 SyncManager::Observer* observer) { |
2335 observers_.AddObserver(observer); | 2355 observers_.AddObserver(observer); |
2336 } | 2356 } |
2337 | 2357 |
2338 void SyncManager::SyncInternal::RemoveObserver( | 2358 void SyncManager::SyncInternal::RemoveObserver( |
2339 SyncManager::Observer* observer) { | 2359 SyncManager::Observer* observer) { |
2340 observers_.RemoveObserver(observer); | 2360 observers_.RemoveObserver(observer); |
2341 } | 2361 } |
2342 | 2362 |
| 2363 void SyncManager::SyncInternal::SetSyncSchedulerForTest( |
| 2364 scoped_ptr<SyncScheduler> sync_scheduler) { |
| 2365 scheduler_ = sync_scheduler.Pass(); |
| 2366 } |
| 2367 |
2343 SyncStatus SyncManager::GetDetailedStatus() const { | 2368 SyncStatus SyncManager::GetDetailedStatus() const { |
2344 return data_->GetStatus(); | 2369 return data_->GetStatus(); |
2345 } | 2370 } |
2346 | 2371 |
2347 void SyncManager::SaveChanges() { | 2372 void SyncManager::SaveChanges() { |
2348 DCHECK(thread_checker_.CalledOnValidThread()); | 2373 DCHECK(thread_checker_.CalledOnValidThread()); |
2349 data_->SaveChanges(); | 2374 data_->SaveChanges(); |
2350 } | 2375 } |
2351 | 2376 |
2352 void SyncManager::SyncInternal::SaveChanges() { | 2377 void SyncManager::SyncInternal::SaveChanges() { |
(...skipping 10 matching lines...) Expand all Loading... |
2363 data_->UpdateCryptographerAndNigori( | 2388 data_->UpdateCryptographerAndNigori( |
2364 chrome_version, | 2389 chrome_version, |
2365 done_callback); | 2390 done_callback); |
2366 } | 2391 } |
2367 | 2392 |
2368 TimeDelta SyncManager::GetNudgeDelayTimeDelta( | 2393 TimeDelta SyncManager::GetNudgeDelayTimeDelta( |
2369 const ModelType& model_type) { | 2394 const ModelType& model_type) { |
2370 return data_->GetNudgeDelayTimeDelta(model_type); | 2395 return data_->GetNudgeDelayTimeDelta(model_type); |
2371 } | 2396 } |
2372 | 2397 |
| 2398 void SyncManager::SetSyncSchedulerForTest(scoped_ptr<SyncScheduler> scheduler) { |
| 2399 data_->SetSyncSchedulerForTest(scheduler.Pass()); |
| 2400 } |
| 2401 |
2373 syncer::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const { | 2402 syncer::ModelTypeSet SyncManager::GetEncryptedDataTypesForTest() const { |
2374 ReadTransaction trans(FROM_HERE, GetUserShare()); | 2403 ReadTransaction trans(FROM_HERE, GetUserShare()); |
2375 return GetEncryptedTypes(&trans); | 2404 return GetEncryptedTypes(&trans); |
2376 } | 2405 } |
2377 | 2406 |
2378 bool SyncManager::ReceivedExperiment(syncer::Experiments* experiments) | 2407 bool SyncManager::ReceivedExperiment(syncer::Experiments* experiments) |
2379 const { | 2408 const { |
2380 ReadTransaction trans(FROM_HERE, GetUserShare()); | 2409 ReadTransaction trans(FROM_HERE, GetUserShare()); |
2381 ReadNode node(&trans); | 2410 ReadNode node(&trans); |
2382 if (node.InitByTagLookup(kNigoriTag) != syncer::BaseNode::INIT_OK) { | 2411 if (node.InitByTagLookup(kNigoriTag) != syncer::BaseNode::INIT_OK) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2452 bool InitialSyncEndedForTypes(syncer::ModelTypeSet types, | 2481 bool InitialSyncEndedForTypes(syncer::ModelTypeSet types, |
2453 syncer::UserShare* share) { | 2482 syncer::UserShare* share) { |
2454 for (syncer::ModelTypeSet::Iterator i = types.First(); | 2483 for (syncer::ModelTypeSet::Iterator i = types.First(); |
2455 i.Good(); i.Inc()) { | 2484 i.Good(); i.Inc()) { |
2456 if (!share->directory->initial_sync_ended_for_type(i.Get())) | 2485 if (!share->directory->initial_sync_ended_for_type(i.Get())) |
2457 return false; | 2486 return false; |
2458 } | 2487 } |
2459 return true; | 2488 return true; |
2460 } | 2489 } |
2461 | 2490 |
2462 syncer::ModelTypeSet GetTypesWithEmptyProgressMarkerToken( | |
2463 syncer::ModelTypeSet types, | |
2464 syncer::UserShare* share) { | |
2465 syncer::ModelTypeSet result; | |
2466 for (syncer::ModelTypeSet::Iterator i = types.First(); | |
2467 i.Good(); i.Inc()) { | |
2468 sync_pb::DataTypeProgressMarker marker; | |
2469 share->directory->GetDownloadProgress(i.Get(), &marker); | |
2470 | |
2471 if (marker.token().empty()) | |
2472 result.Put(i.Get()); | |
2473 | |
2474 } | |
2475 return result; | |
2476 } | |
2477 | |
2478 } // namespace syncer | 2491 } // namespace syncer |
OLD | NEW |