| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 9953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9964 | 9964 |
| 9965 alternative_service_vector = | 9965 alternative_service_vector = |
| 9966 http_server_properties.GetAlternativeServices(http_host_port_pair); | 9966 http_server_properties.GetAlternativeServices(http_host_port_pair); |
| 9967 ASSERT_EQ(1u, alternative_service_vector.size()); | 9967 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 9968 EXPECT_EQ(443, alternative_service_vector[0].port); | 9968 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 9969 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), | 9969 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
| 9970 alternative_service_vector[0].protocol); | 9970 alternative_service_vector[0].protocol); |
| 9971 } | 9971 } |
| 9972 | 9972 |
| 9973 TEST_P(HttpNetworkTransactionTest, EmptyAlternateProtocolHeader) { | 9973 TEST_P(HttpNetworkTransactionTest, EmptyAlternateProtocolHeader) { |
| 9974 session_deps_.parse_alternative_services = true; | 9974 session_deps_.parse_alternative_services = false; |
| 9975 session_deps_.enable_alternative_service_with_different_host = false; | 9975 session_deps_.enable_alternative_service_with_different_host = false; |
| 9976 | 9976 |
| 9977 MockRead data_reads[] = { | 9977 MockRead data_reads[] = { |
| 9978 MockRead("HTTP/1.1 200 OK\r\n"), | 9978 MockRead("HTTP/1.1 200 OK\r\n"), |
| 9979 MockRead("Alternate-Protocol: \r\n\r\n"), | 9979 MockRead("Alternate-Protocol: \r\n\r\n"), |
| 9980 MockRead("hello world"), | 9980 MockRead("hello world"), |
| 9981 MockRead(SYNCHRONOUS, OK), | 9981 MockRead(SYNCHRONOUS, OK), |
| 9982 }; | 9982 }; |
| 9983 | 9983 |
| 9984 HttpRequestInfo request; | 9984 HttpRequestInfo request; |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10653 ASSERT_TRUE(response != NULL); | 10653 ASSERT_TRUE(response != NULL); |
| 10654 ASSERT_TRUE(response->headers.get() != NULL); | 10654 ASSERT_TRUE(response->headers.get() != NULL); |
| 10655 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10655 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 10656 | 10656 |
| 10657 std::string response_data; | 10657 std::string response_data; |
| 10658 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10658 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 10659 EXPECT_EQ("hello world", response_data); | 10659 EXPECT_EQ("hello world", response_data); |
| 10660 } | 10660 } |
| 10661 | 10661 |
| 10662 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 10662 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| 10663 session_deps_.parse_alternative_services = true; | 10663 session_deps_.parse_alternative_services = false; |
| 10664 session_deps_.enable_alternative_service_with_different_host = false; | 10664 session_deps_.enable_alternative_service_with_different_host = false; |
| 10665 | 10665 |
| 10666 HttpRequestInfo request; | 10666 HttpRequestInfo request; |
| 10667 request.method = "GET"; | 10667 request.method = "GET"; |
| 10668 request.url = GURL("http://www.example.org/"); | 10668 request.url = GURL("http://www.example.org/"); |
| 10669 request.load_flags = 0; | 10669 request.load_flags = 0; |
| 10670 | 10670 |
| 10671 std::string alternate_protocol_http_header = | 10671 std::string alternate_protocol_http_header = |
| 10672 GetAlternateProtocolHttpHeader(); | 10672 GetAlternateProtocolHttpHeader(); |
| 10673 | 10673 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10741 ASSERT_TRUE(response->headers.get() != NULL); | 10741 ASSERT_TRUE(response->headers.get() != NULL); |
| 10742 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10742 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 10743 EXPECT_TRUE(response->was_fetched_via_spdy); | 10743 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 10744 EXPECT_TRUE(response->was_npn_negotiated); | 10744 EXPECT_TRUE(response->was_npn_negotiated); |
| 10745 | 10745 |
| 10746 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 10746 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 10747 EXPECT_EQ("hello!", response_data); | 10747 EXPECT_EQ("hello!", response_data); |
| 10748 } | 10748 } |
| 10749 | 10749 |
| 10750 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 10750 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| 10751 session_deps_.parse_alternative_services = true; | 10751 session_deps_.parse_alternative_services = false; |
| 10752 session_deps_.enable_alternative_service_with_different_host = false; | 10752 session_deps_.enable_alternative_service_with_different_host = false; |
| 10753 | 10753 |
| 10754 HttpRequestInfo request; | 10754 HttpRequestInfo request; |
| 10755 request.method = "GET"; | 10755 request.method = "GET"; |
| 10756 request.url = GURL("http://www.example.org/"); | 10756 request.url = GURL("http://www.example.org/"); |
| 10757 request.load_flags = 0; | 10757 request.load_flags = 0; |
| 10758 | 10758 |
| 10759 std::string alternate_protocol_http_header = | 10759 std::string alternate_protocol_http_header = |
| 10760 GetAlternateProtocolHttpHeader(); | 10760 GetAlternateProtocolHttpHeader(); |
| 10761 | 10761 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10862 ASSERT_TRUE(response != NULL); | 10862 ASSERT_TRUE(response != NULL); |
| 10863 ASSERT_TRUE(response->headers.get() != NULL); | 10863 ASSERT_TRUE(response->headers.get() != NULL); |
| 10864 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); | 10864 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine()); |
| 10865 EXPECT_TRUE(response->was_fetched_via_spdy); | 10865 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 10866 EXPECT_TRUE(response->was_npn_negotiated); | 10866 EXPECT_TRUE(response->was_npn_negotiated); |
| 10867 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 10867 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); |
| 10868 EXPECT_EQ("hello!", response_data); | 10868 EXPECT_EQ("hello!", response_data); |
| 10869 } | 10869 } |
| 10870 | 10870 |
| 10871 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { | 10871 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { |
| 10872 session_deps_.parse_alternative_services = true; | 10872 session_deps_.parse_alternative_services = false; |
| 10873 session_deps_.enable_alternative_service_with_different_host = false; | 10873 session_deps_.enable_alternative_service_with_different_host = false; |
| 10874 | 10874 |
| 10875 HttpRequestInfo request; | 10875 HttpRequestInfo request; |
| 10876 request.method = "GET"; | 10876 request.method = "GET"; |
| 10877 request.url = GURL("http://www.example.org/"); | 10877 request.url = GURL("http://www.example.org/"); |
| 10878 request.load_flags = 0; | 10878 request.load_flags = 0; |
| 10879 | 10879 |
| 10880 std::string alternate_protocol_http_header = | 10880 std::string alternate_protocol_http_header = |
| 10881 GetAlternateProtocolHttpHeader(); | 10881 GetAlternateProtocolHttpHeader(); |
| 10882 | 10882 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10991 resolver->reset(new ForwardingProxyResolver(resolver_)); | 10991 resolver->reset(new ForwardingProxyResolver(resolver_)); |
| 10992 return OK; | 10992 return OK; |
| 10993 } | 10993 } |
| 10994 | 10994 |
| 10995 private: | 10995 private: |
| 10996 ProxyResolver* resolver_; | 10996 ProxyResolver* resolver_; |
| 10997 }; | 10997 }; |
| 10998 | 10998 |
| 10999 TEST_P(HttpNetworkTransactionTest, | 10999 TEST_P(HttpNetworkTransactionTest, |
| 11000 UseAlternateProtocolForTunneledNpnSpdy) { | 11000 UseAlternateProtocolForTunneledNpnSpdy) { |
| 11001 session_deps_.parse_alternative_services = true; | 11001 session_deps_.parse_alternative_services = false; |
| 11002 session_deps_.enable_alternative_service_with_different_host = false; | 11002 session_deps_.enable_alternative_service_with_different_host = false; |
| 11003 | 11003 |
| 11004 ProxyConfig proxy_config; | 11004 ProxyConfig proxy_config; |
| 11005 proxy_config.set_auto_detect(true); | 11005 proxy_config.set_auto_detect(true); |
| 11006 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 11006 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
| 11007 | 11007 |
| 11008 CapturingProxyResolver capturing_proxy_resolver; | 11008 CapturingProxyResolver capturing_proxy_resolver; |
| 11009 session_deps_.proxy_service.reset(new ProxyService( | 11009 session_deps_.proxy_service.reset(new ProxyService( |
| 11010 make_scoped_ptr(new ProxyConfigServiceFixed(proxy_config)), | 11010 make_scoped_ptr(new ProxyConfigServiceFixed(proxy_config)), |
| 11011 make_scoped_ptr( | 11011 make_scoped_ptr( |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11115 capturing_proxy_resolver.resolved()[1].spec()); | 11115 capturing_proxy_resolver.resolved()[1].spec()); |
| 11116 | 11116 |
| 11117 LoadTimingInfo load_timing_info; | 11117 LoadTimingInfo load_timing_info; |
| 11118 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 11118 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 11119 TestLoadTimingNotReusedWithPac(load_timing_info, | 11119 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 11120 CONNECT_TIMING_HAS_SSL_TIMES); | 11120 CONNECT_TIMING_HAS_SSL_TIMES); |
| 11121 } | 11121 } |
| 11122 | 11122 |
| 11123 TEST_P(HttpNetworkTransactionTest, | 11123 TEST_P(HttpNetworkTransactionTest, |
| 11124 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 11124 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { |
| 11125 session_deps_.parse_alternative_services = true; | 11125 session_deps_.parse_alternative_services = false; |
| 11126 session_deps_.enable_alternative_service_with_different_host = false; | 11126 session_deps_.enable_alternative_service_with_different_host = false; |
| 11127 | 11127 |
| 11128 HttpRequestInfo request; | 11128 HttpRequestInfo request; |
| 11129 request.method = "GET"; | 11129 request.method = "GET"; |
| 11130 request.url = GURL("http://www.example.org/"); | 11130 request.url = GURL("http://www.example.org/"); |
| 11131 request.load_flags = 0; | 11131 request.load_flags = 0; |
| 11132 | 11132 |
| 11133 std::string alternate_protocol_http_header = | 11133 std::string alternate_protocol_http_header = |
| 11134 GetAlternateProtocolHttpHeader(); | 11134 GetAlternateProtocolHttpHeader(); |
| 11135 | 11135 |
| (...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11939 credentials, request, callback, auth_token); | 11939 credentials, request, callback, auth_token); |
| 11940 } | 11940 } |
| 11941 | 11941 |
| 11942 private: | 11942 private: |
| 11943 GURL* url_; | 11943 GURL* url_; |
| 11944 }; | 11944 }; |
| 11945 | 11945 |
| 11946 // This test ensures that the URL passed into the proxy is upgraded to https | 11946 // This test ensures that the URL passed into the proxy is upgraded to https |
| 11947 // when doing an Alternate Protocol upgrade. | 11947 // when doing an Alternate Protocol upgrade. |
| 11948 TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { | 11948 TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { |
| 11949 session_deps_.parse_alternative_services = true; | 11949 session_deps_.parse_alternative_services = false; |
| 11950 session_deps_.enable_alternative_service_with_different_host = false; | 11950 session_deps_.enable_alternative_service_with_different_host = false; |
| 11951 | 11951 |
| 11952 session_deps_.proxy_service = | 11952 session_deps_.proxy_service = |
| 11953 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 11953 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
| 11954 TestNetLog net_log; | 11954 TestNetLog net_log; |
| 11955 session_deps_.net_log = &net_log; | 11955 session_deps_.net_log = &net_log; |
| 11956 GURL request_url; | 11956 GURL request_url; |
| 11957 { | 11957 { |
| 11958 HttpAuthHandlerMock::Factory* auth_factory = | 11958 HttpAuthHandlerMock::Factory* auth_factory = |
| 11959 new HttpAuthHandlerMock::Factory(); | 11959 new HttpAuthHandlerMock::Factory(); |
| (...skipping 3999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15959 base::MessageLoop::current()->RunUntilIdle(); | 15959 base::MessageLoop::current()->RunUntilIdle(); |
| 15960 | 15960 |
| 15961 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 15961 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
| 15962 HttpRequestHeaders headers; | 15962 HttpRequestHeaders headers; |
| 15963 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 15963 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
| 15964 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 15964 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
| 15965 } | 15965 } |
| 15966 #endif // !defined(OS_IOS) | 15966 #endif // !defined(OS_IOS) |
| 15967 | 15967 |
| 15968 } // namespace net | 15968 } // namespace net |
| OLD | NEW |