Chromium Code Reviews| 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/sync_manager.h" | 5 #include "sync/internal_api/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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 51 #include "sync/protocol/sync.pb.h" | 51 #include "sync/protocol/sync.pb.h" |
| 52 #include "sync/syncable/directory_change_delegate.h" | 52 #include "sync/syncable/directory_change_delegate.h" |
| 53 #include "sync/syncable/syncable.h" | 53 #include "sync/syncable/syncable.h" |
| 54 #include "sync/util/cryptographer.h" | 54 #include "sync/util/cryptographer.h" |
| 55 #include "sync/util/experiments.h" | 55 #include "sync/util/experiments.h" |
| 56 #include "sync/util/get_session_name.h" | 56 #include "sync/util/get_session_name.h" |
| 57 #include "sync/util/time.h" | 57 #include "sync/util/time.h" |
| 58 | 58 |
| 59 using base::TimeDelta; | 59 using base::TimeDelta; |
| 60 using browser_sync::AllStatus; | 60 using browser_sync::AllStatus; |
| 61 using browser_sync::ConfigureParams; | |
| 61 using browser_sync::Cryptographer; | 62 using browser_sync::Cryptographer; |
| 62 using browser_sync::Encryptor; | 63 using browser_sync::Encryptor; |
| 63 using browser_sync::JsArgList; | 64 using browser_sync::JsArgList; |
| 64 using browser_sync::JsBackend; | 65 using browser_sync::JsBackend; |
| 65 using browser_sync::JsEventDetails; | 66 using browser_sync::JsEventDetails; |
| 66 using browser_sync::JsEventHandler; | 67 using browser_sync::JsEventHandler; |
| 67 using browser_sync::JsEventHandler; | 68 using browser_sync::JsEventHandler; |
| 68 using browser_sync::JsReplyHandler; | 69 using browser_sync::JsReplyHandler; |
| 69 using browser_sync::JsMutationEventObserver; | 70 using browser_sync::JsMutationEventObserver; |
| 70 using browser_sync::JsSyncManagerObserver; | 71 using browser_sync::JsSyncManagerObserver; |
| (...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 835 | 836 |
| 836 bool SyncManager::EncryptEverythingEnabledForTest() const { | 837 bool SyncManager::EncryptEverythingEnabledForTest() const { |
| 837 ReadTransaction trans(FROM_HERE, GetUserShare()); | 838 ReadTransaction trans(FROM_HERE, GetUserShare()); |
| 838 return trans.GetCryptographer()->encrypt_everything(); | 839 return trans.GetCryptographer()->encrypt_everything(); |
| 839 } | 840 } |
| 840 | 841 |
| 841 bool SyncManager::IsUsingExplicitPassphrase() { | 842 bool SyncManager::IsUsingExplicitPassphrase() { |
| 842 return data_ && data_->IsUsingExplicitPassphrase(); | 843 return data_ && data_->IsUsingExplicitPassphrase(); |
| 843 } | 844 } |
| 844 | 845 |
| 845 void SyncManager::RequestCleanupDisabledTypes( | |
| 846 const browser_sync::ModelSafeRoutingInfo& routing_info) { | |
| 847 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 848 if (data_->scheduler()) { | |
| 849 data_->session_context()->set_routing_info(routing_info); | |
| 850 data_->scheduler()->CleanupDisabledTypes(); | |
| 851 } | |
| 852 } | |
| 853 | |
| 854 void SyncManager::RequestClearServerData() { | 846 void SyncManager::RequestClearServerData() { |
| 855 DCHECK(thread_checker_.CalledOnValidThread()); | 847 DCHECK(thread_checker_.CalledOnValidThread()); |
| 856 if (data_->scheduler()) | 848 if (data_->scheduler()) |
| 857 data_->scheduler()->ClearUserData(); | 849 data_->scheduler()->ClearUserData(); |
| 858 } | 850 } |
| 859 | 851 |
| 860 void SyncManager::RequestConfig( | 852 void SyncManager::ConfigureSyncer( |
| 861 const browser_sync::ModelSafeRoutingInfo& routing_info, | 853 ConfigureReason reason, |
| 862 const ModelTypeSet& types, ConfigureReason reason) { | 854 const syncable::ModelTypeSet& types_to_config, |
| 855 const browser_sync::ModelSafeRoutingInfo& new_routing_info, | |
| 856 const base::Closure& ready_task, | |
| 857 const base::Closure& retry_task) { | |
| 863 DCHECK(thread_checker_.CalledOnValidThread()); | 858 DCHECK(thread_checker_.CalledOnValidThread()); |
| 859 DCHECK(!ready_task.is_null()); | |
| 860 DCHECK(!retry_task.is_null()); | |
| 861 | |
| 862 // TODO(zea): set this based on whether cryptographer has keystore | |
|
tim (not reviewing)
2012/06/14 00:26:53
bug?
Also... dare I say it... enum vs bool?
Nicolas Zea
2012/06/14 22:35:52
:-/ Done to both.
| |
| 863 // encryption key or not (requires opening a transaction). | |
| 864 bool need_encryption_key = false; | |
| 865 | |
| 866 ConfigureParams params(GetSourceFromReason(reason), | |
| 867 types_to_config, | |
| 868 new_routing_info, | |
| 869 need_encryption_key, | |
| 870 ready_task); | |
| 871 | |
| 872 // Returns false if a retry has been scheduled. Either way, will invoke the | |
| 873 // ready task when the configure job completes. | |
| 874 if (!DoConfigureSyncer(params)) | |
| 875 retry_task.Run(); | |
| 876 } | |
| 877 | |
| 878 bool SyncManager::DoConfigureSyncer(const ConfigureParams& params) { | |
| 864 if (!data_->scheduler()) { | 879 if (!data_->scheduler()) { |
| 865 LOG(INFO) | 880 LOG(INFO) |
| 866 << "SyncManager::RequestConfig: bailing out because scheduler is " | 881 << "SyncManager::DoConfigureSyncer: could not configure because " |
| 867 << "null"; | 882 << "scheduler is null"; |
| 868 return; | 883 params.ready_task.Run(); |
| 884 return true; | |
| 869 } | 885 } |
| 870 StartConfigurationMode(base::Closure()); | |
| 871 data_->session_context()->set_routing_info(routing_info); | |
| 872 data_->scheduler()->ScheduleConfiguration(types, GetSourceFromReason(reason)); | |
| 873 } | |
| 874 | 886 |
| 875 void SyncManager::StartConfigurationMode(const base::Closure& callback) { | 887 data_->scheduler()->Start(SyncScheduler::CONFIGURATION_MODE); |
| 876 DCHECK(thread_checker_.CalledOnValidThread()); | 888 return data_->scheduler()->ScheduleConfiguration(params); |
| 877 if (!data_->scheduler()) { | |
| 878 LOG(INFO) | |
| 879 << "SyncManager::StartConfigurationMode: could not start " | |
| 880 << "configuration mode because because scheduler is null"; | |
| 881 return; | |
| 882 } | |
| 883 data_->scheduler()->Start( | |
| 884 browser_sync::SyncScheduler::CONFIGURATION_MODE, callback); | |
| 885 } | 889 } |
| 886 | 890 |
| 887 bool SyncManager::SyncInternal::Init( | 891 bool SyncManager::SyncInternal::Init( |
| 888 const FilePath& database_location, | 892 const FilePath& database_location, |
| 889 const WeakHandle<JsEventHandler>& event_handler, | 893 const WeakHandle<JsEventHandler>& event_handler, |
| 890 const std::string& sync_server_and_path, | 894 const std::string& sync_server_and_path, |
| 891 int port, | 895 int port, |
| 892 bool use_ssl, | 896 bool use_ssl, |
| 893 const scoped_refptr<base::TaskRunner>& blocking_task_runner, | 897 const scoped_refptr<base::TaskRunner>& blocking_task_runner, |
| 894 HttpPostProviderFactory* post_factory, | 898 HttpPostProviderFactory* post_factory, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 959 &debug_info_event_listener_, | 963 &debug_info_event_listener_, |
| 960 &traffic_recorder_)); | 964 &traffic_recorder_)); |
| 961 session_context()->set_account_name(credentials.email); | 965 session_context()->set_account_name(credentials.email); |
| 962 scheduler_.reset(new SyncScheduler(name_, session_context(), new Syncer())); | 966 scheduler_.reset(new SyncScheduler(name_, session_context(), new Syncer())); |
| 963 } | 967 } |
| 964 | 968 |
| 965 bool signed_in = SignIn(credentials); | 969 bool signed_in = SignIn(credentials); |
| 966 | 970 |
| 967 if (signed_in) { | 971 if (signed_in) { |
| 968 if (scheduler()) { | 972 if (scheduler()) { |
| 969 scheduler()->Start( | 973 scheduler()->Start(SyncScheduler::CONFIGURATION_MODE); |
| 970 browser_sync::SyncScheduler::CONFIGURATION_MODE, base::Closure()); | |
| 971 } | 974 } |
| 972 | 975 |
| 973 initialized_ = true; | 976 initialized_ = true; |
| 974 | 977 |
| 975 // Cryptographer should only be accessed while holding a | 978 // Cryptographer should only be accessed while holding a |
| 976 // transaction. Grabbing the user share for the transaction | 979 // transaction. Grabbing the user share for the transaction |
| 977 // checks the initialization state, so this must come after | 980 // checks the initialization state, so this must come after |
| 978 // |initialized_| is set to true. | 981 // |initialized_| is set to true. |
| 979 ReadTransaction trans(FROM_HERE, GetUserShare()); | 982 ReadTransaction trans(FROM_HERE, GetUserShare()); |
| 980 trans.GetCryptographer()->Bootstrap(restored_key_for_bootstrapping); | 983 trans.GetCryptographer()->Bootstrap(restored_key_for_bootstrapping); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1134 allstatus_.SetCryptographerReady(cryptographer->is_ready()); | 1137 allstatus_.SetCryptographerReady(cryptographer->is_ready()); |
| 1135 allstatus_.SetCryptoHasPendingKeys(cryptographer->has_pending_keys()); | 1138 allstatus_.SetCryptoHasPendingKeys(cryptographer->has_pending_keys()); |
| 1136 debug_info_event_listener_.SetCryptographerReady(cryptographer->is_ready()); | 1139 debug_info_event_listener_.SetCryptographerReady(cryptographer->is_ready()); |
| 1137 debug_info_event_listener_.SetCrytographerHasPendingKeys( | 1140 debug_info_event_listener_.SetCrytographerHasPendingKeys( |
| 1138 cryptographer->has_pending_keys()); | 1141 cryptographer->has_pending_keys()); |
| 1139 } | 1142 } |
| 1140 | 1143 |
| 1141 void SyncManager::SyncInternal::StartSyncingNormally( | 1144 void SyncManager::SyncInternal::StartSyncingNormally( |
| 1142 const browser_sync::ModelSafeRoutingInfo& routing_info) { | 1145 const browser_sync::ModelSafeRoutingInfo& routing_info) { |
| 1143 // Start the sync scheduler. | 1146 // Start the sync scheduler. |
| 1144 if (scheduler()) { // NULL during certain unittests. | 1147 if (scheduler()) { // NULL during certain unittests. |
| 1148 // TODO(sync): We always want the newest set of routes when we switch back | |
| 1149 // to normal mode. Figure out how to enforce set_routing_info is always | |
|
tim (not reviewing)
2012/06/14 00:26:53
Hmm... what do you want to figure out here, exactl
Nicolas Zea
2012/06/14 22:35:52
Eventually, I'd like to see the updating of the co
tim (not reviewing)
2012/06/15 14:59:36
I agree it's clunky to have to remember to set it
Nicolas Zea
2012/06/15 21:23:36
I think the simplest option might be passing the r
tim (not reviewing)
2012/06/15 21:58:24
OK. But I think there are friendless options :) I
| |
| 1150 // appropriately set and that it's only modified when switching to normal | |
| 1151 // mode. | |
| 1145 session_context()->set_routing_info(routing_info); | 1152 session_context()->set_routing_info(routing_info); |
| 1146 scheduler()->Start(SyncScheduler::NORMAL_MODE, base::Closure()); | 1153 scheduler()->Start(SyncScheduler::NORMAL_MODE); |
| 1147 } | 1154 } |
| 1148 } | 1155 } |
| 1149 | 1156 |
| 1150 bool SyncManager::SyncInternal::OpenDirectory() { | 1157 bool SyncManager::SyncInternal::OpenDirectory() { |
| 1151 DCHECK(!initialized_) << "Should only happen once"; | 1158 DCHECK(!initialized_) << "Should only happen once"; |
| 1152 | 1159 |
| 1153 // Set before Open(). | 1160 // Set before Open(). |
| 1154 change_observer_ = | 1161 change_observer_ = |
| 1155 browser_sync::MakeWeakHandle(js_mutation_event_observer_.AsWeakPtr()); | 1162 browser_sync::MakeWeakHandle(js_mutation_event_observer_.AsWeakPtr()); |
| 1156 WeakHandle<syncable::TransactionObserver> transaction_observer( | 1163 WeakHandle<syncable::TransactionObserver> transaction_observer( |
| (...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2502 share->directory->GetDownloadProgress(i.Get(), &marker); | 2509 share->directory->GetDownloadProgress(i.Get(), &marker); |
| 2503 | 2510 |
| 2504 if (marker.token().empty()) | 2511 if (marker.token().empty()) |
| 2505 result.Put(i.Get()); | 2512 result.Put(i.Get()); |
| 2506 | 2513 |
| 2507 } | 2514 } |
| 2508 return result; | 2515 return result; |
| 2509 } | 2516 } |
| 2510 | 2517 |
| 2511 } // namespace sync_api | 2518 } // namespace sync_api |
| OLD | NEW |