Index: google_apis/gcm/engine/connection_factory_impl.h |
diff --git a/google_apis/gcm/engine/connection_factory_impl.h b/google_apis/gcm/engine/connection_factory_impl.h |
index 3d79a78689f18a56775bbc61251e1a49cf6d702c..7326d7969e8b7fff61c8325224fe609dfcc040a2 100644 |
--- a/google_apis/gcm/engine/connection_factory_impl.h |
+++ b/google_apis/gcm/engine/connection_factory_impl.h |
@@ -8,6 +8,7 @@ |
#include "google_apis/gcm/engine/connection_factory.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/time/time.h" |
#include "google_apis/gcm/protocol/mcs.pb.h" |
#include "net/base/backoff_entry.h" |
#include "net/base/network_change_notifier.h" |
@@ -44,7 +45,7 @@ class GCM_EXPORT ConnectionFactoryImpl : |
virtual void Connect() OVERRIDE; |
virtual bool IsEndpointReachable() const OVERRIDE; |
virtual base::TimeTicks NextRetryAttempt() const OVERRIDE; |
- virtual void SignalConnectionReset() OVERRIDE; |
+ virtual void SignalConnectionReset(ConnectionResetReason reason) OVERRIDE; |
// NetworkChangeNotifier observer implementations. |
virtual void OnConnectionTypeChanged( |
@@ -91,17 +92,26 @@ class GCM_EXPORT ConnectionFactoryImpl : |
net::NetLog* const net_log_; |
// The handle to the socket for the current connection, if one exists. |
net::ClientSocketHandle socket_handle_; |
- // Connection attempt backoff policy. |
+ // Current backoff entry. |
scoped_ptr<net::BackoffEntry> backoff_entry_; |
- // Backoff policy from previous backoff attempt. |
+ // Backoff entry from previous connection attempt. Updated on each login |
+ // completion. |
scoped_ptr<net::BackoffEntry> previous_backoff_; |
- base::TimeTicks backoff_reset_time_; |
// Whether a connection attempt is currently in progress or we're in backoff |
// waiting until the next connection attempt. |!connecting_| denotes |
// steady state with an active connection. |
bool connecting_; |
+ // Whether login successfully completed after the connection was established. |
+ // If a connection reset happens while attempting to log in, the current |
+ // backoff entry is reused (after incrementing with a new failure). |
+ bool logging_in_; |
+ |
+ // The time of the last login completion. Used for calculating whether to |
+ // restore a previous backoff entry and for measuring uptime. |
+ base::TimeTicks last_login_time_; |
+ |
// The current connection handler, if one exists. |
scoped_ptr<ConnectionHandlerImpl> connection_handler_; |