| 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 <memory> | 5 #include <memory> |
| 6 #include <ostream> | 6 #include <ostream> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 260 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
| 261 random_generator_(0), | 261 random_generator_(0), |
| 262 ssl_data_(ASYNC, OK) { | 262 ssl_data_(ASYNC, OK) { |
| 263 request_.method = "GET"; | 263 request_.method = "GET"; |
| 264 std::string url("https://"); | 264 std::string url("https://"); |
| 265 url.append(kDefaultServerHostName); | 265 url.append(kDefaultServerHostName); |
| 266 request_.url = GURL(url); | 266 request_.url = GURL(url); |
| 267 request_.load_flags = 0; | 267 request_.load_flags = 0; |
| 268 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 268 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 269 | 269 |
| 270 params_.enable_alternative_service_with_different_host = true; | |
| 271 params_.enable_alternative_service_for_insecure_origins = true; | 270 params_.enable_alternative_service_for_insecure_origins = true; |
| 272 | 271 |
| 273 scoped_refptr<X509Certificate> cert( | 272 scoped_refptr<X509Certificate> cert( |
| 274 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); | 273 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
| 275 verify_details_.cert_verify_result.verified_cert = cert; | 274 verify_details_.cert_verify_result.verified_cert = cert; |
| 276 verify_details_.cert_verify_result.is_issued_by_known_root = true; | 275 verify_details_.cert_verify_result.is_issued_by_known_root = true; |
| 277 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 276 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
| 278 } | 277 } |
| 279 | 278 |
| 280 void SetUp() override { | 279 void SetUp() override { |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 false, true, 0, "hello!")); | 705 false, true, 0, "hello!")); |
| 707 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | 706 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); |
| 708 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 707 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 709 | 708 |
| 710 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 709 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 711 | 710 |
| 712 // The non-alternate protocol job needs to hang in order to guarantee that | 711 // The non-alternate protocol job needs to hang in order to guarantee that |
| 713 // the alternate-protocol job will "win". | 712 // the alternate-protocol job will "win". |
| 714 AddHangingNonAlternateProtocolSocketData(); | 713 AddHangingNonAlternateProtocolSocketData(); |
| 715 | 714 |
| 716 params_.enable_alternative_service_with_different_host = false; | |
| 717 CreateSession(); | 715 CreateSession(); |
| 718 | 716 |
| 719 EXPECT_FALSE( | 717 EXPECT_FALSE( |
| 720 test_socket_performance_watcher_factory_.rtt_notification_received()); | 718 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 721 SendRequestAndExpectQuicResponse("hello!"); | 719 SendRequestAndExpectQuicResponse("hello!"); |
| 722 EXPECT_TRUE( | 720 EXPECT_TRUE( |
| 723 test_socket_performance_watcher_factory_.rtt_notification_received()); | 721 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 724 | 722 |
| 725 // Check that the NetLog was filled reasonably. | 723 // Check that the NetLog was filled reasonably. |
| 726 TestNetLogEntry::List entries; | 724 TestNetLogEntry::List entries; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 779 mock_quic_data.AddRead(ASYNC, 0); // EOF | 777 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 780 | 778 |
| 781 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 779 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 782 | 780 |
| 783 EXPECT_FALSE( | 781 EXPECT_FALSE( |
| 784 test_socket_performance_watcher_factory_.rtt_notification_received()); | 782 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 785 // There is no need to set up an alternate protocol job, because | 783 // There is no need to set up an alternate protocol job, because |
| 786 // no attempt will be made to speak to the proxy over TCP. | 784 // no attempt will be made to speak to the proxy over TCP. |
| 787 | 785 |
| 788 request_.url = GURL("http://mail.example.org/"); | 786 request_.url = GURL("http://mail.example.org/"); |
| 789 params_.enable_alternative_service_with_different_host = false; | |
| 790 CreateSession(); | 787 CreateSession(); |
| 791 | 788 |
| 792 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 789 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 793 EXPECT_TRUE( | 790 EXPECT_TRUE( |
| 794 test_socket_performance_watcher_factory_.rtt_notification_received()); | 791 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 795 } | 792 } |
| 796 | 793 |
| 797 // Regression test for https://crbug.com/492458. Test that for an HTTP | 794 // Regression test for https://crbug.com/492458. Test that for an HTTP |
| 798 // connection through a QUIC proxy, the certificate exhibited by the proxy is | 795 // connection through a QUIC proxy, the certificate exhibited by the proxy is |
| 799 // checked against the proxy hostname, not the origin hostname. | 796 // checked against the proxy hostname, not the origin hostname. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 834 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); | 831 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); |
| 835 | 832 |
| 836 request_.url = GURL("http://" + origin_host); | 833 request_.url = GURL("http://" + origin_host); |
| 837 AddHangingNonAlternateProtocolSocketData(); | 834 AddHangingNonAlternateProtocolSocketData(); |
| 838 CreateSession(); | 835 CreateSession(); |
| 839 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 836 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 840 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 837 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 841 } | 838 } |
| 842 | 839 |
| 843 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { | 840 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { |
| 844 params_.enable_alternative_service_with_different_host = true; | |
| 845 HostPortPair origin("www.example.org", 443); | 841 HostPortPair origin("www.example.org", 443); |
| 846 HostPortPair alternative("mail.example.org", 443); | 842 HostPortPair alternative("mail.example.org", 443); |
| 847 | 843 |
| 848 base::FilePath certs_dir = GetTestCertsDirectory(); | 844 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 849 scoped_refptr<X509Certificate> cert( | 845 scoped_refptr<X509Certificate> cert( |
| 850 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); | 846 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
| 851 ASSERT_TRUE(cert.get()); | 847 ASSERT_TRUE(cert.get()); |
| 852 // TODO(rch): the connection should be "to" the origin, so if the cert is | 848 // TODO(rch): the connection should be "to" the origin, so if the cert is |
| 853 // valid for the origin but not the alternative, that should work too. | 849 // valid for the origin but not the alternative, that should work too. |
| 854 bool common_name_fallback_used; | 850 bool common_name_fallback_used; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 886 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 891 | 887 |
| 892 MockQuicData mock_quic_data2; | 888 MockQuicData mock_quic_data2; |
| 893 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 889 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
| 894 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 890 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 895 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 891 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
| 896 | 892 |
| 897 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); | 893 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); |
| 898 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 894 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
| 899 | 895 |
| 900 params_.enable_alternative_service_with_different_host = false; | |
| 901 CreateSession(); | 896 CreateSession(); |
| 902 | 897 |
| 903 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); | 898 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); |
| 904 for (size_t i = 0; i < 2; ++i) { | 899 for (size_t i = 0; i < 2; ++i) { |
| 905 std::unique_ptr<HttpNetworkTransaction> trans( | 900 std::unique_ptr<HttpNetworkTransaction> trans( |
| 906 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 901 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 907 TestCompletionCallback callback; | 902 TestCompletionCallback callback; |
| 908 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 903 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 909 EXPECT_EQ(ERR_IO_PENDING, rv); | 904 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 910 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 905 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
| 911 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); | 906 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); |
| 912 } | 907 } |
| 913 } | 908 } |
| 914 | 909 |
| 915 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 910 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
| 916 // Attempt to "force" quic on 443, which will not be honored. | 911 // Attempt to "force" quic on 443, which will not be honored. |
| 917 params_.origins_to_force_quic_on.insert( | 912 params_.origins_to_force_quic_on.insert( |
| 918 HostPortPair::FromString("www.google.com:443")); | 913 HostPortPair::FromString("www.google.com:443")); |
| 919 | 914 |
| 920 MockRead http_reads[] = { | 915 MockRead http_reads[] = { |
| 921 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | 916 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 922 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 917 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 923 MockRead(ASYNC, OK)}; | 918 MockRead(ASYNC, OK)}; |
| 924 | 919 |
| 925 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); | 920 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
| 926 socket_factory_.AddSocketDataProvider(&data); | 921 socket_factory_.AddSocketDataProvider(&data); |
| 927 SSLSocketDataProvider ssl(ASYNC, OK); | 922 SSLSocketDataProvider ssl(ASYNC, OK); |
| 928 socket_factory_.AddSSLSocketDataProvider(&ssl); | 923 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 929 | 924 |
| 930 params_.enable_alternative_service_with_different_host = false; | |
| 931 CreateSession(); | 925 CreateSession(); |
| 932 | 926 |
| 933 SendRequestAndExpectHttpResponse("hello world"); | 927 SendRequestAndExpectHttpResponse("hello world"); |
| 934 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); | 928 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); |
| 935 } | 929 } |
| 936 | 930 |
| 937 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { | 931 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
| 938 MockRead http_reads[] = { | 932 MockRead http_reads[] = { |
| 939 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 933 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
| 940 MockRead("hello world"), | 934 MockRead("hello world"), |
| (...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2129 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 2123 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 2130 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; | 2124 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; |
| 2131 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 2125 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
| 2132 arraysize(writes)); | 2126 arraysize(writes)); |
| 2133 socket_factory_.AddSocketDataProvider(&socket_data); | 2127 socket_factory_.AddSocketDataProvider(&socket_data); |
| 2134 | 2128 |
| 2135 // The non-alternate protocol job needs to hang in order to guarantee that | 2129 // The non-alternate protocol job needs to hang in order to guarantee that |
| 2136 // the alternate-protocol job will "win". | 2130 // the alternate-protocol job will "win". |
| 2137 AddHangingNonAlternateProtocolSocketData(); | 2131 AddHangingNonAlternateProtocolSocketData(); |
| 2138 | 2132 |
| 2139 params_.enable_alternative_service_with_different_host = false; | |
| 2140 CreateSession(); | 2133 CreateSession(); |
| 2141 request_.method = "POST"; | 2134 request_.method = "POST"; |
| 2142 ChunkedUploadDataStream upload_data(0); | 2135 ChunkedUploadDataStream upload_data(0); |
| 2143 upload_data.AppendData("1", 1, true); | 2136 upload_data.AppendData("1", 1, true); |
| 2144 | 2137 |
| 2145 request_.upload_data_stream = &upload_data; | 2138 request_.upload_data_stream = &upload_data; |
| 2146 | 2139 |
| 2147 std::unique_ptr<HttpNetworkTransaction> trans( | 2140 std::unique_ptr<HttpNetworkTransaction> trans( |
| 2148 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2149 TestCompletionCallback callback; | 2142 TestCompletionCallback callback; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2174 | 2167 |
| 2175 HttpNetworkSession::Params params; | 2168 HttpNetworkSession::Params params; |
| 2176 | 2169 |
| 2177 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 2170 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 2178 params.quic_clock = clock_; | 2171 params.quic_clock = clock_; |
| 2179 | 2172 |
| 2180 crypto_client_stream_factory_.set_handshake_mode( | 2173 crypto_client_stream_factory_.set_handshake_mode( |
| 2181 MockCryptoClientStream::CONFIRM_HANDSHAKE); | 2174 MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 2182 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 2175 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
| 2183 | 2176 |
| 2184 params.enable_alternative_service_with_different_host = true; | |
| 2185 params.enable_quic = true; | 2177 params.enable_quic = true; |
| 2186 params.quic_random = &random_generator_; | 2178 params.quic_random = &random_generator_; |
| 2187 params.client_socket_factory = &socket_factory_; | 2179 params.client_socket_factory = &socket_factory_; |
| 2188 params.host_resolver = &host_resolver_; | 2180 params.host_resolver = &host_resolver_; |
| 2189 params.cert_verifier = &cert_verifier_; | 2181 params.cert_verifier = &cert_verifier_; |
| 2190 params.transport_security_state = &transport_security_state_; | 2182 params.transport_security_state = &transport_security_state_; |
| 2191 params.cert_transparency_verifier = cert_transparency_verifier_.get(); | 2183 params.cert_transparency_verifier = cert_transparency_verifier_.get(); |
| 2192 params.ct_policy_enforcer = &ct_policy_enforcer_; | 2184 params.ct_policy_enforcer = &ct_policy_enforcer_; |
| 2193 params.socket_performance_watcher_factory = | 2185 params.socket_performance_watcher_factory = |
| 2194 &test_socket_performance_watcher_factory_; | 2186 &test_socket_performance_watcher_factory_; |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2568 AddHangingSocketData(); | 2560 AddHangingSocketData(); |
| 2569 | 2561 |
| 2570 SendRequestAndExpectQuicResponse(origin1_); | 2562 SendRequestAndExpectQuicResponse(origin1_); |
| 2571 SendRequestAndExpectQuicResponse(origin2_); | 2563 SendRequestAndExpectQuicResponse(origin2_); |
| 2572 | 2564 |
| 2573 EXPECT_TRUE(AllDataConsumed()); | 2565 EXPECT_TRUE(AllDataConsumed()); |
| 2574 } | 2566 } |
| 2575 | 2567 |
| 2576 } // namespace test | 2568 } // namespace test |
| 2577 } // namespace net | 2569 } // namespace net |
| OLD | NEW |