OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/sync/engine/syncapi.h" | 5 #include "chrome/browser/sync/engine/syncapi.h" |
6 | 6 |
7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
8 | 8 |
9 #include <iomanip> | 9 #include <iomanip> |
10 #include <list> | 10 #include <list> |
11 #include <string> | 11 #include <string> |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 #include "chrome/browser/sync/syncable/directory_manager.h" | 47 #include "chrome/browser/sync/syncable/directory_manager.h" |
48 #include "chrome/browser/sync/syncable/syncable.h" | 48 #include "chrome/browser/sync/syncable/syncable.h" |
49 #include "chrome/browser/sync/util/character_set_converters.h" | 49 #include "chrome/browser/sync/util/character_set_converters.h" |
50 #include "chrome/browser/sync/util/closure.h" | 50 #include "chrome/browser/sync/util/closure.h" |
51 #include "chrome/browser/sync/util/crypto_helpers.h" | 51 #include "chrome/browser/sync/util/crypto_helpers.h" |
52 #include "chrome/browser/sync/util/path_helpers.h" | 52 #include "chrome/browser/sync/util/path_helpers.h" |
53 #include "chrome/browser/sync/util/user_settings.h" | 53 #include "chrome/browser/sync/util/user_settings.h" |
54 #include "chrome/common/chrome_switches.h" | 54 #include "chrome/common/chrome_switches.h" |
55 #include "chrome/common/deprecated/event_sys.h" | 55 #include "chrome/common/deprecated/event_sys.h" |
56 #include "chrome/common/net/gaia/gaia_authenticator.h" | 56 #include "chrome/common/net/gaia/gaia_authenticator.h" |
57 #include "chrome/common/net/network_change_notifier_proxy.h" | |
58 #include "chrome/common/net/notifier/listener/mediator_thread_impl.h" | 57 #include "chrome/common/net/notifier/listener/mediator_thread_impl.h" |
59 #include "chrome/common/net/notifier/listener/notification_constants.h" | 58 #include "chrome/common/net/notifier/listener/notification_constants.h" |
60 #include "chrome/common/net/notifier/listener/talk_mediator.h" | 59 #include "chrome/common/net/notifier/listener/talk_mediator.h" |
61 #include "chrome/common/net/notifier/listener/talk_mediator_impl.h" | 60 #include "chrome/common/net/notifier/listener/talk_mediator_impl.h" |
62 #include "net/base/network_change_notifier.h" | 61 #include "net/base/network_change_notifier.h" |
63 | 62 |
64 using browser_sync::AllStatus; | 63 using browser_sync::AllStatus; |
65 using browser_sync::AllStatusEvent; | 64 using browser_sync::AllStatusEvent; |
66 using browser_sync::AuthWatcher; | 65 using browser_sync::AuthWatcher; |
67 using browser_sync::AuthWatcherEvent; | 66 using browser_sync::AuthWatcherEvent; |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 DCHECK(!core_message_loop_); | 875 DCHECK(!core_message_loop_); |
877 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); | 876 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
878 } | 877 } |
879 | 878 |
880 bool Init(const FilePath& database_location, | 879 bool Init(const FilePath& database_location, |
881 const std::string& sync_server_and_path, | 880 const std::string& sync_server_and_path, |
882 int port, | 881 int port, |
883 const char* gaia_service_id, | 882 const char* gaia_service_id, |
884 const char* gaia_source, | 883 const char* gaia_source, |
885 bool use_ssl, | 884 bool use_ssl, |
886 chrome_common_net::NetworkChangeNotifierThread* | |
887 network_change_notifier_thread, | |
888 HttpPostProviderFactory* post_factory, | 885 HttpPostProviderFactory* post_factory, |
889 HttpPostProviderFactory* auth_post_factory, | 886 HttpPostProviderFactory* auth_post_factory, |
890 ModelSafeWorkerRegistrar* model_safe_worker_registrar, | 887 ModelSafeWorkerRegistrar* model_safe_worker_registrar, |
891 bool attempt_last_user_authentication, | 888 bool attempt_last_user_authentication, |
892 bool invalidate_last_user_auth_token, | 889 bool invalidate_last_user_auth_token, |
893 bool invalidate_xmpp_auth_token, | 890 bool invalidate_xmpp_auth_token, |
894 const char* user_agent, | 891 const char* user_agent, |
895 const std::string& lsid, | 892 const std::string& lsid, |
896 browser_sync::NotificationMethod notification_method); | 893 browser_sync::NotificationMethod notification_method); |
897 | 894 |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 scoped_ptr<EventListenerHookup> authwatcher_hookup_; | 1156 scoped_ptr<EventListenerHookup> authwatcher_hookup_; |
1160 | 1157 |
1161 // Our cache of a recent authentication problem. If no authentication problem | 1158 // Our cache of a recent authentication problem. If no authentication problem |
1162 // occurred, or if the last problem encountered has been cleared (by a | 1159 // occurred, or if the last problem encountered has been cleared (by a |
1163 // subsequent AuthWatcherEvent), this is set to NONE. | 1160 // subsequent AuthWatcherEvent), this is set to NONE. |
1164 AuthError::State auth_problem_; | 1161 AuthError::State auth_problem_; |
1165 | 1162 |
1166 // The sync dir_manager to which we belong. | 1163 // The sync dir_manager to which we belong. |
1167 SyncManager* const sync_manager_; | 1164 SyncManager* const sync_manager_; |
1168 | 1165 |
1169 // An object that notifies us whenever there is a network-related | |
1170 // change (e.g., disconnections). | |
1171 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | |
1172 | |
1173 // The entity that provides us with information about which types to sync. | 1166 // The entity that provides us with information about which types to sync. |
1174 // The instance is shared between the SyncManager and the Syncer. | 1167 // The instance is shared between the SyncManager and the Syncer. |
1175 ModelSafeWorkerRegistrar* registrar_; | 1168 ModelSafeWorkerRegistrar* registrar_; |
1176 | 1169 |
1177 // True if the next SyncCycle should notify peers of an update. | 1170 // True if the next SyncCycle should notify peers of an update. |
1178 bool notification_pending_; | 1171 bool notification_pending_; |
1179 | 1172 |
1180 // Set to true once Init has been called, and we know of an authenticated | 1173 // Set to true once Init has been called, and we know of an authenticated |
1181 // valid) username either from a fresh authentication attempt (as in | 1174 // valid) username either from a fresh authentication attempt (as in |
1182 // first-use case) or from a previous attempt stored in our UserSettings | 1175 // first-use case) or from a previous attempt stored in our UserSettings |
(...skipping 11 matching lines...) Expand all Loading... |
1194 SyncManager::SyncManager() { | 1187 SyncManager::SyncManager() { |
1195 data_ = new SyncInternal(this); | 1188 data_ = new SyncInternal(this); |
1196 } | 1189 } |
1197 | 1190 |
1198 bool SyncManager::Init(const FilePath& database_location, | 1191 bool SyncManager::Init(const FilePath& database_location, |
1199 const char* sync_server_and_path, | 1192 const char* sync_server_and_path, |
1200 int sync_server_port, | 1193 int sync_server_port, |
1201 const char* gaia_service_id, | 1194 const char* gaia_service_id, |
1202 const char* gaia_source, | 1195 const char* gaia_source, |
1203 bool use_ssl, | 1196 bool use_ssl, |
1204 chrome_common_net::NetworkChangeNotifierThread* | |
1205 network_change_notifier_thread, | |
1206 HttpPostProviderFactory* post_factory, | 1197 HttpPostProviderFactory* post_factory, |
1207 HttpPostProviderFactory* auth_post_factory, | 1198 HttpPostProviderFactory* auth_post_factory, |
1208 ModelSafeWorkerRegistrar* registrar, | 1199 ModelSafeWorkerRegistrar* registrar, |
1209 bool attempt_last_user_authentication, | 1200 bool attempt_last_user_authentication, |
1210 bool invalidate_last_user_auth_token, | 1201 bool invalidate_last_user_auth_token, |
1211 bool invalidate_xmpp_auth_token, | 1202 bool invalidate_xmpp_auth_token, |
1212 const char* user_agent, | 1203 const char* user_agent, |
1213 const char* lsid, | 1204 const char* lsid, |
1214 browser_sync::NotificationMethod notification_method) { | 1205 browser_sync::NotificationMethod notification_method) { |
1215 DCHECK(post_factory); | 1206 DCHECK(post_factory); |
1216 LOG(INFO) << "SyncManager starting Init..."; | 1207 LOG(INFO) << "SyncManager starting Init..."; |
1217 string server_string(sync_server_and_path); | 1208 string server_string(sync_server_and_path); |
1218 return data_->Init(database_location, | 1209 return data_->Init(database_location, |
1219 server_string, | 1210 server_string, |
1220 sync_server_port, | 1211 sync_server_port, |
1221 gaia_service_id, | 1212 gaia_service_id, |
1222 gaia_source, | 1213 gaia_source, |
1223 use_ssl, | 1214 use_ssl, |
1224 network_change_notifier_thread, | |
1225 post_factory, | 1215 post_factory, |
1226 auth_post_factory, | 1216 auth_post_factory, |
1227 registrar, | 1217 registrar, |
1228 attempt_last_user_authentication, | 1218 attempt_last_user_authentication, |
1229 invalidate_last_user_auth_token, | 1219 invalidate_last_user_auth_token, |
1230 invalidate_xmpp_auth_token, | 1220 invalidate_xmpp_auth_token, |
1231 user_agent, | 1221 user_agent, |
1232 lsid, | 1222 lsid, |
1233 notification_method); | 1223 notification_method); |
1234 } | 1224 } |
(...skipping 29 matching lines...) Expand all Loading... |
1264 return data_->username_for_share(); | 1254 return data_->username_for_share(); |
1265 } | 1255 } |
1266 | 1256 |
1267 bool SyncManager::SyncInternal::Init( | 1257 bool SyncManager::SyncInternal::Init( |
1268 const FilePath& database_location, | 1258 const FilePath& database_location, |
1269 const std::string& sync_server_and_path, | 1259 const std::string& sync_server_and_path, |
1270 int port, | 1260 int port, |
1271 const char* gaia_service_id, | 1261 const char* gaia_service_id, |
1272 const char* gaia_source, | 1262 const char* gaia_source, |
1273 bool use_ssl, | 1263 bool use_ssl, |
1274 chrome_common_net::NetworkChangeNotifierThread* | |
1275 network_change_notifier_thread, | |
1276 HttpPostProviderFactory* post_factory, | 1264 HttpPostProviderFactory* post_factory, |
1277 HttpPostProviderFactory* auth_post_factory, | 1265 HttpPostProviderFactory* auth_post_factory, |
1278 ModelSafeWorkerRegistrar* model_safe_worker_registrar, | 1266 ModelSafeWorkerRegistrar* model_safe_worker_registrar, |
1279 bool attempt_last_user_authentication, | 1267 bool attempt_last_user_authentication, |
1280 bool invalidate_last_user_auth_token, | 1268 bool invalidate_last_user_auth_token, |
1281 bool invalidate_xmpp_auth_token, | 1269 bool invalidate_xmpp_auth_token, |
1282 const char* user_agent, | 1270 const char* user_agent, |
1283 const std::string& lsid, | 1271 const std::string& lsid, |
1284 browser_sync::NotificationMethod notification_method) { | 1272 browser_sync::NotificationMethod notification_method) { |
1285 | 1273 |
(...skipping 17 matching lines...) Expand all Loading... |
1303 share_.dir_manager.reset(new DirectoryManager(database_location)); | 1291 share_.dir_manager.reset(new DirectoryManager(database_location)); |
1304 | 1292 |
1305 string client_id = user_settings_->GetClientId(); | 1293 string client_id = user_settings_->GetClientId(); |
1306 connection_manager_.reset(new SyncAPIServerConnectionManager( | 1294 connection_manager_.reset(new SyncAPIServerConnectionManager( |
1307 sync_server_and_path, port, use_ssl, user_agent, client_id, | 1295 sync_server_and_path, port, use_ssl, user_agent, client_id, |
1308 post_factory)); | 1296 post_factory)); |
1309 | 1297 |
1310 // Watch various objects for aggregated status. | 1298 // Watch various objects for aggregated status. |
1311 allstatus_.WatchConnectionManager(connection_manager()); | 1299 allstatus_.WatchConnectionManager(connection_manager()); |
1312 | 1300 |
1313 network_change_notifier_.reset( | 1301 net::NetworkChangeNotifier::AddObserver(this); |
1314 new chrome_common_net::NetworkChangeNotifierProxy( | 1302 // TODO(akalin): CheckServerReachable() can block, which may cause jank if we |
1315 network_change_notifier_thread)); | 1303 // try to shut down sync. Fix this. |
1316 network_change_notifier_->AddObserver(this); | |
1317 // TODO(akalin): CheckServerReachable() can block, which may cause | |
1318 // jank if we try to shut down sync. Fix this. | |
1319 connection_manager()->CheckServerReachable(); | 1304 connection_manager()->CheckServerReachable(); |
1320 | 1305 |
1321 // NOTIFICATION_SERVER uses a substantially different notification | 1306 // NOTIFICATION_SERVER uses a substantially different notification method, so |
1322 // method, so it has its own MediatorThread implementation. | 1307 // it has its own MediatorThread implementation. Everything else just uses |
1323 // Everything else just uses MediatorThreadImpl. | 1308 // MediatorThreadImpl. |
1324 notifier::MediatorThread* mediator_thread = | 1309 notifier::MediatorThread* mediator_thread = |
1325 (notification_method == browser_sync::NOTIFICATION_SERVER) ? | 1310 (notification_method == browser_sync::NOTIFICATION_SERVER) ? |
1326 static_cast<notifier::MediatorThread*>( | 1311 new sync_notifier::ServerNotifierThread() : |
1327 new sync_notifier::ServerNotifierThread( | 1312 new notifier::MediatorThreadImpl(); |
1328 network_change_notifier_thread)) : | |
1329 static_cast<notifier::MediatorThread*>( | |
1330 new notifier::MediatorThreadImpl(network_change_notifier_thread)); | |
1331 const bool kInitializeSsl = true; | 1313 const bool kInitializeSsl = true; |
1332 const bool kConnectImmediately = false; | 1314 const bool kConnectImmediately = false; |
1333 talk_mediator_.reset(new TalkMediatorImpl( | 1315 talk_mediator_.reset(new TalkMediatorImpl(mediator_thread, kInitializeSsl, |
1334 mediator_thread, | 1316 kConnectImmediately, invalidate_xmpp_auth_token)); |
1335 kInitializeSsl, kConnectImmediately, invalidate_xmpp_auth_token)); | |
1336 if (notification_method != browser_sync::NOTIFICATION_LEGACY && | 1317 if (notification_method != browser_sync::NOTIFICATION_LEGACY && |
1337 notification_method != browser_sync::NOTIFICATION_SERVER) { | 1318 notification_method != browser_sync::NOTIFICATION_SERVER) { |
1338 if (notification_method == browser_sync::NOTIFICATION_TRANSITIONAL) { | 1319 if (notification_method == browser_sync::NOTIFICATION_TRANSITIONAL) { |
1339 talk_mediator_->AddSubscribedServiceUrl( | 1320 talk_mediator_->AddSubscribedServiceUrl( |
1340 browser_sync::kSyncLegacyServiceUrl); | 1321 browser_sync::kSyncLegacyServiceUrl); |
1341 } | 1322 } |
1342 talk_mediator_->AddSubscribedServiceUrl(browser_sync::kSyncServiceUrl); | 1323 talk_mediator_->AddSubscribedServiceUrl(browser_sync::kSyncServiceUrl); |
1343 } | 1324 } |
1344 | 1325 |
1345 // Listen to TalkMediator events ourselves | 1326 // Listen to TalkMediator events ourselves |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 // HandleAuthWatcherEvent(), and HandleTalkMediatorEvent() for the | 1569 // HandleAuthWatcherEvent(), and HandleTalkMediatorEvent() for the |
1589 // events that may be posted.) | 1570 // events that may be posted.) |
1590 { | 1571 { |
1591 CHECK(core_message_loop_); | 1572 CHECK(core_message_loop_); |
1592 bool old_state = core_message_loop_->NestableTasksAllowed(); | 1573 bool old_state = core_message_loop_->NestableTasksAllowed(); |
1593 core_message_loop_->SetNestableTasksAllowed(true); | 1574 core_message_loop_->SetNestableTasksAllowed(true); |
1594 core_message_loop_->RunAllPending(); | 1575 core_message_loop_->RunAllPending(); |
1595 core_message_loop_->SetNestableTasksAllowed(old_state); | 1576 core_message_loop_->SetNestableTasksAllowed(old_state); |
1596 } | 1577 } |
1597 | 1578 |
1598 if (network_change_notifier_.get()) { | 1579 net::NetworkChangeNotifier::RemoveObserver(this); |
1599 network_change_notifier_->RemoveObserver(this); | |
1600 network_change_notifier_.reset(); | |
1601 } | |
1602 | 1580 |
1603 if (dir_manager()) { | 1581 if (dir_manager()) { |
1604 dir_manager()->FinalSaveChangesForAll(); | 1582 dir_manager()->FinalSaveChangesForAll(); |
1605 dir_manager()->Close(username_for_share()); | 1583 dir_manager()->Close(username_for_share()); |
1606 } | 1584 } |
1607 | 1585 |
1608 // Reset the DirectoryManager and UserSettings so they relinquish sqlite | 1586 // Reset the DirectoryManager and UserSettings so they relinquish sqlite |
1609 // handles to backing files. | 1587 // handles to backing files. |
1610 share_.dir_manager.reset(); | 1588 share_.dir_manager.reset(); |
1611 user_settings_.reset(); | 1589 user_settings_.reset(); |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2120 UserShare* SyncManager::GetUserShare() const { | 2098 UserShare* SyncManager::GetUserShare() const { |
2121 DCHECK(data_->initialized()) << "GetUserShare requires initialization!"; | 2099 DCHECK(data_->initialized()) << "GetUserShare requires initialization!"; |
2122 return data_->GetUserShare(); | 2100 return data_->GetUserShare(); |
2123 } | 2101 } |
2124 | 2102 |
2125 SyncManager::ExtraAutofillChangeRecordData::~ExtraAutofillChangeRecordData() { | 2103 SyncManager::ExtraAutofillChangeRecordData::~ExtraAutofillChangeRecordData() { |
2126 delete pre_deletion_data; | 2104 delete pre_deletion_data; |
2127 } | 2105 } |
2128 | 2106 |
2129 } // namespace sync_api | 2107 } // namespace sync_api |
OLD | NEW |