summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/net')
-rw-r--r--chrome/browser/net/preconnect.cc36
-rw-r--r--chrome/browser/net/preconnect.h12
2 files changed, 41 insertions, 7 deletions
diff --git a/chrome/browser/net/preconnect.cc b/chrome/browser/net/preconnect.cc
index e6c1fd4..b5fd87b 100644
--- a/chrome/browser/net/preconnect.cc
+++ b/chrome/browser/net/preconnect.cc
@@ -1,5 +1,4 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Copyright (c) 2011, 2012 Code Aurora Forum. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -33,11 +32,12 @@ void PreconnectOnUIThread(
return;
}
+
void PreconnectOnIOThread(
const GURL& url,
UrlInfo::ResolutionMotivation motivation,
int count) {
- URLRequestContextGetter* getter = Profile::GetDefaultRequestContext();
+ net::URLRequestContextGetter* getter = Profile::GetDefaultRequestContext();
if (!getter)
return;
if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
@@ -53,9 +53,26 @@ void PreconnectOnIOThread(
net::HttpTransactionFactory* factory = context->http_transaction_factory();
net::HttpNetworkSession* session = factory->GetSession();
+ net::HttpRequestInfo request_info;
+ request_info.url = url;
+ request_info.method = "GET";
+ request_info.extra_headers.SetHeader(net::HttpRequestHeaders::kUserAgent,
+ context->GetUserAgent(url));
+ // It almost doesn't matter whether we use net::LOWEST or net::HIGHEST
+ // priority here, as we won't make a request, and will surrender the created
+ // socket to the pool as soon as we can. However, we would like to mark the
+ // speculative socket as such, and IF we use a net::LOWEST priority, and if
+ // a navigation asked for a socket (after us) then it would get our socket,
+ // and we'd get its later-arriving socket, which might make us record that
+ // the speculation didn't help :-/. By using net::HIGHEST, we ensure that
+ // a socket is given to us if "we asked first" and this allows us to mark it
+ // as speculative, and better detect stats (if it gets used).
+ // TODO(jar): histogram to see how often we accidentally use a previously-
+ // unused socket, when a previously used socket was available.
+ request_info.priority = net::HIGHEST;
+
// Translate the motivation from UrlRequest motivations to HttpRequest
// motivations.
- net::HttpRequestInfo::RequestMotivation motivation_;
switch (motivation) {
case UrlInfo::OMNIBOX_MOTIVATED:
request_info.motivation = net::HttpRequestInfo::OMNIBOX_MOTIVATED;
@@ -73,7 +90,18 @@ void PreconnectOnIOThread(
break;
}
- net::Preconnect::DoPreconnect(session, url, count, motivation_);
+ // Setup the SSL Configuration.
+ net::SSLConfig ssl_config;
+ session->ssl_config_service()->GetSSLConfig(&ssl_config);
+ if (session->http_stream_factory()->next_protos())
+ ssl_config.next_protos = *session->http_stream_factory()->next_protos();
+
+ // All preconnects should perform EV certificate verification.
+ ssl_config.verify_ev_cert = true;
+
+ net::HttpStreamFactory* http_stream_factory = session->http_stream_factory();
+ http_stream_factory->PreconnectStreams(
+ count, request_info, ssl_config, net::BoundNetLog());
}
} // namespace chrome_browser_net
diff --git a/chrome/browser/net/preconnect.h b/chrome/browser/net/preconnect.h
index 0d7ed21..056d5d6 100644
--- a/chrome/browser/net/preconnect.h
+++ b/chrome/browser/net/preconnect.h
@@ -1,18 +1,23 @@
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Copyright (c) 2011, Code Aurora Forum. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// A Preconnect instance maintains state while a TCP/IP connection is made, and
+// and then released into the pool of available connections for future use.
+
#ifndef CHROME_BROWSER_NET_PRECONNECT_H_
#define CHROME_BROWSER_NET_PRECONNECT_H_
#pragma once
-#include "net/http/preconnect.h"
-
#include "chrome/browser/net/url_info.h"
+class GURL;
+
namespace chrome_browser_net {
+// Try to preconnect. Typically motivated by OMNIBOX to reach search service.
+// |count| may be used to request more than one connection be established in
+// parallel.
void PreconnectOnUIThread(const GURL& url,
UrlInfo::ResolutionMotivation motivation,
int count);
@@ -23,6 +28,7 @@ void PreconnectOnUIThread(const GURL& url,
void PreconnectOnIOThread(const GURL& url,
UrlInfo::ResolutionMotivation motivation,
int count);
+
} // namespace chrome_browser_net
#endif // CHROME_BROWSER_NET_PRECONNECT_H_