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

Side by Side Diff: net/socket/client_socket_pool_manager.cc

Issue 451383002: Plumbing for TCP FastOpen for SSL sockets. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added test and addressed comments. Created 6 years, 3 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/socket/client_socket_pool_manager.h" 5 #include "net/socket/client_socket_pool_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 const SSLConfig& ssl_config_for_origin, 77 const SSLConfig& ssl_config_for_origin,
78 const SSLConfig& ssl_config_for_proxy, 78 const SSLConfig& ssl_config_for_proxy,
79 bool force_tunnel, 79 bool force_tunnel,
80 PrivacyMode privacy_mode, 80 PrivacyMode privacy_mode,
81 const BoundNetLog& net_log, 81 const BoundNetLog& net_log,
82 int num_preconnect_streams, 82 int num_preconnect_streams,
83 ClientSocketHandle* socket_handle, 83 ClientSocketHandle* socket_handle,
84 HttpNetworkSession::SocketPoolType socket_pool_type, 84 HttpNetworkSession::SocketPoolType socket_pool_type,
85 const OnHostResolutionCallback& resolution_callback, 85 const OnHostResolutionCallback& resolution_callback,
86 const CompletionCallback& callback) { 86 const CompletionCallback& callback) {
87 scoped_refptr<TransportSocketParams> tcp_params;
88 scoped_refptr<HttpProxySocketParams> http_proxy_params; 87 scoped_refptr<HttpProxySocketParams> http_proxy_params;
89 scoped_refptr<SOCKSSocketParams> socks_params; 88 scoped_refptr<SOCKSSocketParams> socks_params;
90 scoped_ptr<HostPortPair> proxy_host_port; 89 scoped_ptr<HostPortPair> proxy_host_port;
91 90
92 bool using_ssl = request_url.SchemeIs("https") || 91 bool using_ssl = request_url.SchemeIs("https") ||
93 request_url.SchemeIs("wss") || force_spdy_over_ssl; 92 request_url.SchemeIs("wss") || force_spdy_over_ssl;
94 93
95 HostPortPair origin_host_port = 94 HostPortPair origin_host_port =
96 HostPortPair(request_url.HostNoBrackets(), 95 HostPortPair(request_url.HostNoBrackets(),
97 request_url.EffectiveIntPort()); 96 request_url.EffectiveIntPort());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 break; 147 break;
149 default: 148 default:
150 CHECK(false); 149 CHECK(false);
151 break; 150 break;
152 } 151 }
153 } 152 }
154 connection_group = prefix + connection_group; 153 connection_group = prefix + connection_group;
155 } 154 }
156 155
157 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0; 156 bool ignore_limits = (request_load_flags & LOAD_IGNORE_LIMITS) != 0;
158 if (proxy_info.is_direct()) { 157 if (!proxy_info.is_direct()) {
159 tcp_params = new TransportSocketParams(origin_host_port,
160 disable_resolver_cache,
161 ignore_limits,
162 resolution_callback);
163 } else {
164 ProxyServer proxy_server = proxy_info.proxy_server(); 158 ProxyServer proxy_server = proxy_info.proxy_server();
165 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); 159 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair()));
166 scoped_refptr<TransportSocketParams> proxy_tcp_params( 160 scoped_refptr<TransportSocketParams> proxy_tcp_params(
167 new TransportSocketParams(*proxy_host_port, 161 new TransportSocketParams(
168 disable_resolver_cache, 162 *proxy_host_port,
169 ignore_limits, 163 disable_resolver_cache,
170 resolution_callback)); 164 ignore_limits,
165 resolution_callback,
166 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
171 167
172 if (proxy_info.is_http() || proxy_info.is_https()) { 168 if (proxy_info.is_http() || proxy_info.is_https()) {
173 std::string user_agent; 169 std::string user_agent;
174 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent, 170 request_extra_headers.GetHeader(HttpRequestHeaders::kUserAgent,
175 &user_agent); 171 &user_agent);
176 scoped_refptr<SSLSocketParams> ssl_params; 172 scoped_refptr<SSLSocketParams> ssl_params;
177 if (proxy_info.is_https()) { 173 if (proxy_info.is_https()) {
174 // TODO (jri): Enable a finch trial to use
175 // COMBINE_CONNECT_AND_WRITE_DESIRED for SSL sockets.
176 proxy_tcp_params =
177 new TransportSocketParams(
178 *proxy_host_port,
179 disable_resolver_cache,
180 ignore_limits,
181 resolution_callback,
182 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT);
178 // Set ssl_params, and unset proxy_tcp_params 183 // Set ssl_params, and unset proxy_tcp_params
179 ssl_params = new SSLSocketParams(proxy_tcp_params, 184 ssl_params = new SSLSocketParams(proxy_tcp_params,
180 NULL, 185 NULL,
181 NULL, 186 NULL,
182 *proxy_host_port.get(), 187 *proxy_host_port.get(),
183 ssl_config_for_proxy, 188 ssl_config_for_proxy,
184 PRIVACY_MODE_DISABLED, 189 PRIVACY_MODE_DISABLED,
185 load_flags, 190 load_flags,
186 force_spdy_over_ssl, 191 force_spdy_over_ssl,
187 want_spdy_over_npn); 192 want_spdy_over_npn);
(...skipping 25 matching lines...) Expand all
213 origin_host_port); 218 origin_host_port);
214 } 219 }
215 } 220 }
216 221
217 // Change group name if privacy mode is enabled. 222 // Change group name if privacy mode is enabled.
218 if (privacy_mode == PRIVACY_MODE_ENABLED) 223 if (privacy_mode == PRIVACY_MODE_ENABLED)
219 connection_group = "pm/" + connection_group; 224 connection_group = "pm/" + connection_group;
220 225
221 // Deal with SSL - which layers on top of any given proxy. 226 // Deal with SSL - which layers on top of any given proxy.
222 if (using_ssl) { 227 if (using_ssl) {
228 scoped_refptr<TransportSocketParams> ssl_tcp_params;
229 if (proxy_info.is_direct()) {
230 // Setup TCP params if non-proxied SSL connection.
231 // TODO (jri): Enable a finch trial to use
232 // COMBINE_CONNECT_AND_WRITE_DESIRED for SSL sockets.
233 ssl_tcp_params =
234 new TransportSocketParams(
235 origin_host_port,
236 disable_resolver_cache,
237 ignore_limits,
238 resolution_callback,
239 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT);
240 }
223 scoped_refptr<SSLSocketParams> ssl_params = 241 scoped_refptr<SSLSocketParams> ssl_params =
224 new SSLSocketParams(tcp_params, 242 new SSLSocketParams(ssl_tcp_params,
225 socks_params, 243 socks_params,
226 http_proxy_params, 244 http_proxy_params,
227 origin_host_port, 245 origin_host_port,
228 ssl_config_for_origin, 246 ssl_config_for_origin,
229 privacy_mode, 247 privacy_mode,
230 load_flags, 248 load_flags,
231 force_spdy_over_ssl, 249 force_spdy_over_ssl,
232 want_spdy_over_npn); 250 want_spdy_over_npn);
233 SSLClientSocketPool* ssl_pool = NULL; 251 SSLClientSocketPool* ssl_pool = NULL;
234 if (proxy_info.is_direct()) { 252 if (proxy_info.is_direct()) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 num_preconnect_streams, net_log); 291 num_preconnect_streams, net_log);
274 return OK; 292 return OK;
275 } 293 }
276 294
277 return socket_handle->Init(connection_group, socks_params, 295 return socket_handle->Init(connection_group, socks_params,
278 request_priority, callback, pool, 296 request_priority, callback, pool,
279 net_log); 297 net_log);
280 } 298 }
281 299
282 DCHECK(proxy_info.is_direct()); 300 DCHECK(proxy_info.is_direct());
283 301 scoped_refptr<TransportSocketParams> tcp_params =
302 new TransportSocketParams(
303 origin_host_port,
304 disable_resolver_cache,
305 ignore_limits,
306 resolution_callback,
307 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT);
284 TransportClientSocketPool* pool = 308 TransportClientSocketPool* pool =
285 session->GetTransportSocketPool(socket_pool_type); 309 session->GetTransportSocketPool(socket_pool_type);
286 if (num_preconnect_streams) { 310 if (num_preconnect_streams) {
287 RequestSocketsForPool(pool, connection_group, tcp_params, 311 RequestSocketsForPool(pool, connection_group, tcp_params,
288 num_preconnect_streams, net_log); 312 num_preconnect_streams, net_log);
289 return OK; 313 return OK;
290 } 314 }
291 315
292 return socket_handle->Init(connection_group, tcp_params, 316 return socket_handle->Init(connection_group, tcp_params,
293 request_priority, callback, 317 request_priority, callback,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 int num_preconnect_streams) { 501 int num_preconnect_streams) {
478 return InitSocketPoolHelper( 502 return InitSocketPoolHelper(
479 request_url, request_extra_headers, request_load_flags, request_priority, 503 request_url, request_extra_headers, request_load_flags, request_priority,
480 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn, 504 session, proxy_info, force_spdy_over_ssl, want_spdy_over_npn,
481 ssl_config_for_origin, ssl_config_for_proxy, false, privacy_mode, net_log, 505 ssl_config_for_origin, ssl_config_for_proxy, false, privacy_mode, net_log,
482 num_preconnect_streams, NULL, HttpNetworkSession::NORMAL_SOCKET_POOL, 506 num_preconnect_streams, NULL, HttpNetworkSession::NORMAL_SOCKET_POOL,
483 OnHostResolutionCallback(), CompletionCallback()); 507 OnHostResolutionCallback(), CompletionCallback());
484 } 508 }
485 509
486 } // namespace net 510 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698