OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_request.h" | 5 #include "net/http/http_stream_request.h" |
6 | 6 |
7 #include "base/stl_util-inl.h" | 7 #include "base/stl_util-inl.h" |
8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
453 // Check first if we have a spdy session for this group. If so, then go | 453 // Check first if we have a spdy session for this group. If so, then go |
454 // straight to using that. | 454 // straight to using that. |
455 HostPortProxyPair pair(endpoint_, proxy_info()->proxy_server()); | 455 HostPortProxyPair pair(endpoint_, proxy_info()->proxy_server()); |
456 if (session_->spdy_session_pool()->HasSession(pair)) { | 456 if (session_->spdy_session_pool()->HasSession(pair)) { |
457 using_spdy_ = true; | 457 using_spdy_ = true; |
458 next_state_ = STATE_CREATE_STREAM; | 458 next_state_ = STATE_CREATE_STREAM; |
459 return OK; | 459 return OK; |
460 } | 460 } |
461 // Check next if we have a spdy session for this proxy. If so, then go | 461 // Check next if we have a spdy session for this proxy. If so, then go |
462 // straight to using that. | 462 // straight to using that. |
463 if (proxy_info()->is_https()) { | 463 if (IsHttpsProxyAndHttpUrl()) { |
464 HostPortProxyPair proxy(proxy_info()->proxy_server().host_port_pair(), | 464 HostPortProxyPair proxy(proxy_info()->proxy_server().host_port_pair(), |
465 proxy_info()->proxy_server()); | 465 ProxyServer::Direct()); |
466 if (session_->spdy_session_pool()->HasSession(proxy)) { | 466 if (session_->spdy_session_pool()->HasSession(proxy)) { |
467 using_spdy_ = true; | 467 using_spdy_ = true; |
468 next_state_ = STATE_CREATE_STREAM; | 468 next_state_ = STATE_CREATE_STREAM; |
469 return OK; | 469 return OK; |
470 } | 470 } |
471 } | 471 } |
472 | 472 |
473 // Build the string used to uniquely identify connections of this type. | 473 // Build the string used to uniquely identify connections of this type. |
474 // Determine the host and port to connect to. | 474 // Determine the host and port to connect to. |
475 std::string connection_group = endpoint_.ToString(); | 475 std::string connection_group = endpoint_.ToString(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
530 } | 530 } |
531 | 531 |
532 http_proxy_params = | 532 http_proxy_params = |
533 new HttpProxySocketParams(proxy_tcp_params, | 533 new HttpProxySocketParams(proxy_tcp_params, |
534 ssl_params, | 534 ssl_params, |
535 authentication_url, | 535 authentication_url, |
536 user_agent, | 536 user_agent, |
537 endpoint_, | 537 endpoint_, |
538 session_->auth_cache(), | 538 session_->auth_cache(), |
539 session_->http_auth_handler_factory(), | 539 session_->http_auth_handler_factory(), |
540 session_->spdy_session_pool(), | |
541 session_->mutable_spdy_settings(), | |
540 using_ssl_); | 542 using_ssl_); |
541 } else { | 543 } else { |
542 DCHECK(proxy_info()->is_socks()); | 544 DCHECK(proxy_info()->is_socks()); |
543 char socks_version; | 545 char socks_version; |
544 if (proxy_server.scheme() == ProxyServer::SCHEME_SOCKS5) | 546 if (proxy_server.scheme() == ProxyServer::SCHEME_SOCKS5) |
545 socks_version = '5'; | 547 socks_version = '5'; |
546 else | 548 else |
547 socks_version = '4'; | 549 socks_version = '4'; |
548 connection_group = base::StringPrintf( | 550 connection_group = base::StringPrintf( |
549 "socks%c/%s", socks_version, connection_group.c_str()); | 551 "socks%c/%s", socks_version, connection_group.c_str()); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
718 SpdySessionPool* spdy_pool = session_->spdy_session_pool(); | 720 SpdySessionPool* spdy_pool = session_->spdy_session_pool(); |
719 scoped_refptr<SpdySession> spdy_session; | 721 scoped_refptr<SpdySession> spdy_session; |
720 | 722 |
721 const ProxyServer& proxy_server = proxy_info()->proxy_server(); | 723 const ProxyServer& proxy_server = proxy_info()->proxy_server(); |
722 HostPortProxyPair pair(endpoint_, proxy_server); | 724 HostPortProxyPair pair(endpoint_, proxy_server); |
723 if (spdy_pool->HasSession(pair)) { | 725 if (spdy_pool->HasSession(pair)) { |
724 // We have a SPDY session to the origin server. This might be a direct | 726 // We have a SPDY session to the origin server. This might be a direct |
725 // connection, or it might be a SPDY session through an HTTP or HTTPS proxy. | 727 // connection, or it might be a SPDY session through an HTTP or HTTPS proxy. |
726 spdy_session = | 728 spdy_session = |
727 spdy_pool->Get(pair, session_->mutable_spdy_settings(), net_log_); | 729 spdy_pool->Get(pair, session_->mutable_spdy_settings(), net_log_); |
728 } else if (proxy_info()->is_https()) { | 730 } else if (IsHttpsProxyAndHttpUrl()) { |
729 // If we don't have a direct SPDY session, and we're using an HTTPS | 731 // If we don't have a direct SPDY session, and we're using an HTTPS |
730 // proxy, then we might have a SPDY session to the proxy | 732 // proxy, then we might have a SPDY session to the proxy |
731 pair = HostPortProxyPair(proxy_server.host_port_pair(), proxy_server); | 733 pair = HostPortProxyPair(proxy_server.host_port_pair(), |
734 ProxyServer::Direct()); | |
732 if (spdy_pool->HasSession(pair)) { | 735 if (spdy_pool->HasSession(pair)) { |
733 spdy_session = | 736 spdy_session = |
734 spdy_pool->Get(pair, session_->mutable_spdy_settings(), net_log_); | 737 spdy_pool->Get(pair, session_->mutable_spdy_settings(), net_log_); |
735 } | 738 } |
736 direct = false; | 739 direct = false; |
737 } | 740 } |
738 | 741 |
739 if (!spdy_session.get()) { | 742 if (!spdy_session.get()) { |
740 // SPDY can be negotiated using the TLS next protocol negotiation (NPN) | 743 // SPDY can be negotiated using the TLS next protocol negotiation (NPN) |
741 // extension, or just directly using SSL. Either way, |connection_| must | 744 // extension, or just directly using SSL. Either way, |connection_| must |
742 // contain an SSLClientSocket. | 745 // contain an SSLClientSocket. |
743 CHECK(connection_->socket()); | 746 CHECK(connection_->socket()); |
744 int error = spdy_pool->GetSpdySessionFromSocket( | 747 int error = spdy_pool->GetSpdySessionFromSocket( |
745 pair, session_->mutable_spdy_settings(), connection_.release(), | 748 pair, session_->mutable_spdy_settings(), connection_.release(), |
746 net_log_, spdy_certificate_error_, &spdy_session, using_ssl_); | 749 net_log_, spdy_certificate_error_, &spdy_session, using_ssl_); |
747 if (error != OK) | 750 if (error != OK) |
748 return error; | 751 return error; |
749 } | 752 } |
750 | 753 |
751 if (spdy_session->IsClosed()) | 754 if (spdy_session->IsClosed()) |
752 return ERR_CONNECTION_CLOSED; | 755 return ERR_CONNECTION_CLOSED; |
753 | 756 |
754 stream_.reset(new SpdyHttpStream(spdy_session, direct)); | 757 bool useRelativeUrl = direct || request_info().url.SchemeIs("https"); |
willchan no longer on Chromium
2010/12/02 22:44:31
is this WebKit style sneaking in here? :P
s/useRel
| |
758 stream_.reset(new SpdyHttpStream(spdy_session, useRelativeUrl)); | |
755 return OK; | 759 return OK; |
756 } | 760 } |
757 | 761 |
758 int HttpStreamRequest::DoCreateStreamComplete(int result) { | 762 int HttpStreamRequest::DoCreateStreamComplete(int result) { |
759 if (result < 0) | 763 if (result < 0) |
760 return result; | 764 return result; |
761 | 765 |
762 next_state_ = STATE_NONE; | 766 next_state_ = STATE_NONE; |
763 return OK; | 767 return OK; |
764 } | 768 } |
(...skipping 26 matching lines...) Expand all Loading... | |
791 } | 795 } |
792 | 796 |
793 void HttpStreamRequest::SetSocketMotivation() { | 797 void HttpStreamRequest::SetSocketMotivation() { |
794 if (request_info_->motivation == HttpRequestInfo::PRECONNECT_MOTIVATED) | 798 if (request_info_->motivation == HttpRequestInfo::PRECONNECT_MOTIVATED) |
795 connection_->socket()->SetSubresourceSpeculation(); | 799 connection_->socket()->SetSubresourceSpeculation(); |
796 else if (request_info_->motivation == HttpRequestInfo::OMNIBOX_MOTIVATED) | 800 else if (request_info_->motivation == HttpRequestInfo::OMNIBOX_MOTIVATED) |
797 connection_->socket()->SetOmniboxSpeculation(); | 801 connection_->socket()->SetOmniboxSpeculation(); |
798 // TODO(mbelshe): Add other motivations (like EARLY_LOAD_MOTIVATED). | 802 // TODO(mbelshe): Add other motivations (like EARLY_LOAD_MOTIVATED). |
799 } | 803 } |
800 | 804 |
805 bool HttpStreamRequest::IsHttpsProxyAndHttpUrl() { | |
806 return proxy_info()->is_https() && request_info().url.SchemeIs("http"); | |
807 } | |
808 | |
801 // Returns a newly create SSLSocketParams, and sets several | 809 // Returns a newly create SSLSocketParams, and sets several |
802 // fields of ssl_config_. | 810 // fields of ssl_config_. |
803 scoped_refptr<SSLSocketParams> HttpStreamRequest::GenerateSslParams( | 811 scoped_refptr<SSLSocketParams> HttpStreamRequest::GenerateSslParams( |
804 scoped_refptr<TCPSocketParams> tcp_params, | 812 scoped_refptr<TCPSocketParams> tcp_params, |
805 scoped_refptr<HttpProxySocketParams> http_proxy_params, | 813 scoped_refptr<HttpProxySocketParams> http_proxy_params, |
806 scoped_refptr<SOCKSSocketParams> socks_params, | 814 scoped_refptr<SOCKSSocketParams> socks_params, |
807 ProxyServer::Scheme proxy_scheme, | 815 ProxyServer::Scheme proxy_scheme, |
808 std::string hostname, | 816 std::string hostname, |
809 bool want_spdy_over_npn) { | 817 bool want_spdy_over_npn) { |
810 | 818 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1006 base::TimeDelta::FromMinutes(6), | 1014 base::TimeDelta::FromMinutes(6), |
1007 100); | 1015 100); |
1008 break; | 1016 break; |
1009 default: | 1017 default: |
1010 NOTREACHED(); | 1018 NOTREACHED(); |
1011 break; | 1019 break; |
1012 } | 1020 } |
1013 } | 1021 } |
1014 | 1022 |
1015 } // namespace net | 1023 } // namespace net |
OLD | NEW |