Chromium Code Reviews| 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..bff69c9d20281552e26d6448a25f7d24ca702aa4 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,28 @@ void NonBlockingInvalidationNotifier::SendNotification( |
| // need to forward on the call. |
| } |
| +ObjectIdSet NonBlockingInvalidationNotifier::GetHandledIds() { |
| + DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| + return ObjectIdSet(); |
|
dcheng
2012/07/10 19:15:25
I need to figure out why the unit test is passing
|
| +} |
| 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 |