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

Side by Side Diff: net/socket/client_socket_handle.h

Issue 197283012: Retry requests on reused sockets that receive ERR_EMPTY_RESPONSE. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Indentation Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/socket/client_socket_handle.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 NET_SOCKET_CLIENT_SOCKET_HANDLE_H_ 5 #ifndef NET_SOCKET_CLIENT_SOCKET_HANDLE_H_
6 #define NET_SOCKET_CLIENT_SOCKET_HANDLE_H_ 6 #define NET_SOCKET_CLIENT_SOCKET_HANDLE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // called. Returns false and makes no changes to |load_timing_info| when 119 // called. Returns false and makes no changes to |load_timing_info| when
120 // |socket_| is NULL. 120 // |socket_| is NULL.
121 bool GetLoadTimingInfo(bool is_reused, 121 bool GetLoadTimingInfo(bool is_reused,
122 LoadTimingInfo* load_timing_info) const; 122 LoadTimingInfo* load_timing_info) const;
123 123
124 // Used by ClientSocketPool to initialize the ClientSocketHandle. 124 // Used by ClientSocketPool to initialize the ClientSocketHandle.
125 // 125 //
126 // SetSocket() may also be used if this handle is used as simply for 126 // SetSocket() may also be used if this handle is used as simply for
127 // socket storage (e.g., http://crbug.com/37810). 127 // socket storage (e.g., http://crbug.com/37810).
128 void SetSocket(scoped_ptr<StreamSocket> s); 128 void SetSocket(scoped_ptr<StreamSocket> s);
129 void set_is_reused(bool is_reused) { is_reused_ = is_reused; } 129 void set_reuse_type(SocketReuseType reuse_type) { reuse_type_ = reuse_type; }
130 void set_idle_time(base::TimeDelta idle_time) { idle_time_ = idle_time; } 130 void set_idle_time(base::TimeDelta idle_time) { idle_time_ = idle_time; }
131 void set_pool_id(int id) { pool_id_ = id; } 131 void set_pool_id(int id) { pool_id_ = id; }
132 void set_is_ssl_error(bool is_ssl_error) { is_ssl_error_ = is_ssl_error; } 132 void set_is_ssl_error(bool is_ssl_error) { is_ssl_error_ = is_ssl_error; }
133 void set_ssl_error_response_info(const HttpResponseInfo& ssl_error_state) { 133 void set_ssl_error_response_info(const HttpResponseInfo& ssl_error_state) {
134 ssl_error_response_info_ = ssl_error_state; 134 ssl_error_response_info_ = ssl_error_state;
135 } 135 }
136 void set_pending_http_proxy_connection(ClientSocketHandle* connection) { 136 void set_pending_http_proxy_connection(ClientSocketHandle* connection) {
137 pending_http_proxy_connection_.reset(connection); 137 pending_http_proxy_connection_.reset(connection);
138 } 138 }
139 139
(...skipping 14 matching lines...) Expand all
154 154
155 StreamSocket* socket() { return socket_.get(); } 155 StreamSocket* socket() { return socket_.get(); }
156 156
157 // SetSocket() must be called with a new socket before this handle 157 // SetSocket() must be called with a new socket before this handle
158 // is destroyed if is_initialized() is true. 158 // is destroyed if is_initialized() is true.
159 scoped_ptr<StreamSocket> PassSocket(); 159 scoped_ptr<StreamSocket> PassSocket();
160 160
161 // These may only be used if is_initialized() is true. 161 // These may only be used if is_initialized() is true.
162 const std::string& group_name() const { return group_name_; } 162 const std::string& group_name() const { return group_name_; }
163 int id() const { return pool_id_; } 163 int id() const { return pool_id_; }
164 bool is_reused() const { return is_reused_; } 164 bool is_reused() const { return reuse_type_ == REUSED_IDLE; }
165 base::TimeDelta idle_time() const { return idle_time_; } 165 base::TimeDelta idle_time() const { return idle_time_; }
166 SocketReuseType reuse_type() const { 166 SocketReuseType reuse_type() const { return reuse_type_; }
167 if (is_reused()) {
168 return REUSED_IDLE;
169 } else if (idle_time() == base::TimeDelta()) {
170 return UNUSED;
171 } else {
172 return UNUSED_IDLE;
173 }
174 }
175 const LoadTimingInfo::ConnectTiming& connect_timing() const { 167 const LoadTimingInfo::ConnectTiming& connect_timing() const {
176 return connect_timing_; 168 return connect_timing_;
177 } 169 }
178 void set_connect_timing(const LoadTimingInfo::ConnectTiming& connect_timing) { 170 void set_connect_timing(const LoadTimingInfo::ConnectTiming& connect_timing) {
179 connect_timing_ = connect_timing; 171 connect_timing_ = connect_timing;
180 } 172 }
181 173
182 private: 174 private:
183 // Called on asynchronous completion of an Init() request. 175 // Called on asynchronous completion of an Init() request.
184 void OnIOComplete(int result); 176 void OnIOComplete(int result);
185 177
186 // Called on completion (both asynchronous & synchronous) of an Init() 178 // Called on completion (both asynchronous & synchronous) of an Init()
187 // request. 179 // request.
188 void HandleInitCompletion(int result); 180 void HandleInitCompletion(int result);
189 181
190 // Resets the state of the ClientSocketHandle. |cancel| indicates whether or 182 // Resets the state of the ClientSocketHandle. |cancel| indicates whether or
191 // not to try to cancel the request with the ClientSocketPool. Does not 183 // not to try to cancel the request with the ClientSocketPool. Does not
192 // reset the supplemental error state. 184 // reset the supplemental error state.
193 void ResetInternal(bool cancel); 185 void ResetInternal(bool cancel);
194 186
195 // Resets the supplemental error state. 187 // Resets the supplemental error state.
196 void ResetErrorState(); 188 void ResetErrorState();
197 189
198 bool is_initialized_; 190 bool is_initialized_;
199 ClientSocketPool* pool_; 191 ClientSocketPool* pool_;
200 HigherLayeredPool* higher_pool_; 192 HigherLayeredPool* higher_pool_;
201 scoped_ptr<StreamSocket> socket_; 193 scoped_ptr<StreamSocket> socket_;
202 std::string group_name_; 194 std::string group_name_;
203 bool is_reused_; 195 SocketReuseType reuse_type_;
204 CompletionCallback callback_; 196 CompletionCallback callback_;
205 CompletionCallback user_callback_; 197 CompletionCallback user_callback_;
206 base::TimeDelta idle_time_; 198 base::TimeDelta idle_time_;
207 int pool_id_; // See ClientSocketPool::ReleaseSocket() for an explanation. 199 int pool_id_; // See ClientSocketPool::ReleaseSocket() for an explanation.
208 bool is_ssl_error_; 200 bool is_ssl_error_;
209 HttpResponseInfo ssl_error_response_info_; 201 HttpResponseInfo ssl_error_response_info_;
210 scoped_ptr<ClientSocketHandle> pending_http_proxy_connection_; 202 scoped_ptr<ClientSocketHandle> pending_http_proxy_connection_;
211 base::TimeTicks init_time_; 203 base::TimeTicks init_time_;
212 base::TimeDelta setup_time_; 204 base::TimeDelta setup_time_;
213 205
(...skipping 28 matching lines...) Expand all
242 user_callback_ = callback; 234 user_callback_ = callback;
243 } else { 235 } else {
244 HandleInitCompletion(rv); 236 HandleInitCompletion(rv);
245 } 237 }
246 return rv; 238 return rv;
247 } 239 }
248 240
249 } // namespace net 241 } // namespace net
250 242
251 #endif // NET_SOCKET_CLIENT_SOCKET_HANDLE_H_ 243 #endif // NET_SOCKET_CLIENT_SOCKET_HANDLE_H_
OLDNEW
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/socket/client_socket_handle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698