| 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
|
|
|