| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/http/http_stream_factory_impl_job.h" | 5 #include "net/http/http_stream_factory_impl_job.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 } else { | 621 } else { |
| 622 server_ = HostPortPair::FromURL(request_info_.url); | 622 server_ = HostPortPair::FromURL(request_info_.url); |
| 623 } | 623 } |
| 624 origin_url_ = | 624 origin_url_ = |
| 625 stream_factory_->ApplyHostMappingRules(request_info_.url, &server_); | 625 stream_factory_->ApplyHostMappingRules(request_info_.url, &server_); |
| 626 alternative_service_url_ = origin_url_; | 626 alternative_service_url_ = origin_url_; |
| 627 // For SPDY via Alt-Svc, set |alternative_service_url_| to | 627 // For SPDY via Alt-Svc, set |alternative_service_url_| to |
| 628 // https://<alternative host>:<alternative port>/... | 628 // https://<alternative host>:<alternative port>/... |
| 629 // so the proxy resolution works with the actual destination, and so | 629 // so the proxy resolution works with the actual destination, and so |
| 630 // that the correct socket pool is used. | 630 // that the correct socket pool is used. |
| 631 // TODO(rch): change the socket pool API to not require a full URL. | |
| 632 if (alternative_service_.protocol >= NPN_SPDY_MINIMUM_VERSION && | 631 if (alternative_service_.protocol >= NPN_SPDY_MINIMUM_VERSION && |
| 633 alternative_service_.protocol <= NPN_SPDY_MAXIMUM_VERSION) { | 632 alternative_service_.protocol <= NPN_SPDY_MAXIMUM_VERSION) { |
| 634 // TODO(rch): Figure out how to make QUIC iteract with PAC | 633 // TODO(rch): Figure out how to make QUIC iteract with PAC |
| 635 // scripts. By not re-writing the URL, we will query the PAC script | 634 // scripts. By not re-writing the URL, we will query the PAC script |
| 636 // for the proxy to use to reach the original URL via TCP. But | 635 // for the proxy to use to reach the original URL via TCP. But |
| 637 // the alternate request will be going via UDP to a different port. | 636 // the alternate request will be going via UDP to a different port. |
| 638 GURL::Replacements replacements; | 637 GURL::Replacements replacements; |
| 639 // new_port needs to be in scope here because GURL::Replacements references | 638 // new_port needs to be in scope here because GURL::Replacements references |
| 640 // the memory contained by it directly. | 639 // the memory contained by it directly. |
| 641 const std::string new_port = base::IntToString(alternative_service_.port); | 640 const std::string new_port = base::IntToString(alternative_service_.port); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 http_server_properties->MaybeForceHTTP11(server_, &server_ssl_config_); | 862 http_server_properties->MaybeForceHTTP11(server_, &server_ssl_config_); |
| 864 if (proxy_info_.is_http() || proxy_info_.is_https()) { | 863 if (proxy_info_.is_http() || proxy_info_.is_https()) { |
| 865 http_server_properties->MaybeForceHTTP11( | 864 http_server_properties->MaybeForceHTTP11( |
| 866 proxy_info_.proxy_server().host_port_pair(), &proxy_ssl_config_); | 865 proxy_info_.proxy_server().host_port_pair(), &proxy_ssl_config_); |
| 867 } | 866 } |
| 868 } | 867 } |
| 869 | 868 |
| 870 if (IsPreconnecting()) { | 869 if (IsPreconnecting()) { |
| 871 DCHECK(!stream_factory_->for_websockets_); | 870 DCHECK(!stream_factory_->for_websockets_); |
| 872 return PreconnectSocketsForHttpRequest( | 871 return PreconnectSocketsForHttpRequest( |
| 873 alternative_service_url_, request_info_.extra_headers, | 872 GetSocketGroup(), server_, request_info_.extra_headers, |
| 874 request_info_.load_flags, priority_, session_, proxy_info_, | 873 request_info_.load_flags, priority_, session_, proxy_info_, |
| 875 ShouldForceSpdySSL(), want_spdy_over_npn, server_ssl_config_, | 874 ShouldForceSpdySSL(), want_spdy_over_npn, server_ssl_config_, |
| 876 proxy_ssl_config_, request_info_.privacy_mode, net_log_, num_streams_); | 875 proxy_ssl_config_, request_info_.privacy_mode, net_log_, num_streams_); |
| 877 } | 876 } |
| 878 | 877 |
| 879 // If we can't use a SPDY session, don't bother checking for one after | 878 // If we can't use a SPDY session, don't bother checking for one after |
| 880 // the hostname is resolved. | 879 // the hostname is resolved. |
| 881 OnHostResolutionCallback resolution_callback = CanUseExistingSpdySession() ? | 880 OnHostResolutionCallback resolution_callback = CanUseExistingSpdySession() ? |
| 882 base::Bind(&Job::OnHostResolution, session_->spdy_session_pool(), | 881 base::Bind(&Job::OnHostResolution, session_->spdy_session_pool(), |
| 883 GetSpdySessionKey()) : | 882 GetSpdySessionKey()) : |
| 884 OnHostResolutionCallback(); | 883 OnHostResolutionCallback(); |
| 885 if (stream_factory_->for_websockets_) { | 884 if (stream_factory_->for_websockets_) { |
| 886 // TODO(ricea): Re-enable NPN when WebSockets over SPDY is supported. | 885 // TODO(ricea): Re-enable NPN when WebSockets over SPDY is supported. |
| 887 SSLConfig websocket_server_ssl_config = server_ssl_config_; | 886 SSLConfig websocket_server_ssl_config = server_ssl_config_; |
| 888 websocket_server_ssl_config.next_protos.clear(); | 887 websocket_server_ssl_config.next_protos.clear(); |
| 889 return InitSocketHandleForWebSocketRequest( | 888 return InitSocketHandleForWebSocketRequest( |
| 890 origin_url_, request_info_.extra_headers, request_info_.load_flags, | 889 GetSocketGroup(), server_, request_info_.extra_headers, |
| 891 priority_, session_, proxy_info_, ShouldForceSpdySSL(), | 890 request_info_.load_flags, priority_, session_, proxy_info_, |
| 892 want_spdy_over_npn, websocket_server_ssl_config, proxy_ssl_config_, | 891 ShouldForceSpdySSL(), want_spdy_over_npn, websocket_server_ssl_config, |
| 893 request_info_.privacy_mode, net_log_, | 892 proxy_ssl_config_, request_info_.privacy_mode, net_log_, |
| 894 connection_.get(), resolution_callback, io_callback_); | 893 connection_.get(), resolution_callback, io_callback_); |
| 895 } | 894 } |
| 896 | 895 |
| 897 return InitSocketHandleForHttpRequest( | 896 return InitSocketHandleForHttpRequest( |
| 898 alternative_service_url_, request_info_.extra_headers, | 897 GetSocketGroup(), server_, request_info_.extra_headers, |
| 899 request_info_.load_flags, priority_, session_, proxy_info_, | 898 request_info_.load_flags, priority_, session_, proxy_info_, |
| 900 ShouldForceSpdySSL(), want_spdy_over_npn, server_ssl_config_, | 899 ShouldForceSpdySSL(), want_spdy_over_npn, server_ssl_config_, |
| 901 proxy_ssl_config_, request_info_.privacy_mode, net_log_, | 900 proxy_ssl_config_, request_info_.privacy_mode, net_log_, |
| 902 connection_.get(), resolution_callback, io_callback_); | 901 connection_.get(), resolution_callback, io_callback_); |
| 903 } | 902 } |
| 904 | 903 |
| 905 int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) { | 904 int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) { |
| 906 if (IsPreconnecting()) { | 905 if (IsPreconnecting()) { |
| 907 if (using_quic_) | 906 if (using_quic_) |
| 908 return result; | 907 return result; |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1483 } | 1482 } |
| 1484 | 1483 |
| 1485 if (job_status_ == STATUS_SUCCEEDED && other_job_status_ == STATUS_BROKEN) { | 1484 if (job_status_ == STATUS_SUCCEEDED && other_job_status_ == STATUS_BROKEN) { |
| 1486 HistogramBrokenAlternateProtocolLocation( | 1485 HistogramBrokenAlternateProtocolLocation( |
| 1487 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN); | 1486 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN); |
| 1488 session_->http_server_properties()->MarkAlternativeServiceBroken( | 1487 session_->http_server_properties()->MarkAlternativeServiceBroken( |
| 1489 other_job_alternative_service_); | 1488 other_job_alternative_service_); |
| 1490 } | 1489 } |
| 1491 } | 1490 } |
| 1492 | 1491 |
| 1492 ClientSocketPoolManager::SocketGroupType |
| 1493 HttpStreamFactoryImpl::Job::GetSocketGroup() const { |
| 1494 if (ShouldForceSpdySSL()) |
| 1495 return ClientSocketPoolManager::SSL_GROUP; |
| 1496 |
| 1497 return ClientSocketPoolManager::GroupTypeFromScheme( |
| 1498 alternative_service_url_.scheme()); |
| 1499 } |
| 1500 |
| 1493 } // namespace net | 1501 } // namespace net |
| OLD | NEW |