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

Unified Diff: net/quic/chromium/quic_stream_factory.cc

Issue 2894303002: Change HttpStreamFactoryImpl::Job to take a AlternativeServiceInfo
Patch Set: Change QuicStreamFactory::CreateSession() to take a QUIC version. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('k') | net/quic/chromium/quic_stream_factory_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/chromium/quic_stream_factory.cc
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
index 378985bbf25ad21af847fc2eace88b3fd1bbbe00..b3bb81ba3fac873bc824a055ba5a660071f1af80 100644
--- a/net/quic/chromium/quic_stream_factory.cc
+++ b/net/quic/chromium/quic_stream_factory.cc
@@ -326,6 +326,7 @@ class QuicStreamFactory::CertVerifierJob {
class QuicStreamFactory::Job {
public:
Job(QuicStreamFactory* factory,
+ const QuicVersion& quic_version,
HostResolver* host_resolver,
const QuicSessionKey& key,
bool was_alternative_service_recently_broken,
@@ -366,6 +367,7 @@ class QuicStreamFactory::Job {
IoState io_state_;
QuicStreamFactory* factory_;
+ QuicVersion quic_version_;
HostResolver* host_resolver_;
std::unique_ptr<HostResolver::Request> request_;
const QuicSessionKey key_;
@@ -383,6 +385,7 @@ class QuicStreamFactory::Job {
};
QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
+ const QuicVersion& quic_version,
HostResolver* host_resolver,
const QuicSessionKey& key,
bool was_alternative_service_recently_broken,
@@ -390,6 +393,7 @@ QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
const NetLogWithSource& net_log)
: io_state_(STATE_RESOLVE_HOST),
factory_(factory),
+ quic_version_(quic_version),
host_resolver_(host_resolver),
key_(key),
cert_verify_flags_(cert_verify_flags),
@@ -508,10 +512,11 @@ int QuicStreamFactory::Job::DoConnect() {
NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT,
NetLog::BoolCallback("require_confirmation", require_confirmation));
- int rv =
- factory_->CreateSession(key_, cert_verify_flags_, require_confirmation,
- address_list_, dns_resolution_start_time_,
- dns_resolution_end_time_, net_log_, &session_);
+ DCHECK_NE(quic_version_, QUIC_VERSION_UNSUPPORTED);
+ int rv = factory_->CreateSession(
+ key_, quic_version_, cert_verify_flags_, require_confirmation,
+ address_list_, dns_resolution_start_time_, dns_resolution_end_time_,
+ net_log_, &session_);
if (rv != OK) {
DCHECK(rv != ERR_IO_PENDING);
DCHECK(!session_);
@@ -581,6 +586,7 @@ QuicStreamRequest::~QuicStreamRequest() {
}
int QuicStreamRequest::Request(const HostPortPair& destination,
+ const QuicVersionVector& advertised_versions,
PrivacyMode privacy_mode,
int cert_verify_flags,
const GURL& url,
@@ -591,8 +597,8 @@ int QuicStreamRequest::Request(const HostPortPair& destination,
DCHECK(factory_);
server_id_ = QuicServerId(HostPortPair::FromURL(url), privacy_mode);
- int rv = factory_->Create(server_id_, destination, cert_verify_flags, url,
- method, net_log, this);
+ int rv = factory_->Create(server_id_, destination, advertised_versions,
+ cert_verify_flags, url, method, net_log, this);
if (rv == ERR_IO_PENDING) {
net_log_ = net_log;
callback_ = callback;
@@ -849,6 +855,7 @@ bool QuicStreamFactory::CanUseExistingSession(const QuicServerId& server_id,
int QuicStreamFactory::Create(const QuicServerId& server_id,
const HostPortPair& destination,
+ const QuicVersionVector& advertised_versions,
int cert_verify_flags,
const GURL& url,
QuicStringPiece method,
@@ -926,8 +933,10 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
ignore_result(StartCertVerifyJob(server_id, cert_verify_flags, net_log));
QuicSessionKey key(destination, server_id);
+ QuicVersion quic_version = SelectQuicVersion(advertised_versions);
+ DCHECK_NE(quic_version, QUIC_VERSION_UNSUPPORTED);
std::unique_ptr<Job> job = base::MakeUnique<Job>(
- this, host_resolver_, key, WasQuicRecentlyBroken(server_id),
+ this, quic_version, host_resolver_, key, WasQuicRecentlyBroken(server_id),
cert_verify_flags, net_log);
int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
base::Unretained(this), job.get()));
@@ -1445,15 +1454,15 @@ int QuicStreamFactory::ConfigureSocket(DatagramClientSocket* socket,
return OK;
}
-int QuicStreamFactory::CreateSession(
- const QuicSessionKey& key,
- int cert_verify_flags,
- bool require_confirmation,
- const AddressList& address_list,
- base::TimeTicks dns_resolution_start_time,
- base::TimeTicks dns_resolution_end_time,
- const NetLogWithSource& net_log,
- QuicChromiumClientSession** session) {
+int QuicStreamFactory::CreateSession(const QuicSessionKey& key,
+ const QuicVersion& quic_version,
+ int cert_verify_flags,
+ bool require_confirmation,
+ const AddressList& address_list,
+ base::TimeTicks dns_resolution_start_time,
+ base::TimeTicks dns_resolution_end_time,
+ const NetLogWithSource& net_log,
+ QuicChromiumClientSession** session) {
TRACE_EVENT0(kNetTracingCategory, "QuicStreamFactory::CreateSession");
IPEndPoint addr = *address_list.begin();
const QuicServerId& server_id = key.server_id();
@@ -1486,6 +1495,7 @@ int QuicStreamFactory::CreateSession(
InitializeCachedStateInCryptoConfig(server_id, server_info, &connection_id);
QuicChromiumPacketWriter* writer = new QuicChromiumPacketWriter(socket.get());
+ // TODO(zhongyi): pass over |quic_version| to QuicConnection;
QuicConnection* connection = new QuicConnection(
connection_id, QuicSocketAddress(QuicSocketAddressImpl(addr)),
helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
@@ -1579,6 +1589,18 @@ void QuicStreamFactory::ConfigureInitialRttEstimate(
SetInitialRttEstimate(base::TimeDelta(), INITIAL_RTT_DEFAULT, config);
}
+QuicVersion QuicStreamFactory::SelectQuicVersion(
+ const QuicVersionVector& advertised_versions) const {
+ for (const auto& supported : supported_versions_) {
+ for (const auto& advertised : advertised_versions) {
+ if (supported == advertised)
+ return supported;
+ }
+ }
+
+ return supported_versions_[0];
+}
+
const base::TimeDelta* QuicStreamFactory::GetServerNetworkStatsSmoothedRtt(
const QuicServerId& server_id) const {
url::SchemeHostPort server("https", server_id.host_port_pair().host(),
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('k') | net/quic/chromium/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698