Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: trunk/src/sync/internal_api/sync_manager_impl.cc

Issue 17610004: Revert 208315 "Make use of InvalidationService" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_impl.h" 5 #include "sync/internal_api/sync_manager_impl.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 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 const base::FilePath& database_location, 342 const base::FilePath& database_location,
343 const WeakHandle<JsEventHandler>& event_handler, 343 const WeakHandle<JsEventHandler>& event_handler,
344 const std::string& sync_server_and_path, 344 const std::string& sync_server_and_path,
345 int port, 345 int port,
346 bool use_ssl, 346 bool use_ssl,
347 scoped_ptr<HttpPostProviderFactory> post_factory, 347 scoped_ptr<HttpPostProviderFactory> post_factory,
348 const std::vector<ModelSafeWorker*>& workers, 348 const std::vector<ModelSafeWorker*>& workers,
349 ExtensionsActivityMonitor* extensions_activity_monitor, 349 ExtensionsActivityMonitor* extensions_activity_monitor,
350 SyncManager::ChangeDelegate* change_delegate, 350 SyncManager::ChangeDelegate* change_delegate,
351 const SyncCredentials& credentials, 351 const SyncCredentials& credentials,
352 scoped_ptr<Invalidator> invalidator,
352 const std::string& invalidator_client_id, 353 const std::string& invalidator_client_id,
353 const std::string& restored_key_for_bootstrapping, 354 const std::string& restored_key_for_bootstrapping,
354 const std::string& restored_keystore_key_for_bootstrapping, 355 const std::string& restored_keystore_key_for_bootstrapping,
355 scoped_ptr<InternalComponentsFactory> internal_components_factory, 356 scoped_ptr<InternalComponentsFactory> internal_components_factory,
356 Encryptor* encryptor, 357 Encryptor* encryptor,
357 UnrecoverableErrorHandler* unrecoverable_error_handler, 358 UnrecoverableErrorHandler* unrecoverable_error_handler,
358 ReportUnrecoverableErrorFunction report_unrecoverable_error_function, 359 ReportUnrecoverableErrorFunction report_unrecoverable_error_function,
359 bool use_oauth2_token) { 360 bool use_oauth2_token) {
360 CHECK(!initialized_); 361 CHECK(!initialized_);
361 DCHECK(thread_checker_.CalledOnValidThread()); 362 DCHECK(thread_checker_.CalledOnValidThread());
362 DCHECK(post_factory.get()); 363 DCHECK(post_factory.get());
363 DCHECK(!credentials.email.empty()); 364 DCHECK(!credentials.email.empty());
364 DCHECK(!credentials.sync_token.empty()); 365 DCHECK(!credentials.sync_token.empty());
365 DVLOG(1) << "SyncManager starting Init..."; 366 DVLOG(1) << "SyncManager starting Init...";
366 367
367 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); 368 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr());
368 369
369 change_delegate_ = change_delegate; 370 change_delegate_ = change_delegate;
370 371
372 invalidator_ = invalidator.Pass();
373 invalidator_->RegisterHandler(this);
374
371 AddObserver(&js_sync_manager_observer_); 375 AddObserver(&js_sync_manager_observer_);
372 SetJsEventHandler(event_handler); 376 SetJsEventHandler(event_handler);
373 377
374 AddObserver(&debug_info_event_listener_); 378 AddObserver(&debug_info_event_listener_);
375 379
376 database_path_ = database_location.Append( 380 database_path_ = database_location.Append(
377 syncable::Directory::kSyncDatabaseFilename); 381 syncable::Directory::kSyncDatabaseFilename);
378 encryptor_ = encryptor; 382 encryptor_ = encryptor;
379 unrecoverable_error_handler_ = unrecoverable_error_handler; 383 unrecoverable_error_handler_ = unrecoverable_error_handler;
380 report_unrecoverable_error_function_ = report_unrecoverable_error_function; 384 report_unrecoverable_error_function_ = report_unrecoverable_error_function;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 void SyncManagerImpl::UpdateCredentials(const SyncCredentials& credentials) { 602 void SyncManagerImpl::UpdateCredentials(const SyncCredentials& credentials) {
599 DCHECK(thread_checker_.CalledOnValidThread()); 603 DCHECK(thread_checker_.CalledOnValidThread());
600 DCHECK(initialized_); 604 DCHECK(initialized_);
601 DCHECK(!credentials.email.empty()); 605 DCHECK(!credentials.email.empty());
602 DCHECK(!credentials.sync_token.empty()); 606 DCHECK(!credentials.sync_token.empty());
603 607
604 observing_network_connectivity_changes_ = true; 608 observing_network_connectivity_changes_ = true;
605 if (!connection_manager_->SetAuthToken(credentials.sync_token)) 609 if (!connection_manager_->SetAuthToken(credentials.sync_token))
606 return; // Auth token is known to be invalid, so exit early. 610 return; // Auth token is known to be invalid, so exit early.
607 611
612 invalidator_->UpdateCredentials(credentials.email, credentials.sync_token);
608 scheduler_->OnCredentialsUpdated(); 613 scheduler_->OnCredentialsUpdated();
609 614
610 // TODO(zea): pass the credential age to the debug info event listener. 615 // TODO(zea): pass the credential age to the debug info event listener.
611 } 616 }
612 617
618 void SyncManagerImpl::UpdateEnabledTypes(ModelTypeSet enabled_types) {
619 DCHECK(thread_checker_.CalledOnValidThread());
620 DCHECK(initialized_);
621 invalidator_->UpdateRegisteredIds(
622 this,
623 ModelTypeSetToObjectIdSet(enabled_types));
624 }
625
626 void SyncManagerImpl::RegisterInvalidationHandler(
627 InvalidationHandler* handler) {
628 DCHECK(thread_checker_.CalledOnValidThread());
629 DCHECK(initialized_);
630 invalidator_->RegisterHandler(handler);
631 }
632
633 void SyncManagerImpl::UpdateRegisteredInvalidationIds(
634 InvalidationHandler* handler,
635 const ObjectIdSet& ids) {
636 DCHECK(thread_checker_.CalledOnValidThread());
637 DCHECK(initialized_);
638 invalidator_->UpdateRegisteredIds(handler, ids);
639 }
640
641 void SyncManagerImpl::UnregisterInvalidationHandler(
642 InvalidationHandler* handler) {
643 DCHECK(thread_checker_.CalledOnValidThread());
644 DCHECK(initialized_);
645 invalidator_->UnregisterHandler(handler);
646 }
647
648 void SyncManagerImpl::AcknowledgeInvalidation(
649 const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) {
650 DCHECK(thread_checker_.CalledOnValidThread());
651 DCHECK(initialized_);
652 invalidator_->Acknowledge(id, ack_handle);
653 }
654
613 void SyncManagerImpl::AddObserver(SyncManager::Observer* observer) { 655 void SyncManagerImpl::AddObserver(SyncManager::Observer* observer) {
614 DCHECK(thread_checker_.CalledOnValidThread()); 656 DCHECK(thread_checker_.CalledOnValidThread());
615 observers_.AddObserver(observer); 657 observers_.AddObserver(observer);
616 } 658 }
617 659
618 void SyncManagerImpl::RemoveObserver(SyncManager::Observer* observer) { 660 void SyncManagerImpl::RemoveObserver(SyncManager::Observer* observer) {
619 DCHECK(thread_checker_.CalledOnValidThread()); 661 DCHECK(thread_checker_.CalledOnValidThread());
620 observers_.RemoveObserver(observer); 662 observers_.RemoveObserver(observer);
621 } 663 }
622 664
(...skipping 18 matching lines...) Expand all
641 if (sync_encryption_handler_) { 683 if (sync_encryption_handler_) {
642 sync_encryption_handler_->RemoveObserver(&debug_info_event_listener_); 684 sync_encryption_handler_->RemoveObserver(&debug_info_event_listener_);
643 sync_encryption_handler_->RemoveObserver(this); 685 sync_encryption_handler_->RemoveObserver(this);
644 } 686 }
645 687
646 SetJsEventHandler(WeakHandle<JsEventHandler>()); 688 SetJsEventHandler(WeakHandle<JsEventHandler>());
647 RemoveObserver(&js_sync_manager_observer_); 689 RemoveObserver(&js_sync_manager_observer_);
648 690
649 RemoveObserver(&debug_info_event_listener_); 691 RemoveObserver(&debug_info_event_listener_);
650 692
651 // |connection_manager_| may end up being NULL here in tests (in synchronous 693 // |invalidator_| and |connection_manager_| may end up being NULL here in
652 // initialization mode). 694 // tests (in synchronous initialization mode).
653 // 695 //
654 // TODO(akalin): Fix this behavior. 696 // TODO(akalin): Fix this behavior.
697
698 if (invalidator_)
699 invalidator_->UnregisterHandler(this);
700 invalidator_.reset();
701
655 if (connection_manager_) 702 if (connection_manager_)
656 connection_manager_->RemoveListener(this); 703 connection_manager_->RemoveListener(this);
657 connection_manager_.reset(); 704 connection_manager_.reset();
658 705
659 net::NetworkChangeNotifier::RemoveIPAddressObserver(this); 706 net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
660 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); 707 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
661 observing_network_connectivity_changes_ = false; 708 observing_network_connectivity_changes_ = false;
662 709
663 if (initialized_ && directory()) { 710 if (initialized_ && directory()) {
664 directory()->SaveChanges(); 711 directory()->SaveChanges();
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 if (event.what_happened == SyncEngineEvent::SYNC_CYCLE_ENDED) { 981 if (event.what_happened == SyncEngineEvent::SYNC_CYCLE_ENDED) {
935 if (!initialized_) { 982 if (!initialized_) {
936 LOG(INFO) << "OnSyncCycleCompleted not sent because sync api is not " 983 LOG(INFO) << "OnSyncCycleCompleted not sent because sync api is not "
937 << "initialized"; 984 << "initialized";
938 return; 985 return;
939 } 986 }
940 987
941 DVLOG(1) << "Sending OnSyncCycleCompleted"; 988 DVLOG(1) << "Sending OnSyncCycleCompleted";
942 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 989 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
943 OnSyncCycleCompleted(event.snapshot)); 990 OnSyncCycleCompleted(event.snapshot));
991
992 // This is here for tests, which are still using p2p notifications.
993 bool is_notifiable_commit =
994 (event.snapshot.model_neutral_state().num_successful_commits > 0);
995 if (is_notifiable_commit) {
996 if (invalidator_) {
997 const ObjectIdInvalidationMap& invalidation_map =
998 ModelTypeInvalidationMapToObjectIdInvalidationMap(
999 event.snapshot.source().types);
1000 invalidator_->SendInvalidation(invalidation_map);
1001 } else {
1002 DVLOG(1) << "Not sending invalidation: invalidator_ is NULL";
1003 }
1004 }
944 } 1005 }
945 1006
946 if (event.what_happened == SyncEngineEvent::STOP_SYNCING_PERMANENTLY) { 1007 if (event.what_happened == SyncEngineEvent::STOP_SYNCING_PERMANENTLY) {
947 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 1008 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
948 OnStopSyncingPermanently()); 1009 OnStopSyncingPermanently());
949 return; 1010 return;
950 } 1011 }
951 1012
952 if (event.what_happened == SyncEngineEvent::UPDATED_TOKEN) { 1013 if (event.what_happened == SyncEngineEvent::UPDATED_TOKEN) {
953 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 1014 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 const ModelTypeInvalidationMap& invalidation_map) { 1217 const ModelTypeInvalidationMap& invalidation_map) {
1157 for (ModelTypeInvalidationMap::const_iterator it = invalidation_map.begin(); 1218 for (ModelTypeInvalidationMap::const_iterator it = invalidation_map.begin();
1158 it != invalidation_map.end(); ++it) { 1219 it != invalidation_map.end(); ++it) {
1159 NotificationInfo* info = &notification_info_map_[it->first]; 1220 NotificationInfo* info = &notification_info_map_[it->first];
1160 info->total_count++; 1221 info->total_count++;
1161 info->payload = it->second.payload; 1222 info->payload = it->second.payload;
1162 } 1223 }
1163 } 1224 }
1164 1225
1165 void SyncManagerImpl::OnInvalidatorStateChange(InvalidatorState state) { 1226 void SyncManagerImpl::OnInvalidatorStateChange(InvalidatorState state) {
1166 DCHECK(thread_checker_.CalledOnValidThread());
1167
1168 const std::string& state_str = InvalidatorStateToString(state); 1227 const std::string& state_str = InvalidatorStateToString(state);
1169 invalidator_state_ = state; 1228 invalidator_state_ = state;
1170 DVLOG(1) << "Invalidator state changed to: " << state_str; 1229 DVLOG(1) << "Invalidator state changed to: " << state_str;
1171 const bool notifications_enabled = 1230 const bool notifications_enabled =
1172 (invalidator_state_ == INVALIDATIONS_ENABLED); 1231 (invalidator_state_ == INVALIDATIONS_ENABLED);
1173 allstatus_.SetNotificationsEnabled(notifications_enabled); 1232 allstatus_.SetNotificationsEnabled(notifications_enabled);
1174 scheduler_->SetNotificationsEnabled(notifications_enabled); 1233 scheduler_->SetNotificationsEnabled(notifications_enabled);
1175 1234
1235 if (invalidator_state_ == syncer::INVALIDATION_CREDENTIALS_REJECTED) {
1236 // If the invalidator's credentials were rejected, that means that
1237 // our sync credentials are also bad, so invalidate those.
1238 connection_manager_->OnInvalidationCredentialsRejected();
1239 }
1240
1176 if (js_event_handler_.IsInitialized()) { 1241 if (js_event_handler_.IsInitialized()) {
1177 base::DictionaryValue details; 1242 base::DictionaryValue details;
1178 details.SetString("state", state_str); 1243 details.SetString("state", state_str);
1179 js_event_handler_.Call(FROM_HERE, 1244 js_event_handler_.Call(FROM_HERE,
1180 &JsEventHandler::HandleJsEvent, 1245 &JsEventHandler::HandleJsEvent,
1181 "onNotificationStateChange", 1246 "onNotificationStateChange",
1182 JsEventDetails(&details)); 1247 JsEventDetails(&details));
1183 } 1248 }
1184 } 1249 }
1185 1250
1186 void SyncManagerImpl::OnIncomingInvalidation( 1251 void SyncManagerImpl::OnIncomingInvalidation(
1187 const ObjectIdInvalidationMap& invalidation_map) { 1252 const ObjectIdInvalidationMap& invalidation_map) {
1188 DCHECK(thread_checker_.CalledOnValidThread()); 1253 DCHECK(thread_checker_.CalledOnValidThread());
1189 1254
1255 // TODO(dcheng): Acknowledge immediately for now. Fix this once the
1256 // invalidator doesn't repeatedly ping for unacknowledged invaliations, since
1257 // it conflicts with the sync scheduler's internal backoff algorithm.
1258 // See http://crbug.com/124149 for more information.
1259 for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin();
1260 it != invalidation_map.end(); ++it) {
1261 invalidator_->Acknowledge(it->first, it->second.ack_handle);
1262 }
1263
1190 const ModelTypeInvalidationMap& type_invalidation_map = 1264 const ModelTypeInvalidationMap& type_invalidation_map =
1191 ObjectIdInvalidationMapToModelTypeInvalidationMap(invalidation_map); 1265 ObjectIdInvalidationMapToModelTypeInvalidationMap(invalidation_map);
1192 if (type_invalidation_map.empty()) { 1266 if (type_invalidation_map.empty()) {
1193 LOG(WARNING) << "Sync received invalidation without any type information."; 1267 LOG(WARNING) << "Sync received invalidation without any type information.";
1194 } else { 1268 } else {
1195 allstatus_.IncrementNudgeCounter(NUDGE_SOURCE_NOTIFICATION); 1269 allstatus_.IncrementNudgeCounter(NUDGE_SOURCE_NOTIFICATION);
1196 scheduler_->ScheduleInvalidationNudge( 1270 scheduler_->ScheduleInvalidationNudge(
1197 TimeDelta::FromMilliseconds(kSyncSchedulerDelayMsec), 1271 TimeDelta::FromMilliseconds(kSyncSchedulerDelayMsec),
1198 type_invalidation_map, FROM_HERE); 1272 type_invalidation_map, FROM_HERE);
1199 allstatus_.IncrementNotificationsReceived(); 1273 allstatus_.IncrementNotificationsReceived();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 int SyncManagerImpl::GetDefaultNudgeDelay() { 1396 int SyncManagerImpl::GetDefaultNudgeDelay() {
1323 return kDefaultNudgeDelayMilliseconds; 1397 return kDefaultNudgeDelayMilliseconds;
1324 } 1398 }
1325 1399
1326 // static. 1400 // static.
1327 int SyncManagerImpl::GetPreferencesNudgeDelay() { 1401 int SyncManagerImpl::GetPreferencesNudgeDelay() {
1328 return kPreferencesNudgeDelayMilliseconds; 1402 return kPreferencesNudgeDelayMilliseconds;
1329 } 1403 }
1330 1404
1331 } // namespace syncer 1405 } // namespace syncer
OLDNEW
« no previous file with comments | « trunk/src/sync/internal_api/sync_manager_impl.h ('k') | trunk/src/sync/internal_api/sync_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698