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 6ec78490565282aa0e156e2e93cca79f258653c6..67718e87cd28af380b6f4f96117611211f2526ca 100644 |
| --- a/sync/notifier/non_blocking_invalidation_notifier.cc |
| +++ b/sync/notifier/non_blocking_invalidation_notifier.cc |
| @@ -33,10 +33,10 @@ class NonBlockingInvalidationNotifier::Core |
| const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
| const std::string& client_info); |
| void Teardown(); |
| + void UpdateRegisteredIds(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(ModelTypeSet enabled_types); |
| // SyncNotifierObserver implementation (all called on I/O thread by |
| // InvalidationNotifier). |
| @@ -44,7 +44,7 @@ class NonBlockingInvalidationNotifier::Core |
| virtual void OnNotificationsDisabled( |
| NotificationsDisabledReason reason) OVERRIDE; |
| virtual void OnIncomingNotification( |
| - const ModelTypePayloadMap& type_payloads, |
| + const ObjectIdPayloadMap& id_payloads, |
| IncomingNotificationSource source) OVERRIDE; |
| private: |
| @@ -89,17 +89,22 @@ void NonBlockingInvalidationNotifier::Core::Initialize( |
| initial_invalidation_state, |
| invalidation_state_tracker, |
| client_info)); |
| - invalidation_notifier_->AddObserver(this); |
| } |
| void NonBlockingInvalidationNotifier::Core::Teardown() { |
| DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| - invalidation_notifier_->RemoveObserver(this); |
| + invalidation_notifier_->UpdateRegisteredIds(this, ObjectIdSet()); |
| invalidation_notifier_.reset(); |
| network_task_runner_ = NULL; |
| } |
| +void NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds( |
| + const ObjectIdSet& ids) { |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| + invalidation_notifier_->UpdateRegisteredIds(this, ids); |
| +} |
| + |
| void NonBlockingInvalidationNotifier::Core::SetUniqueId( |
| const std::string& unique_id) { |
| DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| @@ -118,12 +123,6 @@ void NonBlockingInvalidationNotifier::Core::UpdateCredentials( |
| invalidation_notifier_->UpdateCredentials(email, token); |
| } |
| -void NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes( |
| - ModelTypeSet enabled_types) { |
| - DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| - invalidation_notifier_->UpdateEnabledTypes(enabled_types); |
| -} |
| - |
| void NonBlockingInvalidationNotifier::Core::OnNotificationsEnabled() { |
| DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| delegate_observer_.Call(FROM_HERE, |
| @@ -138,12 +137,11 @@ void NonBlockingInvalidationNotifier::Core::OnNotificationsDisabled( |
| } |
| void NonBlockingInvalidationNotifier::Core::OnIncomingNotification( |
| - const 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); |
| } |
| @@ -185,16 +183,18 @@ NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { |
| } |
| } |
| -void NonBlockingInvalidationNotifier::AddObserver( |
| - SyncNotifierObserver* observer) { |
| +void NonBlockingInvalidationNotifier::UpdateRegisteredIds( |
| + SyncNotifierObserver* handler, const ObjectIdSet& ids) { |
| DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| - observers_.AddObserver(observer); |
| -} |
| - |
| -void NonBlockingInvalidationNotifier::RemoveObserver( |
| - SyncNotifierObserver* observer) { |
| - DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| - observers_.RemoveObserver(observer); |
| + const ObjectIdSet& registered_ids = helper_.UpdateRegisteredIds(handler, ids); |
|
akalin
2012/07/21 01:14:10
actually, rename this to "all_registered_ids"
dcheng
2012/07/21 14:06:53
Done.
|
| + if (!network_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind( |
| + &NonBlockingInvalidationNotifier::Core::UpdateRegisteredIds, |
| + core_.get(), |
| + registered_ids))) { |
| + NOTREACHED(); |
| + } |
| } |
| void NonBlockingInvalidationNotifier::SetUniqueId( |
| @@ -231,17 +231,6 @@ void NonBlockingInvalidationNotifier::UpdateCredentials( |
| } |
| } |
| -void NonBlockingInvalidationNotifier::UpdateEnabledTypes( |
| - 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( |
| ModelTypeSet changed_types) { |
| DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| @@ -251,23 +240,20 @@ void NonBlockingInvalidationNotifier::SendNotification( |
| void NonBlockingInvalidationNotifier::OnNotificationsEnabled() { |
| DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| - FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
| - OnNotificationsEnabled()); |
| + helper_.EmitOnNotificationsEnabled(); |
| } |
| void NonBlockingInvalidationNotifier::OnNotificationsDisabled( |
| NotificationsDisabledReason reason) { |
| DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| - FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
| - OnNotificationsDisabled(reason)); |
| + helper_.EmitOnNotificationsDisabled(reason); |
| } |
| void NonBlockingInvalidationNotifier::OnIncomingNotification( |
| - const ModelTypePayloadMap& type_payloads, |
| + const ObjectIdPayloadMap& id_payloads, |
| IncomingNotificationSource source) { |
| DCHECK(parent_task_runner_->BelongsToCurrentThread()); |
| - FOR_EACH_OBSERVER(SyncNotifierObserver, observers_, |
| - OnIncomingNotification(type_payloads, source)); |
| + helper_.DispatchInvalidationsToHandlers(id_payloads, source); |
| } |
| } // namespace syncer |