| Index: net/socket/client_socket_handle.h
|
| diff --git a/net/socket/client_socket_handle.h b/net/socket/client_socket_handle.h
|
| index 8ec4eb58d3a3d1b81a8a5229f2be4b2afc99000c..b0cb5746b41af5b79ce45432ad42a0a30fbe297c 100644
|
| --- a/net/socket/client_socket_handle.h
|
| +++ b/net/socket/client_socket_handle.h
|
| @@ -16,6 +16,7 @@
|
| #include "net/base/net_errors.h"
|
| #include "net/base/net_log.h"
|
| #include "net/base/request_priority.h"
|
| +#include "net/http/http_response_info.h"
|
| #include "net/socket/client_socket.h"
|
| #include "net/socket/client_socket_pool.h"
|
|
|
| @@ -60,6 +61,9 @@ class ClientSocketHandle {
|
| // that the error is not recoverable, the Disconnect method should be used
|
| // on the socket, so that it does not get reused.
|
| //
|
| + // A non-recoverable error may set additional state in the ClientSocketHandle
|
| + // to allow the caller to determine what went wrong.
|
| + //
|
| // Init may be called multiple times.
|
| //
|
| // Profiling information for the request is saved to |net_log| if non-NULL.
|
| @@ -100,11 +104,26 @@ class ClientSocketHandle {
|
| void set_socket(ClientSocket* s) { socket_.reset(s); }
|
| void set_idle_time(base::TimeDelta idle_time) { idle_time_ = idle_time; }
|
| void set_pool_id(int id) { pool_id_ = id; }
|
| + void set_tunnel_auth_response_info(
|
| + const scoped_refptr<HttpResponseHeaders>& headers,
|
| + const scoped_refptr<AuthChallengeInfo>& auth_challenge) {
|
| + tunnel_auth_response_info_.headers = headers;
|
| + tunnel_auth_response_info_.auth_challenge = auth_challenge;
|
| + }
|
| + void set_is_ssl_error(bool is_ssl_error) { is_ssl_error_ = is_ssl_error; }
|
|
|
| // These may only be used if is_initialized() is true.
|
| const std::string& group_name() const { return group_name_; }
|
| ClientSocket* socket() { return socket_.get(); }
|
| ClientSocket* release_socket() { return socket_.release(); }
|
| + const HttpResponseInfo& tunnel_auth_response_info() const {
|
| + return tunnel_auth_response_info_;
|
| + }
|
| + // Only valid if there is no |socket_|.
|
| + bool is_ssl_error() const {
|
| + DCHECK(socket_.get() == NULL);
|
| + return is_ssl_error_;
|
| + }
|
| bool is_reused() const { return is_reused_; }
|
| base::TimeDelta idle_time() const { return idle_time_; }
|
| SocketReuseType reuse_type() const {
|
| @@ -139,9 +158,13 @@ class ClientSocketHandle {
|
| void HandleInitCompletion(int result);
|
|
|
| // Resets the state of the ClientSocketHandle. |cancel| indicates whether or
|
| - // not to try to cancel the request with the ClientSocketPool.
|
| + // not to try to cancel the request with the ClientSocketPool. Does not
|
| + // reset the supplemental error state.
|
| void ResetInternal(bool cancel);
|
|
|
| + // Resets the supplemental error state.
|
| + void ResetErrorState();
|
| +
|
| scoped_refptr<ClientSocketPool> pool_;
|
| scoped_ptr<ClientSocket> socket_;
|
| std::string group_name_;
|
| @@ -150,6 +173,8 @@ class ClientSocketHandle {
|
| CompletionCallback* user_callback_;
|
| base::TimeDelta idle_time_;
|
| int pool_id_; // See ClientSocketPool::ReleaseSocket() for an explanation.
|
| + bool is_ssl_error_;
|
| + HttpResponseInfo tunnel_auth_response_info_;
|
| base::TimeTicks init_time_;
|
| base::TimeDelta setup_time_;
|
|
|
| @@ -174,6 +199,7 @@ int ClientSocketHandle::Init(const std::string& group_name,
|
| // (defined in client_socket_pool.h).
|
| CheckIsValidSocketParamsForPool<PoolType, SocketParams>();
|
| ResetInternal(true);
|
| + ResetErrorState();
|
| pool_ = pool;
|
| group_name_ = group_name;
|
| init_time_ = base::TimeTicks::Now();
|
|
|