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

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

Issue 3032014: Support both preconnection, and pre-resolution for subresources... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/net/preconnect.h ('k') | chrome/browser/net/predictor.h » ('j') | no next file with comments »
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"
11 #include "chrome/common/net/url_request_context_getter.h" 11 #include "chrome/common/net/url_request_context_getter.h"
12 #include "net/base/host_port_pair.h" 12 #include "net/base/host_port_pair.h"
13 #include "net/http/http_network_session.h" 13 #include "net/http/http_network_session.h"
14 #include "net/http/http_transaction_factory.h" 14 #include "net/http/http_transaction_factory.h"
15 #include "net/proxy/proxy_service.h" 15 #include "net/proxy/proxy_service.h"
16 #include "net/url_request/url_request_context.h" 16 #include "net/url_request/url_request_context.h"
17 17
18 namespace chrome_browser_net { 18 namespace chrome_browser_net {
19 19
20 // static 20 // static
21 bool Preconnect::preconnect_despite_proxy_ = false; 21 bool Preconnect::preconnect_despite_proxy_ = false;
22 22
23 // We will deliberately leak this singular instance, which is used only for 23 // We will deliberately leak this singular instance, which is used only for
24 // callbacks. 24 // callbacks.
25 // static 25 // static
26 Preconnect* Preconnect::callback_instance_; 26 Preconnect* Preconnect::callback_instance_;
27 27
28 // static 28 // static
29 bool Preconnect::PreconnectOnUIThread(const GURL& url) { 29 void Preconnect::PreconnectOnUIThread(const GURL& url,
30 UrlInfo::ResolutionMotivation motivation) {
30 // Try to do connection warming for this search provider. 31 // Try to do connection warming for this search provider.
31 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext(); 32 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext();
32 if (!getter) 33 if (!getter)
33 return false; 34 return;
34 // Prewarm connection to Search URL. 35 // Prewarm connection to Search URL.
35 ChromeThread::PostTask( 36 ChromeThread::PostTask(
36 ChromeThread::IO, 37 ChromeThread::IO,
37 FROM_HERE, 38 FROM_HERE,
38 NewRunnableFunction(Preconnect::PreconnectOnIOThread, url)); 39 NewRunnableFunction(Preconnect::PreconnectOnIOThread, url, motivation));
39 return true; 40 return;
40 } 41 }
41 42
42 enum ProxyStatus { 43 enum ProxyStatus {
43 PROXY_STATUS_IGNORED, 44 PROXY_STATUS_IGNORED,
44 PROXY_UNINITIALIZED, 45 PROXY_UNINITIALIZED,
45 PROXY_NOT_USED, 46 PROXY_NOT_USED,
46 PROXY_PAC_RESOLVER, 47 PROXY_PAC_RESOLVER,
47 PROXY_HAS_RULES, 48 PROXY_HAS_RULES,
48 PROXY_MAX, 49 PROXY_MAX,
49 }; 50 };
50 51
51 static void HistogramPreconnectStatus(ProxyStatus status) { 52 static void HistogramPreconnectStatus(ProxyStatus status) {
52 UMA_HISTOGRAM_ENUMERATION("Net.PreconnectProxyStatus", status, PROXY_MAX); 53 UMA_HISTOGRAM_ENUMERATION("Net.PreconnectProxyStatus", status, PROXY_MAX);
53 } 54 }
54 55
55 // static 56 // static
56 void Preconnect::PreconnectOnIOThread(const GURL& url) { 57 void Preconnect::PreconnectOnIOThread(const GURL& url,
57 // TODO(jar): This does not handle proxies currently. 58 UrlInfo::ResolutionMotivation motivation) {
58 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext(); 59 URLRequestContextGetter* getter = Profile::GetDefaultRequestContext();
59 if (!getter) 60 if (!getter)
60 return; 61 return;
61 if (!ChromeThread::CurrentlyOn(ChromeThread::IO)) { 62 if (!ChromeThread::CurrentlyOn(ChromeThread::IO)) {
62 LOG(DFATAL) << "This must be run only on the IO thread."; 63 LOG(DFATAL) << "This must be run only on the IO thread.";
63 return; 64 return;
64 } 65 }
65 URLRequestContext* context = getter->GetURLRequestContext(); 66 URLRequestContext* context = getter->GetURLRequestContext();
66 67
67 if (preconnect_despite_proxy_) { 68 if (preconnect_despite_proxy_) {
68 HistogramPreconnectStatus(PROXY_STATUS_IGNORED); 69 HistogramPreconnectStatus(PROXY_STATUS_IGNORED);
69 } else { 70 } else {
70 // Currently we avoid all preconnects if there is a proxy configuration. 71 // Currently we avoid all preconnects if there is a proxy configuration.
71 net::ProxyService* proxy_service = context->proxy_service(); 72 net::ProxyService* proxy_service = context->proxy_service();
72 if (!proxy_service->config_has_been_initialized()) { 73 if (!proxy_service->config_has_been_initialized()) {
73 HistogramPreconnectStatus(PROXY_UNINITIALIZED); 74 HistogramPreconnectStatus(PROXY_UNINITIALIZED);
74 } else { 75 } else {
75 if (proxy_service->config().MayRequirePACResolver()) { 76 if (proxy_service->config().MayRequirePACResolver()) {
76 HistogramPreconnectStatus(PROXY_PAC_RESOLVER); 77 HistogramPreconnectStatus(PROXY_PAC_RESOLVER);
77 return; 78 return;
78 } 79 }
79 if (!proxy_service->config().proxy_rules().empty()) { 80 if (!proxy_service->config().proxy_rules().empty()) {
80 HistogramPreconnectStatus(PROXY_HAS_RULES); 81 HistogramPreconnectStatus(PROXY_HAS_RULES);
81 return; 82 return;
82 } 83 }
83 HistogramPreconnectStatus(PROXY_NOT_USED); 84 HistogramPreconnectStatus(PROXY_NOT_USED);
84 } 85 }
85 } 86 }
86 87
88 UMA_HISTOGRAM_ENUMERATION("Net.PreconnectMotivation", motivation,
89 UrlInfo::MAX_MOTIVATED);
90
87 net::HttpTransactionFactory* factory = context->http_transaction_factory(); 91 net::HttpTransactionFactory* factory = context->http_transaction_factory();
88 net::HttpNetworkSession* session = factory->GetSession(); 92 net::HttpNetworkSession* session = factory->GetSession();
89 93
90 net::ClientSocketHandle handle; 94 net::ClientSocketHandle handle;
91 if (!callback_instance_) 95 if (!callback_instance_)
92 callback_instance_ = new Preconnect; 96 callback_instance_ = new Preconnect;
93 97
94 scoped_refptr<net::TCPSocketParams> tcp_params = 98 scoped_refptr<net::TCPSocketParams> tcp_params =
95 new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW, 99 new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW,
96 GURL(), false); 100 GURL(), false);
(...skipping 29 matching lines...) Expand all
126 handle.Init(group_name, tcp_params, net::LOWEST, callback_instance_, pool, 130 handle.Init(group_name, tcp_params, net::LOWEST, callback_instance_, pool,
127 net::BoundNetLog()); 131 net::BoundNetLog());
128 handle.Reset(); 132 handle.Reset();
129 } 133 }
130 134
131 void Preconnect::RunWithParams(const Tuple1<int>& params) { 135 void Preconnect::RunWithParams(const Tuple1<int>& params) {
132 // This will rarely be called, as we reset the connection just after creating. 136 // This will rarely be called, as we reset the connection just after creating.
133 NOTREACHED(); 137 NOTREACHED();
134 } 138 }
135 } // chrome_browser_net 139 } // chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/preconnect.h ('k') | chrome/browser/net/predictor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698