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

Side by Side Diff: chrome/browser/net/preconnect.cc

Issue 2870030: Implement SSLClientSocketPool. (Closed)
Patch Set: Rebase and fix mac compile error Created 10 years, 5 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
« no previous file with comments | « no previous file | net/base/load_flags_list.h » ('j') | net/socket/client_socket_pool_base.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/net/preconnect.h" 5 #include "chrome/browser/net/preconnect.h"
6 6
7 #include "base/histogram.h" 7 #include "base/histogram.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "chrome/browser/profile.h" 9 #include "chrome/browser/profile.h"
10 #include "chrome/browser/chrome_thread.h" 10 #include "chrome/browser/chrome_thread.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 PROXY_HAS_RULES, 47 PROXY_HAS_RULES,
48 PROXY_MAX, 48 PROXY_MAX,
49 }; 49 };
50 50
51 static void HistogramPreconnectStatus(ProxyStatus status) { 51 static void HistogramPreconnectStatus(ProxyStatus status) {
52 UMA_HISTOGRAM_ENUMERATION("Net.PreconnectProxyStatus", status, PROXY_MAX); 52 UMA_HISTOGRAM_ENUMERATION("Net.PreconnectProxyStatus", status, PROXY_MAX);
53 } 53 }
54 54
55 // static 55 // static
56 void Preconnect::PreconnectOnIOThread(const GURL& url) { 56 void Preconnect::PreconnectOnIOThread(const GURL& url) {
57 // TODO(jar): This does not handle proxies currently.
57 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext(); 58 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext();
58 if (!getter) 59 if (!getter)
59 return; 60 return;
60 if (!ChromeThread::CurrentlyOn(ChromeThread::IO)) { 61 if (!ChromeThread::CurrentlyOn(ChromeThread::IO)) {
61 LOG(DFATAL) << "This must be run only on the IO thread."; 62 LOG(DFATAL) << "This must be run only on the IO thread.";
62 return; 63 return;
63 } 64 }
64 URLRequestContext* context = getter->GetURLRequestContext(); 65 URLRequestContext* context = getter->GetURLRequestContext();
65 66
66 if (preconnect_despite_proxy_) { 67 if (preconnect_despite_proxy_) {
(...skipping 11 matching lines...) Expand all
78 if (!proxy_service->config().proxy_rules().empty()) { 79 if (!proxy_service->config().proxy_rules().empty()) {
79 HistogramPreconnectStatus(PROXY_HAS_RULES); 80 HistogramPreconnectStatus(PROXY_HAS_RULES);
80 return; 81 return;
81 } 82 }
82 HistogramPreconnectStatus(PROXY_NOT_USED); 83 HistogramPreconnectStatus(PROXY_NOT_USED);
83 } 84 }
84 } 85 }
85 86
86 net::HttpTransactionFactory* factory = context->http_transaction_factory(); 87 net::HttpTransactionFactory* factory = context->http_transaction_factory();
87 net::HttpNetworkSession* session = factory->GetSession(); 88 net::HttpNetworkSession* session = factory->GetSession();
88 scoped_refptr<net::TCPClientSocketPool> pool = session->tcp_socket_pool();
89
90 scoped_refptr<net::TCPSocketParams> params =
91 new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW,
92 GURL(), false);
93 89
94 net::ClientSocketHandle handle; 90 net::ClientSocketHandle handle;
95 if (!callback_instance_) 91 if (!callback_instance_)
96 callback_instance_ = new Preconnect; 92 callback_instance_ = new Preconnect;
97 93
94 scoped_refptr<net::TCPSocketParams> tcp_params =
95 new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW,
96 GURL(), false);
97
98 net::HostPortPair endpoint(url.host(), url.EffectiveIntPort()); 98 net::HostPortPair endpoint(url.host(), url.EffectiveIntPort());
99 std::string group_name = endpoint.ToString(); 99 std::string group_name = endpoint.ToString();
100 if (url.SchemeIs("https")) 100
101 if (url.SchemeIs("https")) {
101 group_name = StringPrintf("ssl/%s", group_name.c_str()); 102 group_name = StringPrintf("ssl/%s", group_name.c_str());
102 103
103 // TODO(jar): This does not handle proxies currently. 104 net::SSLConfig ssl_config;
104 handle.Init(group_name, params, net::LOWEST, 105 session->ssl_config_service()->GetSSLConfig(&ssl_config);
105 callback_instance_, pool, net::BoundNetLog()); 106 // All preconnects should be for main pages.
107 ssl_config.verify_ev_cert = true;
108
109 scoped_refptr<net::SSLSocketParams> ssl_params =
110 new net::SSLSocketParams(tcp_params, NULL, NULL,
111 net::ProxyServer::SCHEME_DIRECT,
112 url.HostNoBrackets(), ssl_config,
113 0, false);
114
115 const scoped_refptr<net::SSLClientSocketPool>& pool =
116 session->ssl_socket_pool();
117
118 handle.Init(group_name, ssl_params, net::LOWEST, callback_instance_, pool,
119 net::BoundNetLog());
120 handle.Reset();
121 return;
122 }
123
124 const scoped_refptr<net::TCPClientSocketPool>& pool =
125 session->tcp_socket_pool();
126 handle.Init(group_name, tcp_params, net::LOWEST, callback_instance_, pool,
127 net::BoundNetLog());
106 handle.Reset(); 128 handle.Reset();
107 } 129 }
108 130
109 void Preconnect::RunWithParams(const Tuple1<int>& params) { 131 void Preconnect::RunWithParams(const Tuple1<int>& params) {
110 // This will rarely be called, as we reset the connection just after creating. 132 // This will rarely be called, as we reset the connection just after creating.
111 NOTREACHED(); 133 NOTREACHED();
112 } 134 }
113 } // chrome_browser_net 135 } // chrome_browser_net
OLDNEW
« no previous file with comments | « no previous file | net/base/load_flags_list.h » ('j') | net/socket/client_socket_pool_base.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698