Index: chrome/browser/net/preconnect.cc |
diff --git a/chrome/browser/net/preconnect.cc b/chrome/browser/net/preconnect.cc |
index 10aa8b07ed51c61802daba7efbe50b49868f74e9..7930a68a3d206c810459ec5a9f2981eaaa573a7e 100644 |
--- a/chrome/browser/net/preconnect.cc |
+++ b/chrome/browser/net/preconnect.cc |
@@ -54,6 +54,7 @@ static void HistogramPreconnectStatus(ProxyStatus status) { |
// static |
void Preconnect::PreconnectOnIOThread(const GURL& url) { |
+ // TODO(jar): This does not handle proxies currently. |
URLRequestContextGetter* getter = Profile::GetDefaultRequestContext(); |
if (!getter) |
return; |
@@ -85,24 +86,45 @@ void Preconnect::PreconnectOnIOThread(const GURL& url) { |
net::HttpTransactionFactory* factory = context->http_transaction_factory(); |
net::HttpNetworkSession* session = factory->GetSession(); |
- scoped_refptr<net::TCPClientSocketPool> pool = session->tcp_socket_pool(); |
- |
- scoped_refptr<net::TCPSocketParams> params = |
- new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW, |
- GURL(), false); |
net::ClientSocketHandle handle; |
if (!callback_instance_) |
callback_instance_ = new Preconnect; |
+ scoped_refptr<net::TCPSocketParams> tcp_params = |
+ new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW, |
+ GURL(), false); |
+ |
net::HostPortPair endpoint(url.host(), url.EffectiveIntPort()); |
std::string group_name = endpoint.ToString(); |
- if (url.SchemeIs("https")) |
+ |
+ if (url.SchemeIs("https")) { |
group_name = StringPrintf("ssl/%s", group_name.c_str()); |
- // TODO(jar): This does not handle proxies currently. |
- handle.Init(group_name, params, net::LOWEST, |
- callback_instance_, pool, net::BoundNetLog()); |
+ net::SSLConfig ssl_config; |
+ session->ssl_config_service()->GetSSLConfig(&ssl_config); |
+ // All preconnects should be for main pages. |
+ ssl_config.verify_ev_cert = true; |
+ |
+ scoped_refptr<net::SSLSocketParams> ssl_params = |
+ new net::SSLSocketParams(tcp_params, NULL, NULL, |
+ net::ProxyServer::SCHEME_DIRECT, |
+ url.HostNoBrackets(), ssl_config, |
+ 0, false); |
+ |
+ const scoped_refptr<net::SSLClientSocketPool>& pool = |
+ session->ssl_socket_pool(); |
+ |
+ handle.Init(group_name, ssl_params, net::LOWEST, callback_instance_, pool, |
+ net::BoundNetLog()); |
+ handle.Reset(); |
+ return; |
+ } |
+ |
+ const scoped_refptr<net::TCPClientSocketPool>& pool = |
+ session->tcp_socket_pool(); |
+ handle.Init(group_name, tcp_params, net::LOWEST, callback_instance_, pool, |
+ net::BoundNetLog()); |
handle.Reset(); |
} |