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

Side by Side Diff: net/http/http_proxy_client_socket_pool.cc

Issue 2899313006: Plumb NQP to context and to http_proxy_client_socket_pool (Closed)
Patch Set: mmenke comments Created 3 years, 6 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
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 #include "net/http/http_proxy_client_socket_pool.h" 5 #include "net/http/http_proxy_client_socket_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 14 matching lines...) Expand all
25 #include "net/socket/transport_client_socket_pool.h" 25 #include "net/socket/transport_client_socket_pool.h"
26 #include "net/spdy/chromium/spdy_proxy_client_socket.h" 26 #include "net/spdy/chromium/spdy_proxy_client_socket.h"
27 #include "net/spdy/chromium/spdy_session.h" 27 #include "net/spdy/chromium/spdy_session.h"
28 #include "net/spdy/chromium/spdy_session_pool.h" 28 #include "net/spdy/chromium/spdy_session_pool.h"
29 #include "net/spdy/chromium/spdy_stream.h" 29 #include "net/spdy/chromium/spdy_stream.h"
30 #include "net/ssl/ssl_cert_request_info.h" 30 #include "net/ssl/ssl_cert_request_info.h"
31 #include "url/gurl.h" 31 #include "url/gurl.h"
32 32
33 namespace net { 33 namespace net {
34 34
35 namespace {
36
37 // HttpProxyConnectJobs will time out after this many seconds. Note this is on
38 // top of the timeout for the transport socket.
39 // TODO(kundaji): Proxy connect timeout should be independent of platform and be
40 // based on proxy. Bug http://crbug.com/407446.
41 #if defined(OS_ANDROID) || defined(OS_IOS)
42 static const int kHttpProxyConnectJobTimeoutInSeconds = 10;
43 #else
44 static const int kHttpProxyConnectJobTimeoutInSeconds = 30;
45 #endif
46
47 // Returns the default proxy connection timeout.
48 base::TimeDelta GetDefaultProxyConnectionTimeout(
49 TransportClientSocketPool* transport_pool,
50 SSLClientSocketPool* ssl_pool) {
51 base::TimeDelta max_pool_timeout = base::TimeDelta();
52
53 #if (!defined(OS_ANDROID) && !defined(OS_IOS))
54 if (transport_pool)
55 max_pool_timeout = transport_pool->ConnectionTimeout();
56 if (ssl_pool) {
57 max_pool_timeout =
58 std::max(max_pool_timeout, ssl_pool->ConnectionTimeout());
59 }
60 #endif // !defined(OS_ANDROID) && !defined(OS_IOS)
61
62 return max_pool_timeout +
63 base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds);
64 }
65
66 } // namespace
67
35 HttpProxySocketParams::HttpProxySocketParams( 68 HttpProxySocketParams::HttpProxySocketParams(
36 const scoped_refptr<TransportSocketParams>& transport_params, 69 const scoped_refptr<TransportSocketParams>& transport_params,
37 const scoped_refptr<SSLSocketParams>& ssl_params, 70 const scoped_refptr<SSLSocketParams>& ssl_params,
38 const std::string& user_agent, 71 const std::string& user_agent,
39 const HostPortPair& endpoint, 72 const HostPortPair& endpoint,
40 HttpAuthCache* http_auth_cache, 73 HttpAuthCache* http_auth_cache,
41 HttpAuthHandlerFactory* http_auth_handler_factory, 74 HttpAuthHandlerFactory* http_auth_handler_factory,
42 SpdySessionPool* spdy_session_pool, 75 SpdySessionPool* spdy_session_pool,
43 bool tunnel, 76 bool tunnel,
44 ProxyDelegate* proxy_delegate) 77 ProxyDelegate* proxy_delegate)
(...skipping 13 matching lines...) Expand all
58 const HostResolver::RequestInfo& HttpProxySocketParams::destination() const { 91 const HostResolver::RequestInfo& HttpProxySocketParams::destination() const {
59 if (transport_params_.get() == NULL) { 92 if (transport_params_.get() == NULL) {
60 return ssl_params_->GetDirectConnectionParams()->destination(); 93 return ssl_params_->GetDirectConnectionParams()->destination();
61 } else { 94 } else {
62 return transport_params_->destination(); 95 return transport_params_->destination();
63 } 96 }
64 } 97 }
65 98
66 HttpProxySocketParams::~HttpProxySocketParams() {} 99 HttpProxySocketParams::~HttpProxySocketParams() {}
67 100
68 // HttpProxyConnectJobs will time out after this many seconds. Note this is on
69 // top of the timeout for the transport socket.
70 // TODO(kundaji): Proxy connect timeout should be independent of platform and be
71 // based on proxy. Bug http://crbug.com/407446.
72 #if defined(OS_ANDROID) || defined(OS_IOS)
73 static const int kHttpProxyConnectJobTimeoutInSeconds = 10;
74 #else
75 static const int kHttpProxyConnectJobTimeoutInSeconds = 30;
76 #endif
77
78 HttpProxyConnectJob::HttpProxyConnectJob( 101 HttpProxyConnectJob::HttpProxyConnectJob(
79 const std::string& group_name, 102 const std::string& group_name,
80 RequestPriority priority, 103 RequestPriority priority,
81 ClientSocketPool::RespectLimits respect_limits, 104 ClientSocketPool::RespectLimits respect_limits,
82 const scoped_refptr<HttpProxySocketParams>& params, 105 const scoped_refptr<HttpProxySocketParams>& params,
83 const base::TimeDelta& timeout_duration, 106 const base::TimeDelta& timeout_duration,
84 TransportClientSocketPool* transport_pool, 107 TransportClientSocketPool* transport_pool,
85 SSLClientSocketPool* ssl_pool, 108 SSLClientSocketPool* ssl_pool,
86 Delegate* delegate, 109 Delegate* delegate,
87 NetLog* net_log) 110 NetLog* net_log)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) 165 if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED)
143 error_response_info_ = client_socket_->GetAdditionalErrorState(); 166 error_response_info_ = client_socket_->GetAdditionalErrorState();
144 167
145 if (result == OK || result == ERR_PROXY_AUTH_REQUESTED || 168 if (result == OK || result == ERR_PROXY_AUTH_REQUESTED ||
146 result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { 169 result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) {
147 SetSocket(std::move(client_socket_)); 170 SetSocket(std::move(client_socket_));
148 } 171 }
149 return result; 172 return result;
150 } 173 }
151 174
152 HttpProxyClientSocketPool:: 175 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::
153 HttpProxyConnectJobFactory::HttpProxyConnectJobFactory( 176 HttpProxyConnectJobFactory(TransportClientSocketPool* transport_pool,
154 TransportClientSocketPool* transport_pool, 177 SSLClientSocketPool* ssl_pool,
155 SSLClientSocketPool* ssl_pool, 178 NetworkQualityProvider* network_quality_provider,
156 NetLog* net_log) 179 NetLog* net_log)
157 : transport_pool_(transport_pool), 180 : transport_pool_(transport_pool),
158 ssl_pool_(ssl_pool), 181 ssl_pool_(ssl_pool),
159 net_log_(net_log) { 182 network_quality_provider_(network_quality_provider),
160 base::TimeDelta max_pool_timeout = base::TimeDelta(); 183 net_log_(net_log) {}
161
162 // TODO(kundaji): Proxy connect timeout should be independent of platform and be
163 // based on proxy. Bug http://crbug.com/407446.
164 #if (defined(OS_ANDROID) || defined(OS_IOS))
165 #else
166 if (transport_pool_)
167 max_pool_timeout = transport_pool_->ConnectionTimeout();
168 if (ssl_pool_)
169 max_pool_timeout = std::max(max_pool_timeout,
170 ssl_pool_->ConnectionTimeout());
171 #endif
172 timeout_ = max_pool_timeout +
173 base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds);
174 }
175 184
176 std::unique_ptr<ConnectJob> 185 std::unique_ptr<ConnectJob>
177 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::NewConnectJob( 186 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::NewConnectJob(
178 const std::string& group_name, 187 const std::string& group_name,
179 const PoolBase::Request& request, 188 const PoolBase::Request& request,
180 ConnectJob::Delegate* delegate) const { 189 ConnectJob::Delegate* delegate) const {
181 return std::unique_ptr<ConnectJob>(new HttpProxyConnectJob( 190 return std::unique_ptr<ConnectJob>(new HttpProxyConnectJob(
182 group_name, request.priority(), request.respect_limits(), 191 group_name, request.priority(), request.respect_limits(),
183 request.params(), ConnectionTimeout(), transport_pool_, ssl_pool_, 192 request.params(), ConnectionTimeout(), transport_pool_, ssl_pool_,
184 delegate, net_log_)); 193 delegate, net_log_));
185 } 194 }
186 195
187 base::TimeDelta 196 base::TimeDelta
188 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::ConnectionTimeout( 197 HttpProxyClientSocketPool::HttpProxyConnectJobFactory::ConnectionTimeout(
189 ) const { 198 ) const {
190 return timeout_; 199 // TODO(tbansal): https://crbug.com/704339. Use |network_quality_provider_|
200 // and field trial to determine the connection timeout.
201 // Silence unused variable warning.
mmenke 2017/06/08 17:53:02 Could we just pass it in to GetDefaultProxyConnect
tbansal1 2017/06/08 19:59:14 Ok, then I am keeping everything here, and removin
mmenke 2017/06/08 20:02:10 SGTM.
202 (void)network_quality_provider_;
203 return GetDefaultProxyConnectionTimeout(transport_pool_, ssl_pool_);
191 } 204 }
192 205
193 HttpProxyClientSocketPool::HttpProxyClientSocketPool( 206 HttpProxyClientSocketPool::HttpProxyClientSocketPool(
194 int max_sockets, 207 int max_sockets,
195 int max_sockets_per_group, 208 int max_sockets_per_group,
196 TransportClientSocketPool* transport_pool, 209 TransportClientSocketPool* transport_pool,
197 SSLClientSocketPool* ssl_pool, 210 SSLClientSocketPool* ssl_pool,
211 NetworkQualityProvider* network_quality_provider,
198 NetLog* net_log) 212 NetLog* net_log)
199 : transport_pool_(transport_pool), 213 : transport_pool_(transport_pool),
200 ssl_pool_(ssl_pool), 214 ssl_pool_(ssl_pool),
201 base_(this, 215 base_(this,
202 max_sockets, 216 max_sockets,
203 max_sockets_per_group, 217 max_sockets_per_group,
204 ClientSocketPool::unused_idle_socket_timeout(), 218 ClientSocketPool::unused_idle_socket_timeout(),
205 ClientSocketPool::used_idle_socket_timeout(), 219 ClientSocketPool::used_idle_socket_timeout(),
206 new HttpProxyConnectJobFactory(transport_pool, ssl_pool, net_log)) { 220 new HttpProxyConnectJobFactory(transport_pool,
221 ssl_pool,
222 network_quality_provider,
223 net_log)) {
207 // We should always have a |transport_pool_| except in unit tests. 224 // We should always have a |transport_pool_| except in unit tests.
208 if (transport_pool_) 225 if (transport_pool_)
209 base_.AddLowerLayeredPool(transport_pool_); 226 base_.AddLowerLayeredPool(transport_pool_);
210 if (ssl_pool_) 227 if (ssl_pool_)
211 base_.AddLowerLayeredPool(ssl_pool_); 228 base_.AddLowerLayeredPool(ssl_pool_);
212 } 229 }
213 230
214 HttpProxyClientSocketPool::~HttpProxyClientSocketPool() { 231 HttpProxyClientSocketPool::~HttpProxyClientSocketPool() {
215 } 232 }
216 233
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 base_.RemoveHigherLayeredPool(higher_pool); 342 base_.RemoveHigherLayeredPool(higher_pool);
326 } 343 }
327 344
328 bool HttpProxyClientSocketPool::CloseOneIdleConnection() { 345 bool HttpProxyClientSocketPool::CloseOneIdleConnection() {
329 if (base_.CloseOneIdleSocket()) 346 if (base_.CloseOneIdleSocket())
330 return true; 347 return true;
331 return base_.CloseOneIdleConnectionInHigherLayeredPool(); 348 return base_.CloseOneIdleConnectionInHigherLayeredPool();
332 } 349 }
333 350
334 } // namespace net 351 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_proxy_client_socket_pool.h ('k') | net/http/http_proxy_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698