| Index: net/http/http_stream_factory_impl.cc
|
| diff --git a/net/http/http_stream_factory_impl.cc b/net/http/http_stream_factory_impl.cc
|
| index 47d8f03a7fdec78707996764ab1a17a28458ab1f..dab8bc80c4a29ae9d02c9baa5037290e6b4cfe13 100644
|
| --- a/net/http/http_stream_factory_impl.cc
|
| +++ b/net/http/http_stream_factory_impl.cc
|
| @@ -8,7 +8,6 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/stl_util.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| #include "net/base/net_util.h"
|
| #include "net/http/http_network_session.h"
|
| #include "net/http/http_server_properties.h"
|
| @@ -20,20 +19,6 @@
|
|
|
| namespace net {
|
|
|
| -namespace {
|
| -
|
| -GURL UpgradeUrlToHttps(const GURL& original_url, int port) {
|
| - GURL::Replacements replacements;
|
| - // new_port needs to be in scope here because GURL::Replacements references
|
| - // the memory contained by it directly.
|
| - const std::string new_port = base::IntToString(port);
|
| - replacements.SetSchemeStr("https");
|
| - replacements.SetPortStr(new_port);
|
| - return original_url.ReplaceComponents(replacements);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| HttpStreamFactoryImpl::HttpStreamFactoryImpl(HttpNetworkSession* session,
|
| bool for_websockets)
|
| : session_(session),
|
| @@ -104,29 +89,22 @@ HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal(
|
| delegate,
|
| websocket_handshake_stream_create_helper,
|
| net_log);
|
| + Job* job = new Job(this, session_, request_info, priority, server_ssl_config,
|
| + proxy_ssl_config, net_log.net_log());
|
| + request->AttachJob(job);
|
|
|
| - // TODO(bnc): Get rid of |alternate_url|.
|
| - GURL alternate_url;
|
| AlternativeService alternative_service =
|
| - GetAlternativeServiceRequestFor(request_info.url, &alternate_url);
|
| - Job* alternate_job = NULL;
|
| + GetAlternativeServiceFor(request_info.url);
|
| if (alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL) {
|
| // Never share connection with other jobs for FTP requests.
|
| DCHECK(!request_info.url.SchemeIs("ftp"));
|
|
|
| - HttpRequestInfo alternate_request_info = request_info;
|
| - alternate_request_info.url = alternate_url;
|
| - alternate_job =
|
| - new Job(this, session_, alternate_request_info, priority,
|
| - server_ssl_config, proxy_ssl_config, net_log.net_log());
|
| + Job* alternate_job =
|
| + new Job(this, session_, request_info, priority, server_ssl_config,
|
| + proxy_ssl_config, net_log.net_log());
|
| request->AttachJob(alternate_job);
|
| - alternate_job->MarkAsAlternate(request_info.url, alternative_service);
|
| - }
|
| + alternate_job->MarkAsAlternate(alternative_service);
|
|
|
| - Job* job = new Job(this, session_, request_info, priority,
|
| - server_ssl_config, proxy_ssl_config, net_log.net_log());
|
| - request->AttachJob(job);
|
| - if (alternate_job) {
|
| // Never share connection with other jobs for FTP requests.
|
| DCHECK(!request_info.url.SchemeIs("ftp"));
|
|
|
| @@ -136,6 +114,7 @@ HttpStreamRequest* HttpStreamFactoryImpl::RequestStreamInternal(
|
| // appropriately.
|
| alternate_job->Start(request);
|
| }
|
| +
|
| // Even if |alternate_job| has already finished, it won't have notified the
|
| // request yet, since we defer that to the next iteration of the MessageLoop,
|
| // so starting |job| is always safe.
|
| @@ -150,19 +129,12 @@ void HttpStreamFactoryImpl::PreconnectStreams(
|
| const SSLConfig& server_ssl_config,
|
| const SSLConfig& proxy_ssl_config) {
|
| DCHECK(!for_websockets_);
|
| - GURL alternate_url;
|
| AlternativeService alternative_service =
|
| - GetAlternativeServiceRequestFor(request_info.url, &alternate_url);
|
| - Job* job = NULL;
|
| + GetAlternativeServiceFor(request_info.url);
|
| + Job* job = new Job(this, session_, request_info, priority, server_ssl_config,
|
| + proxy_ssl_config, session_->net_log());
|
| if (alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL) {
|
| - HttpRequestInfo alternate_request_info = request_info;
|
| - alternate_request_info.url = alternate_url;
|
| - job = new Job(this, session_, alternate_request_info, priority,
|
| - server_ssl_config, proxy_ssl_config, session_->net_log());
|
| - job->MarkAsAlternate(request_info.url, alternative_service);
|
| - } else {
|
| - job = new Job(this, session_, request_info, priority,
|
| - server_ssl_config, proxy_ssl_config, session_->net_log());
|
| + job->MarkAsAlternate(alternative_service);
|
| }
|
| preconnect_job_set_.insert(job);
|
| job->Preconnect(num_streams);
|
| @@ -172,9 +144,8 @@ const HostMappingRules* HttpStreamFactoryImpl::GetHostMappingRules() const {
|
| return session_->params().host_mapping_rules;
|
| }
|
|
|
| -AlternativeService HttpStreamFactoryImpl::GetAlternativeServiceRequestFor(
|
| - const GURL& original_url,
|
| - GURL* alternate_url) {
|
| +AlternativeService HttpStreamFactoryImpl::GetAlternativeServiceFor(
|
| + const GURL& original_url) {
|
| const AlternativeService kNoAlternativeService;
|
|
|
| if (!session_->params().use_alternate_protocols)
|
| @@ -226,21 +197,16 @@ AlternativeService HttpStreamFactoryImpl::GetAlternativeServiceRequestFor(
|
| if (session_->HasSpdyExclusion(origin))
|
| return kNoAlternativeService;
|
|
|
| - *alternate_url = UpgradeUrlToHttps(original_url, alternative_service.port);
|
| - } else {
|
| - DCHECK_EQ(QUIC, alternative_service.protocol);
|
| - if (!session_->params().enable_quic)
|
| - return kNoAlternativeService;
|
| + return alternative_service;
|
| + }
|
|
|
| - if (session_->quic_stream_factory()->IsQuicDisabled(origin.port()))
|
| - return kNoAlternativeService;
|
| + DCHECK_EQ(QUIC, alternative_service.protocol);
|
| + if (!session_->params().enable_quic)
|
| + return kNoAlternativeService;
|
| +
|
| + if (session_->quic_stream_factory()->IsQuicDisabled(origin.port()))
|
| + return kNoAlternativeService;
|
|
|
| - // TODO(rch): Figure out how to make QUIC iteract with PAC
|
| - // scripts. By not re-writing the URL, we will query the PAC script
|
| - // for the proxy to use to reach the original URL via TCP. But
|
| - // the alternate request will be going via UDP to a different port.
|
| - *alternate_url = original_url;
|
| - }
|
| return alternative_service;
|
| }
|
|
|
|
|