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

Unified 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, 6 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/sync/internal_api/sync_manager_impl.cc
===================================================================
--- trunk/src/sync/internal_api/sync_manager_impl.cc (revision 208346)
+++ trunk/src/sync/internal_api/sync_manager_impl.cc (working copy)
@@ -349,6 +349,7 @@
ExtensionsActivityMonitor* extensions_activity_monitor,
SyncManager::ChangeDelegate* change_delegate,
const SyncCredentials& credentials,
+ scoped_ptr<Invalidator> invalidator,
const std::string& invalidator_client_id,
const std::string& restored_key_for_bootstrapping,
const std::string& restored_keystore_key_for_bootstrapping,
@@ -368,6 +369,9 @@
change_delegate_ = change_delegate;
+ invalidator_ = invalidator.Pass();
+ invalidator_->RegisterHandler(this);
+
AddObserver(&js_sync_manager_observer_);
SetJsEventHandler(event_handler);
@@ -605,11 +609,49 @@
if (!connection_manager_->SetAuthToken(credentials.sync_token))
return; // Auth token is known to be invalid, so exit early.
+ invalidator_->UpdateCredentials(credentials.email, credentials.sync_token);
scheduler_->OnCredentialsUpdated();
// TODO(zea): pass the credential age to the debug info event listener.
}
+void SyncManagerImpl::UpdateEnabledTypes(ModelTypeSet enabled_types) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(initialized_);
+ invalidator_->UpdateRegisteredIds(
+ this,
+ ModelTypeSetToObjectIdSet(enabled_types));
+}
+
+void SyncManagerImpl::RegisterInvalidationHandler(
+ InvalidationHandler* handler) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(initialized_);
+ invalidator_->RegisterHandler(handler);
+}
+
+void SyncManagerImpl::UpdateRegisteredInvalidationIds(
+ InvalidationHandler* handler,
+ const ObjectIdSet& ids) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(initialized_);
+ invalidator_->UpdateRegisteredIds(handler, ids);
+}
+
+void SyncManagerImpl::UnregisterInvalidationHandler(
+ InvalidationHandler* handler) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(initialized_);
+ invalidator_->UnregisterHandler(handler);
+}
+
+void SyncManagerImpl::AcknowledgeInvalidation(
+ const invalidation::ObjectId& id, const syncer::AckHandle& ack_handle) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(initialized_);
+ invalidator_->Acknowledge(id, ack_handle);
+}
+
void SyncManagerImpl::AddObserver(SyncManager::Observer* observer) {
DCHECK(thread_checker_.CalledOnValidThread());
observers_.AddObserver(observer);
@@ -648,10 +690,15 @@
RemoveObserver(&debug_info_event_listener_);
- // |connection_manager_| may end up being NULL here in tests (in synchronous
- // initialization mode).
+ // |invalidator_| and |connection_manager_| may end up being NULL here in
+ // tests (in synchronous initialization mode).
//
// TODO(akalin): Fix this behavior.
+
+ if (invalidator_)
+ invalidator_->UnregisterHandler(this);
+ invalidator_.reset();
+
if (connection_manager_)
connection_manager_->RemoveListener(this);
connection_manager_.reset();
@@ -941,6 +988,20 @@
DVLOG(1) << "Sending OnSyncCycleCompleted";
FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
OnSyncCycleCompleted(event.snapshot));
+
+ // This is here for tests, which are still using p2p notifications.
+ bool is_notifiable_commit =
+ (event.snapshot.model_neutral_state().num_successful_commits > 0);
+ if (is_notifiable_commit) {
+ if (invalidator_) {
+ const ObjectIdInvalidationMap& invalidation_map =
+ ModelTypeInvalidationMapToObjectIdInvalidationMap(
+ event.snapshot.source().types);
+ invalidator_->SendInvalidation(invalidation_map);
+ } else {
+ DVLOG(1) << "Not sending invalidation: invalidator_ is NULL";
+ }
+ }
}
if (event.what_happened == SyncEngineEvent::STOP_SYNCING_PERMANENTLY) {
@@ -1163,8 +1224,6 @@
}
void SyncManagerImpl::OnInvalidatorStateChange(InvalidatorState state) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
const std::string& state_str = InvalidatorStateToString(state);
invalidator_state_ = state;
DVLOG(1) << "Invalidator state changed to: " << state_str;
@@ -1173,6 +1232,12 @@
allstatus_.SetNotificationsEnabled(notifications_enabled);
scheduler_->SetNotificationsEnabled(notifications_enabled);
+ if (invalidator_state_ == syncer::INVALIDATION_CREDENTIALS_REJECTED) {
+ // If the invalidator's credentials were rejected, that means that
+ // our sync credentials are also bad, so invalidate those.
+ connection_manager_->OnInvalidationCredentialsRejected();
+ }
+
if (js_event_handler_.IsInitialized()) {
base::DictionaryValue details;
details.SetString("state", state_str);
@@ -1187,6 +1252,15 @@
const ObjectIdInvalidationMap& invalidation_map) {
DCHECK(thread_checker_.CalledOnValidThread());
+ // TODO(dcheng): Acknowledge immediately for now. Fix this once the
+ // invalidator doesn't repeatedly ping for unacknowledged invaliations, since
+ // it conflicts with the sync scheduler's internal backoff algorithm.
+ // See http://crbug.com/124149 for more information.
+ for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin();
+ it != invalidation_map.end(); ++it) {
+ invalidator_->Acknowledge(it->first, it->second.ack_handle);
+ }
+
const ModelTypeInvalidationMap& type_invalidation_map =
ObjectIdInvalidationMapToModelTypeInvalidationMap(invalidation_map);
if (type_invalidation_map.empty()) {
« 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