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 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 SyncManager::SyncManager(const std::string& name) | 688 SyncManager::SyncManager(const std::string& name) |
688 : data_(new SyncInternal(name)) {} | 689 : data_(new SyncInternal(name)) {} |
689 | 690 |
690 bool SyncManager::Init( | 691 bool SyncManager::Init( |
691 const FilePath& database_location, | 692 const FilePath& database_location, |
692 const WeakHandle<JsEventHandler>& event_handler, | 693 const WeakHandle<JsEventHandler>& event_handler, |
693 const std::string& sync_server_and_path, | 694 const std::string& sync_server_and_path, |
694 int sync_server_port, | 695 int sync_server_port, |
695 bool use_ssl, | 696 bool use_ssl, |
696 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 697 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
697 HttpPostProviderFactory* post_factory, | 698 scoped_ptr<HttpPostProviderFactory> post_factory, |
698 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, | 699 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, |
699 const std::vector<syncer::ModelSafeWorker*>& workers, | 700 const std::vector<syncer::ModelSafeWorker*>& workers, |
700 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, | 701 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, |
701 ChangeDelegate* change_delegate, | 702 ChangeDelegate* change_delegate, |
702 const SyncCredentials& credentials, | 703 const SyncCredentials& credentials, |
703 syncer::SyncNotifier* sync_notifier, | 704 scoped_ptr<syncer::SyncNotifier> sync_notifier, |
704 const std::string& restored_key_for_bootstrapping, | 705 const std::string& restored_key_for_bootstrapping, |
705 TestingMode testing_mode, | 706 TestingMode testing_mode, |
706 Encryptor* encryptor, | 707 Encryptor* encryptor, |
707 UnrecoverableErrorHandler* unrecoverable_error_handler, | 708 UnrecoverableErrorHandler* unrecoverable_error_handler, |
708 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { | 709 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { |
709 DCHECK(thread_checker_.CalledOnValidThread()); | 710 DCHECK(thread_checker_.CalledOnValidThread()); |
710 DCHECK(post_factory); | 711 DCHECK(post_factory.get()); |
711 DVLOG(1) << "SyncManager starting Init..."; | 712 DVLOG(1) << "SyncManager starting Init..."; |
712 std::string server_string(sync_server_and_path); | 713 std::string server_string(sync_server_and_path); |
713 return data_->Init(database_location, | 714 return data_->Init(database_location, |
714 event_handler, | 715 event_handler, |
715 server_string, | 716 server_string, |
716 sync_server_port, | 717 sync_server_port, |
717 use_ssl, | 718 use_ssl, |
718 blocking_task_runner, | 719 blocking_task_runner, |
719 post_factory, | 720 post_factory.Pass(), |
720 model_safe_routing_info, | 721 model_safe_routing_info, |
721 workers, | 722 workers, |
722 extensions_activity_monitor, | 723 extensions_activity_monitor, |
723 change_delegate, | 724 change_delegate, |
724 credentials, | 725 credentials, |
725 sync_notifier, | 726 sync_notifier.Pass(), |
726 restored_key_for_bootstrapping, | 727 restored_key_for_bootstrapping, |
727 testing_mode, | 728 testing_mode, |
728 encryptor, | 729 encryptor, |
729 unrecoverable_error_handler, | 730 unrecoverable_error_handler, |
730 report_unrecoverable_error_function); | 731 report_unrecoverable_error_function); |
731 } | 732 } |
732 | 733 |
733 void SyncManager::UpdateCredentials(const SyncCredentials& credentials) { | 734 void SyncManager::UpdateCredentials(const SyncCredentials& credentials) { |
734 DCHECK(thread_checker_.CalledOnValidThread()); | 735 DCHECK(thread_checker_.CalledOnValidThread()); |
735 data_->UpdateCredentials(credentials); | 736 data_->UpdateCredentials(credentials); |
736 } | 737 } |
737 | 738 |
738 void SyncManager::UpdateEnabledTypes(const ModelTypeSet& enabled_types) { | 739 void SyncManager::UpdateEnabledTypes(const ModelTypeSet& enabled_types) { |
739 DCHECK(thread_checker_.CalledOnValidThread()); | 740 DCHECK(thread_checker_.CalledOnValidThread()); |
740 data_->UpdateEnabledTypes(enabled_types); | 741 data_->UpdateEnabledTypes(enabled_types); |
741 } | 742 } |
742 | 743 |
743 void SyncManager::ThrowUnrecoverableError() { | 744 void SyncManager::ThrowUnrecoverableError() { |
744 DCHECK(thread_checker_.CalledOnValidThread()); | 745 DCHECK(thread_checker_.CalledOnValidThread()); |
745 ReadTransaction trans(FROM_HERE, GetUserShare()); | 746 ReadTransaction trans(FROM_HERE, GetUserShare()); |
746 trans.GetWrappedTrans()->OnUnrecoverableError( | 747 trans.GetWrappedTrans()->OnUnrecoverableError( |
747 FROM_HERE, "Simulating unrecoverable error for testing purposes."); | 748 FROM_HERE, "Simulating unrecoverable error for testing purposes."); |
748 } | 749 } |
749 | 750 |
750 syncer::ModelTypeSet SyncManager::InitialSyncEndedTypes() { | 751 syncer::ModelTypeSet SyncManager::InitialSyncEndedTypes() { |
751 return data_->InitialSyncEndedTypes(); | 752 return data_->InitialSyncEndedTypes(); |
752 } | 753 } |
753 | 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 |
754 void SyncManager::StartSyncingNormally( | 770 void SyncManager::StartSyncingNormally( |
755 const syncer::ModelSafeRoutingInfo& routing_info) { | 771 const syncer::ModelSafeRoutingInfo& routing_info) { |
756 DCHECK(thread_checker_.CalledOnValidThread()); | 772 DCHECK(thread_checker_.CalledOnValidThread()); |
757 data_->StartSyncingNormally(routing_info); | 773 data_->StartSyncingNormally(routing_info); |
758 } | 774 } |
759 | 775 |
760 void SyncManager::SetEncryptionPassphrase(const std::string& passphrase, | 776 void SyncManager::SetEncryptionPassphrase(const std::string& passphrase, |
761 bool is_explicit) { | 777 bool is_explicit) { |
762 DCHECK(thread_checker_.CalledOnValidThread()); | 778 DCHECK(thread_checker_.CalledOnValidThread()); |
763 data_->SetEncryptionPassphrase(passphrase, is_explicit); | 779 data_->SetEncryptionPassphrase(passphrase, is_explicit); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
830 | 846 |
831 } | 847 } |
832 | 848 |
833 bool SyncManager::SyncInternal::Init( | 849 bool SyncManager::SyncInternal::Init( |
834 const FilePath& database_location, | 850 const FilePath& database_location, |
835 const WeakHandle<JsEventHandler>& event_handler, | 851 const WeakHandle<JsEventHandler>& event_handler, |
836 const std::string& sync_server_and_path, | 852 const std::string& sync_server_and_path, |
837 int port, | 853 int port, |
838 bool use_ssl, | 854 bool use_ssl, |
839 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 855 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
840 HttpPostProviderFactory* post_factory, | 856 scoped_ptr<HttpPostProviderFactory> post_factory, |
841 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, | 857 const syncer::ModelSafeRoutingInfo& model_safe_routing_info, |
842 const std::vector<syncer::ModelSafeWorker*>& workers, | 858 const std::vector<syncer::ModelSafeWorker*>& workers, |
843 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, | 859 syncer::ExtensionsActivityMonitor* extensions_activity_monitor, |
844 ChangeDelegate* change_delegate, | 860 ChangeDelegate* change_delegate, |
845 const SyncCredentials& credentials, | 861 const SyncCredentials& credentials, |
846 syncer::SyncNotifier* sync_notifier, | 862 scoped_ptr<syncer::SyncNotifier> sync_notifier, |
847 const std::string& restored_key_for_bootstrapping, | 863 const std::string& restored_key_for_bootstrapping, |
848 TestingMode testing_mode, | 864 TestingMode testing_mode, |
849 Encryptor* encryptor, | 865 Encryptor* encryptor, |
850 UnrecoverableErrorHandler* unrecoverable_error_handler, | 866 UnrecoverableErrorHandler* unrecoverable_error_handler, |
851 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { | 867 ReportUnrecoverableErrorFunction report_unrecoverable_error_function) { |
852 CHECK(!initialized_); | 868 CHECK(!initialized_); |
853 | 869 |
854 DCHECK(thread_checker_.CalledOnValidThread()); | 870 DCHECK(thread_checker_.CalledOnValidThread()); |
855 | 871 |
856 DVLOG(1) << "Starting SyncInternal initialization."; | 872 DVLOG(1) << "Starting SyncInternal initialization."; |
857 | 873 |
858 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); | 874 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); |
859 | 875 |
860 blocking_task_runner_ = blocking_task_runner; | 876 blocking_task_runner_ = blocking_task_runner; |
861 | 877 |
862 change_delegate_ = change_delegate; | 878 change_delegate_ = change_delegate; |
863 testing_mode_ = testing_mode; | 879 testing_mode_ = testing_mode; |
864 | 880 |
865 sync_notifier_.reset(sync_notifier); | 881 sync_notifier_ = sync_notifier.Pass(); |
866 | 882 |
867 AddObserver(&js_sync_manager_observer_); | 883 AddObserver(&js_sync_manager_observer_); |
868 SetJsEventHandler(event_handler); | 884 SetJsEventHandler(event_handler); |
869 | 885 |
870 AddObserver(&debug_info_event_listener_); | 886 AddObserver(&debug_info_event_listener_); |
871 | 887 |
872 database_path_ = database_location.Append( | 888 database_path_ = database_location.Append( |
873 syncable::Directory::kSyncDatabaseFilename); | 889 syncable::Directory::kSyncDatabaseFilename); |
874 encryptor_ = encryptor; | 890 encryptor_ = encryptor; |
875 unrecoverable_error_handler_ = unrecoverable_error_handler; | 891 unrecoverable_error_handler_ = unrecoverable_error_handler; |
(...skipping 13 matching lines...) Expand all Loading... |
889 } | 905 } |
890 | 906 |
891 DCHECK(backing_store); | 907 DCHECK(backing_store); |
892 share_.directory.reset( | 908 share_.directory.reset( |
893 new syncable::Directory(encryptor_, | 909 new syncable::Directory(encryptor_, |
894 unrecoverable_error_handler_, | 910 unrecoverable_error_handler_, |
895 report_unrecoverable_error_function_, | 911 report_unrecoverable_error_function_, |
896 backing_store)); | 912 backing_store)); |
897 | 913 |
898 connection_manager_.reset(new SyncAPIServerConnectionManager( | 914 connection_manager_.reset(new SyncAPIServerConnectionManager( |
899 sync_server_and_path, port, use_ssl, post_factory)); | 915 sync_server_and_path, port, use_ssl, post_factory.release())); |
900 | 916 |
901 net::NetworkChangeNotifier::AddIPAddressObserver(this); | 917 net::NetworkChangeNotifier::AddIPAddressObserver(this); |
902 observing_ip_address_changes_ = true; | 918 observing_ip_address_changes_ = true; |
903 | 919 |
904 connection_manager()->AddListener(this); | 920 connection_manager()->AddListener(this); |
905 | 921 |
906 // Test mode does not use a syncer context or syncer thread. | 922 // Test mode does not use a syncer context or syncer thread. |
907 if (testing_mode_ == NON_TEST) { | 923 if (testing_mode_ == NON_TEST) { |
908 // Build a SyncSessionContext and store the worker in it. | 924 // Build a SyncSessionContext and store the worker in it. |
909 DVLOG(1) << "Sync is bringing up SyncSessionContext."; | 925 DVLOG(1) << "Sync is bringing up SyncSessionContext."; |
(...skipping 1555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2465 bool InitialSyncEndedForTypes(syncer::ModelTypeSet types, | 2481 bool InitialSyncEndedForTypes(syncer::ModelTypeSet types, |
2466 syncer::UserShare* share) { | 2482 syncer::UserShare* share) { |
2467 for (syncer::ModelTypeSet::Iterator i = types.First(); | 2483 for (syncer::ModelTypeSet::Iterator i = types.First(); |
2468 i.Good(); i.Inc()) { | 2484 i.Good(); i.Inc()) { |
2469 if (!share->directory->initial_sync_ended_for_type(i.Get())) | 2485 if (!share->directory->initial_sync_ended_for_type(i.Get())) |
2470 return false; | 2486 return false; |
2471 } | 2487 } |
2472 return true; | 2488 return true; |
2473 } | 2489 } |
2474 | 2490 |
2475 syncer::ModelTypeSet GetTypesWithEmptyProgressMarkerToken( | |
2476 syncer::ModelTypeSet types, | |
2477 syncer::UserShare* share) { | |
2478 syncer::ModelTypeSet result; | |
2479 for (syncer::ModelTypeSet::Iterator i = types.First(); | |
2480 i.Good(); i.Inc()) { | |
2481 sync_pb::DataTypeProgressMarker marker; | |
2482 share->directory->GetDownloadProgress(i.Get(), &marker); | |
2483 | |
2484 if (marker.token().empty()) | |
2485 result.Put(i.Get()); | |
2486 | |
2487 } | |
2488 return result; | |
2489 } | |
2490 | |
2491 } // namespace syncer | 2491 } // namespace syncer |
OLD | NEW |