OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ | 5 #ifndef GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ |
6 #define GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ | 6 #define GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ |
7 | 7 |
8 #include "google_apis/gcm/engine/connection_factory.h" | 8 #include "google_apis/gcm/engine/connection_factory.h" |
9 | 9 |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 | 68 |
69 // Helper method for initalizing the connection hander. | 69 // Helper method for initalizing the connection hander. |
70 // Virtual for testing. | 70 // Virtual for testing. |
71 virtual void InitHandler(); | 71 virtual void InitHandler(); |
72 | 72 |
73 // Helper method for creating a backoff entry. | 73 // Helper method for creating a backoff entry. |
74 // Virtual for testing. | 74 // Virtual for testing. |
75 virtual scoped_ptr<net::BackoffEntry> CreateBackoffEntry( | 75 virtual scoped_ptr<net::BackoffEntry> CreateBackoffEntry( |
76 const net::BackoffEntry::Policy* const policy); | 76 const net::BackoffEntry::Policy* const policy); |
77 | 77 |
| 78 // Helper method for creating the connection handler. |
| 79 // Virtual for testing. |
| 80 virtual scoped_ptr<ConnectionHandler> CreateConnectionHandler( |
| 81 base::TimeDelta read_timeout, |
| 82 const ConnectionHandler::ProtoReceivedCallback& read_callback, |
| 83 const ConnectionHandler::ProtoSentCallback& write_callback, |
| 84 const ConnectionHandler::ConnectionChangedCallback& connection_callback); |
| 85 |
78 // Returns the current time in Ticks. | 86 // Returns the current time in Ticks. |
79 // Virtual for testing. | 87 // Virtual for testing. |
80 virtual base::TimeTicks NowTicks(); | 88 virtual base::TimeTicks NowTicks(); |
81 | 89 |
82 // Callback for Socket connection completion. | 90 // Callback for Socket connection completion. |
83 void OnConnectDone(int result); | 91 void OnConnectDone(int result); |
84 | 92 |
85 // ConnectionHandler callback for connection issues. | 93 // ConnectionHandler callback for connection issues. |
86 void ConnectionHandlerCallback(int result); | 94 void ConnectionHandlerCallback(int result); |
87 | 95 |
88 private: | 96 private: |
| 97 // Helper method for checking backoff and triggering a connection as |
| 98 // necessary. |
| 99 void ConnectWithBackoff(); |
| 100 |
89 // Proxy resolution and connection functions. | 101 // Proxy resolution and connection functions. |
90 void OnProxyResolveDone(int status); | 102 void OnProxyResolveDone(int status); |
91 void OnProxyConnectDone(int status); | 103 void OnProxyConnectDone(int status); |
92 int ReconsiderProxyAfterError(int error); | 104 int ReconsiderProxyAfterError(int error); |
93 void ReportSuccessfulProxyConnection(); | 105 void ReportSuccessfulProxyConnection(); |
94 | 106 |
95 void CloseSocket(); | 107 void CloseSocket(); |
96 | 108 |
97 // The MCS endpoints to make connections to, sorted in order of priority. | 109 // The MCS endpoints to make connections to, sorted in order of priority. |
98 const std::vector<GURL> mcs_endpoints_; | 110 const std::vector<GURL> mcs_endpoints_; |
(...skipping 15 matching lines...) Expand all Loading... |
114 // The current proxy info. | 126 // The current proxy info. |
115 net::ProxyInfo proxy_info_; | 127 net::ProxyInfo proxy_info_; |
116 // The handle to the socket for the current connection, if one exists. | 128 // The handle to the socket for the current connection, if one exists. |
117 net::ClientSocketHandle socket_handle_; | 129 net::ClientSocketHandle socket_handle_; |
118 // Current backoff entry. | 130 // Current backoff entry. |
119 scoped_ptr<net::BackoffEntry> backoff_entry_; | 131 scoped_ptr<net::BackoffEntry> backoff_entry_; |
120 // Backoff entry from previous connection attempt. Updated on each login | 132 // Backoff entry from previous connection attempt. Updated on each login |
121 // completion. | 133 // completion. |
122 scoped_ptr<net::BackoffEntry> previous_backoff_; | 134 scoped_ptr<net::BackoffEntry> previous_backoff_; |
123 | 135 |
124 // Whether a connection attempt is currently in progress or we're in backoff | 136 // Whether a connection attempt is currently actively in progress. |
125 // waiting until the next connection attempt. |!connecting_| denotes | |
126 // steady state with an active connection. | |
127 bool connecting_; | 137 bool connecting_; |
128 | 138 |
| 139 // Whether the client is waiting for backoff to finish before attempting to |
| 140 // connect. Canary jobs are able to preempt connections pending backoff |
| 141 // expiration. |
| 142 bool waiting_for_backoff_; |
| 143 |
129 // Whether login successfully completed after the connection was established. | 144 // Whether login successfully completed after the connection was established. |
130 // If a connection reset happens while attempting to log in, the current | 145 // If a connection reset happens while attempting to log in, the current |
131 // backoff entry is reused (after incrementing with a new failure). | 146 // backoff entry is reused (after incrementing with a new failure). |
132 bool logging_in_; | 147 bool logging_in_; |
133 | 148 |
134 // The time of the last login completion. Used for calculating whether to | 149 // The time of the last login completion. Used for calculating whether to |
135 // restore a previous backoff entry and for measuring uptime. | 150 // restore a previous backoff entry and for measuring uptime. |
136 base::TimeTicks last_login_time_; | 151 base::TimeTicks last_login_time_; |
137 | 152 |
138 // The current connection handler, if one exists. | 153 // The current connection handler, if one exists. |
139 scoped_ptr<ConnectionHandlerImpl> connection_handler_; | 154 scoped_ptr<ConnectionHandler> connection_handler_; |
140 | 155 |
141 // Builder for generating new login requests. | 156 // Builder for generating new login requests. |
142 BuildLoginRequestCallback request_builder_; | 157 BuildLoginRequestCallback request_builder_; |
143 | 158 |
144 base::WeakPtrFactory<ConnectionFactoryImpl> weak_ptr_factory_; | 159 base::WeakPtrFactory<ConnectionFactoryImpl> weak_ptr_factory_; |
145 | 160 |
146 DISALLOW_COPY_AND_ASSIGN(ConnectionFactoryImpl); | 161 DISALLOW_COPY_AND_ASSIGN(ConnectionFactoryImpl); |
147 }; | 162 }; |
148 | 163 |
149 } // namespace gcm | 164 } // namespace gcm |
150 | 165 |
151 #endif // GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ | 166 #endif // GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_IMPL_H_ |
OLD | NEW |