Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: google_apis/gcm/engine/mcs_client.h

Issue 117513004: [GCM] Add TTL support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 6 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: google_apis/gcm/engine/mcs_client.h
diff --git a/google_apis/gcm/engine/mcs_client.h b/google_apis/gcm/engine/mcs_client.h
index 741c51e618d122c4de65c5d9b582ef7f8224b682..adfb0a4259dabf6b264c0105ece935131f937d41 100644
--- a/google_apis/gcm/engine/mcs_client.h
+++ b/google_apis/gcm/engine/mcs_client.h
@@ -19,6 +19,10 @@
#include "google_apis/gcm/engine/heartbeat_manager.h"
#include "google_apis/gcm/engine/rmq_store.h"
+namespace base {
+class Clock;
+} // namespace base
+
namespace google {
namespace protobuf {
class MessageLite;
@@ -64,7 +68,9 @@ class GCM_EXPORT MCSClient {
typedef base::Callback<void(const std::string& message_id)>
OnMessageSentCallback;
- MCSClient(ConnectionFactory* connection_factory, RMQStore* rmq_store);
+ MCSClient(base::Clock* clock,
+ ConnectionFactory* connection_factory,
+ RMQStore* rmq_store);
virtual ~MCSClient();
// Initialize the client. Will load any previous id/token information as well
@@ -92,8 +98,12 @@ class GCM_EXPORT MCSClient {
// Sends a message, with or without reliable message queueing (RMQ) support.
// Will asynchronously invoke the OnMessageSent callback regardless.
- // TODO(zea): support TTL.
- void SendMessage(const MCSMessage& message, bool use_rmq);
+ // Whether to use RMQ depends on whether the protobuf has |ttl| set or not.
+ // |ttl == 0| denotes the message should only be sent if the connection is
+ // open. |ttl > 0| will keep the message saved for |ttl| seconds, after which
+ // it will be dropped if it was unable to be sent. When a message is dropped,
+ // |message_sent_callback_| is invoked with a TTL expiration error.
+ void SendMessage(const MCSMessage& message);
// Disconnects the client and permanently destroys the persistent RMQ store.
// WARNING: This is permanent, and the client must be recreated with new
@@ -155,6 +165,9 @@ class GCM_EXPORT MCSClient {
// Helper for the heartbeat manager to signal a connection reset.
void OnConnectionResetByHeartbeat();
+ // Clock for enforcing TTL. Passed in for testing.
+ base::Clock* const clock_;
+
// Client state.
State state_;

Powered by Google App Engine
This is Rietveld 408576698