Index: sync/notifier/sync_invalidation_listener.h |
diff --git a/sync/notifier/sync_invalidation_listener.h b/sync/notifier/sync_invalidation_listener.h |
index ed7f03143ccb8aafbf726819c57857bc0110a72d..a10d7c4e3aa3fca1bd57ac4728ffee0a5afe8236 100644 |
--- a/sync/notifier/sync_invalidation_listener.h |
+++ b/sync/notifier/sync_invalidation_listener.h |
@@ -8,6 +8,7 @@ |
#ifndef SYNC_NOTIFIER_SYNC_INVALIDATION_LISTENER_H_ |
#define SYNC_NOTIFIER_SYNC_INVALIDATION_LISTENER_H_ |
+#include <map> |
#include <string> |
#include "base/basictypes.h" |
@@ -16,6 +17,8 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
#include "base/threading/non_thread_safe.h" |
+#include "base/time.h" |
+#include "base/timer.h" |
#include "google/cacheinvalidation/include/invalidation-listener.h" |
#include "jingle/notifier/listener/push_client_observer.h" |
#include "sync/internal_api/public/util/weak_handle.h" |
@@ -74,7 +77,7 @@ class SyncInvalidationListener |
create_invalidation_client_callback, |
const std::string& client_id, const std::string& client_info, |
const std::string& state, |
- const InvalidationVersionMap& initial_max_invalidation_versions, |
+ const InvalidationStateMap& initial_invalidation_state_map, |
const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
Delegate* delegate); |
@@ -83,6 +86,9 @@ class SyncInvalidationListener |
// Update the set of object IDs that we're interested in getting |
// notifications for. May be called at any time. |
void UpdateRegisteredIds(const ObjectIdSet& ids); |
+ // TODO(dcheng): Add a comment. |
+ void Acknowledge(const invalidation::ObjectId& id, |
+ const AckHandle& ack_handle); |
// invalidation::InvalidationListener implementation. |
virtual void Ready( |
@@ -130,18 +136,44 @@ class SyncInvalidationListener |
void DoRegistrationUpdate(); |
private: |
+ struct QueueEntry { |
+ QueueEntry(const invalidation::ObjectId& id, |
+ const std::string& payload, |
+ int retry_count) |
+ : id(id), payload(payload), retry_count(retry_count) { |
+ } |
+ |
+ invalidation::ObjectId id; |
+ std::string payload; |
+ int retry_count; |
+ }; |
+ typedef std::multimap<base::TimeTicks, QueueEntry> TimerQueue; |
Pete Williamson
2012/09/14 18:28:22
Is a multimap the right data structure here? I wo
dcheng
2012/09/14 19:08:49
std::priority_queue doesn't allow erasing arbitrar
|
+ |
void Stop(); |
InvalidatorState GetState() const; |
void EmitStateChange(); |
- void EmitInvalidation(const ObjectIdStateMap& id_state_map); |
+ void PrepareInvalidation(const ObjectIdSet& ids, |
+ const std::string& payload, |
+ invalidation::InvalidationClient* client, |
+ const invalidation::AckHandle& ack_handle); |
+ void EmitInvalidation(const ObjectIdSet& ids, |
+ const std::string& payload, |
+ const AckHandleMap* const local_ack_handles, |
+ invalidation::InvalidationClient* client, |
+ const invalidation::AckHandle& ack_handle); |
+ void RemitInvalidation(); |
+ |
+ base::WeakPtrFactory<SyncInvalidationListener> weak_ptr_factory_; |
+ base::OneShotTimer<SyncInvalidationListener> timer_; |
+ TimerQueue timer_queue_; |
// Owned by |sync_system_resources_|. |
notifier::PushClient* const push_client_; |
SyncSystemResources sync_system_resources_; |
- InvalidationVersionMap max_invalidation_versions_; |
+ InvalidationStateMap invalidation_state_map_; |
WeakHandle<InvalidationStateTracker> invalidation_state_tracker_; |
Delegate* delegate_; |
scoped_ptr<invalidation::InvalidationClient> invalidation_client_; |