| 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 5665ce49d2e8350457989cd85096ff84966b1427..00787a41862f78f97b0b6dfbd618d9297980e15d 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,18 +586,20 @@ QuicStreamRequest::~QuicStreamRequest() {
 | 
|  }
 | 
|  
 | 
|  int QuicStreamRequest::Request(const HostPortPair& destination,
 | 
| +                               QuicVersion quic_version,
 | 
|                                 PrivacyMode privacy_mode,
 | 
|                                 int cert_verify_flags,
 | 
|                                 const GURL& url,
 | 
|                                 QuicStringPiece method,
 | 
|                                 const NetLogWithSource& net_log,
 | 
|                                 const CompletionCallback& callback) {
 | 
| +  DCHECK_NE(quic_version, QUIC_VERSION_UNSUPPORTED);
 | 
|    DCHECK(callback_.is_null());
 | 
|    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, quic_version,
 | 
| +                            cert_verify_flags, url, method, net_log, this);
 | 
|    if (rv == ERR_IO_PENDING) {
 | 
|      net_log_ = net_log;
 | 
|      callback_ = callback;
 | 
| @@ -652,7 +659,6 @@ QuicStreamFactory::QuicStreamFactory(
 | 
|      QuicClock* clock,
 | 
|      size_t max_packet_length,
 | 
|      const std::string& user_agent_id,
 | 
| -    const QuicVersionVector& supported_versions,
 | 
|      bool store_server_configs_in_properties,
 | 
|      bool close_sessions_on_ip_change,
 | 
|      bool mark_quic_broken_when_network_blackholes,
 | 
| @@ -689,7 +695,6 @@ QuicStreamFactory::QuicStreamFactory(
 | 
|                                      ct_policy_enforcer,
 | 
|                                      transport_security_state,
 | 
|                                      cert_transparency_verifier))),
 | 
| -      supported_versions_(supported_versions),
 | 
|        mark_quic_broken_when_network_blackholes_(
 | 
|            mark_quic_broken_when_network_blackholes),
 | 
|        store_server_configs_in_properties_(store_server_configs_in_properties),
 | 
| @@ -849,6 +854,7 @@ bool QuicStreamFactory::CanUseExistingSession(const QuicServerId& server_id,
 | 
|  
 | 
|  int QuicStreamFactory::Create(const QuicServerId& server_id,
 | 
|                                const HostPortPair& destination,
 | 
| +                              QuicVersion quic_version,
 | 
|                                int cert_verify_flags,
 | 
|                                const GURL& url,
 | 
|                                QuicStringPiece method,
 | 
| @@ -927,7 +933,7 @@ int QuicStreamFactory::Create(const QuicServerId& server_id,
 | 
|  
 | 
|    QuicSessionKey key(destination, server_id);
 | 
|    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()));
 | 
| @@ -1458,15 +1464,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();
 | 
| @@ -1502,7 +1508,7 @@ int QuicStreamFactory::CreateSession(
 | 
|    QuicConnection* connection = new QuicConnection(
 | 
|        connection_id, QuicSocketAddress(QuicSocketAddressImpl(addr)),
 | 
|        helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
 | 
| -      Perspective::IS_CLIENT, supported_versions_);
 | 
| +      Perspective::IS_CLIENT, {quic_version});
 | 
|    connection->set_ping_timeout(ping_timeout_);
 | 
|    connection->SetMaxPacketLength(max_packet_length_);
 | 
|  
 | 
| 
 |