Index: sync/notifier/non_blocking_invalidation_notifier.cc |
diff --git a/sync/notifier/non_blocking_invalidation_notifier.cc b/sync/notifier/non_blocking_invalidation_notifier.cc |
index cf5e51ab7c221038c6cbefa3e9fda7ce3efad6f7..ef48c74aa80ca495712b923b72daa96e69eb1148 100644 |
--- a/sync/notifier/non_blocking_invalidation_notifier.cc |
+++ b/sync/notifier/non_blocking_invalidation_notifier.cc |
@@ -35,18 +35,19 @@ class NonBlockingInvalidationNotifier::Core |
invalidation_state_tracker, |
const std::string& client_info); |
void Teardown(); |
+ void ReloadHandlers(const ObjectIdSet& ids); |
void SetUniqueId(const std::string& unique_id); |
void SetStateDeprecated(const std::string& state); |
void UpdateCredentials(const std::string& email, const std::string& token); |
- void UpdateEnabledTypes(syncer::ModelTypeSet enabled_types); |
// SyncNotifierObserver implementation (all called on I/O thread by |
// InvalidationNotifier). |
+ virtual ObjectIdSet GetHandledIds() OVERRIDE; |
virtual void OnNotificationsEnabled() OVERRIDE; |
virtual void OnNotificationsDisabled( |
NotificationsDisabledReason reason) OVERRIDE; |
virtual void OnIncomingNotification( |
- const syncer::ModelTypePayloadMap& type_payloads, |
+ const ObjectIdPayloadMap& id_payloads, |
IncomingNotificationSource source) OVERRIDE; |
private: |
@@ -59,6 +60,7 @@ class NonBlockingInvalidationNotifier::Core |
const syncer::WeakHandle<SyncNotifierObserver> delegate_observer_; |
scoped_ptr<InvalidationNotifier> invalidation_notifier_; |
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; |
+ ObjectIdSet registered_ids_; |
DISALLOW_COPY_AND_ASSIGN(Core); |
}; |
@@ -93,17 +95,24 @@ void NonBlockingInvalidationNotifier::Core::Initialize( |
initial_invalidation_state, |
invalidation_state_tracker, |
client_info)); |
- invalidation_notifier_->AddObserver(this); |
+ invalidation_notifier_->AddHandler(this); |
} |
void NonBlockingInvalidationNotifier::Core::Teardown() { |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
- invalidation_notifier_->RemoveObserver(this); |
+ invalidation_notifier_->RemoveHandler(this); |
invalidation_notifier_.reset(); |
network_task_runner_ = NULL; |
} |
+void NonBlockingInvalidationNotifier::Core::ReloadHandlers( |
+ const ObjectIdSet& ids) { |
+ DCHECK(network_task_runner_->BelongsToCurrentThread()); |
+ registered_ids_ = ids; |
+ invalidation_notifier_->ReloadHandlers(); |
+} |
+ |
void NonBlockingInvalidationNotifier::Core::SetUniqueId( |
const std::string& unique_id) { |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
@@ -122,10 +131,9 @@ void NonBlockingInvalidationNotifier::Core::UpdateCredentials( |
invalidation_notifier_->UpdateCredentials(email, token); |
} |
-void NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes( |
- syncer::ModelTypeSet enabled_types) { |
+ObjectIdSet NonBlockingInvalidationNotifier::Core::GetHandledIds() { |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
- invalidation_notifier_->UpdateEnabledTypes(enabled_types); |
+ return registered_ids_; |
} |
void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() { |
@@ -142,12 +150,11 @@ void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled( |
} |
void NonBlockingInvalidationNotifier::Core::OnIncomingNotification( |
- const syncer::ModelTypePayloadMap& type_payloads, |
- IncomingNotificationSource source) { |
+ const ObjectIdPayloadMap& id_payloads, IncomingNotificationSource source) { |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
delegate_observer_.Call(FROM_HERE, |
&SyncNotifierObserver::OnIncomingNotification, |
- type_payloads, |
+ id_payloads, |
source); |
} |
@@ -190,16 +197,27 @@ NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { |
} |
} |
-void NonBlockingInvalidationNotifier::AddObserver( |
+void NonBlockingInvalidationNotifier::AddHandler( |
SyncNotifierObserver* observer) { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- observers_.AddObserver(observer); |
+ InvalidationNotifierBase::AddHandler(observer); |
} |
-void NonBlockingInvalidationNotifier::RemoveObserver( |
+void NonBlockingInvalidationNotifier::RemoveHandler( |
SyncNotifierObserver* observer) { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- observers_.RemoveObserver(observer); |
+ InvalidationNotifierBase::RemoveHandler(observer); |
+} |
+ |
+void NonBlockingInvalidationNotifier::ReloadHandlers() { |
+ DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
+ const ObjectIdSet& ids_to_register = UpdateObjectIdObserverMap(); |
+ if (!network_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&NonBlockingInvalidationNotifier::Core::ReloadHandlers, |
+ core_.get(), ids_to_register))) { |
+ NOTREACHED(); |
+ } |
} |
void NonBlockingInvalidationNotifier::SetUniqueId( |
@@ -236,17 +254,6 @@ void NonBlockingInvalidationNotifier::UpdateCredentials( |
} |
} |
-void NonBlockingInvalidationNotifier::UpdateEnabledTypes( |
- syncer::ModelTypeSet enabled_types) { |
- DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- if (!network_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes, |
- core_.get(), enabled_types))) { |
- NOTREACHED(); |
- } |
-} |
- |
void NonBlockingInvalidationNotifier::SendNotification( |
syncer::ModelTypeSet changed_types) { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
@@ -254,25 +261,29 @@ void NonBlockingInvalidationNotifier::SendNotification( |
// need to forward on the call. |
} |
+ObjectIdSet NonBlockingInvalidationNotifier::GetHandledIds() { |
+ DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
+ return ObjectIdSet(); |
+} |
+ |
void NonBlockingInvalidationNotifier::OnNotificationsEnabled() { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
+ FOR_EACH_OBSERVER(SyncNotifierObserver, observers(), |
OnNotificationsEnabled()); |
} |
void NonBlockingInvalidationNotifier::OnNotificationsDisabled( |
NotificationsDisabledReason reason) { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
+ FOR_EACH_OBSERVER(SyncNotifierObserver, observers(), |
OnNotificationsDisabled(reason)); |
} |
void NonBlockingInvalidationNotifier::OnIncomingNotification( |
- const syncer::ModelTypePayloadMap& type_payloads, |
+ const ObjectIdPayloadMap& id_payloads, |
IncomingNotificationSource source) { |
DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
- FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
- OnIncomingNotification(type_payloads, source)); |
+ DispatchInvalidationsToObservers(id_payloads, source); |
} |
} // namespace syncer |