| 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 <string> | 6 #include <string> |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 GetRequestHeaders("GET", "https", "/"))); | 639 GetRequestHeaders("GET", "https", "/"))); |
| 640 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 640 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 641 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 641 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 642 mock_quic_data.AddRead( | 642 mock_quic_data.AddRead( |
| 643 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 643 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 644 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 644 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 645 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 645 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 646 | 646 |
| 647 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 647 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 648 | 648 |
| 649 // The non-alternate protocol job needs to hang in order to guarantee that |
| 650 // the alternate-protocol job will "win". |
| 651 AddHangingNonAlternateProtocolSocketData(); |
| 652 |
| 649 params_.parse_alternative_services = false; | 653 params_.parse_alternative_services = false; |
| 650 params_.enable_alternative_service_with_different_host = false; | 654 params_.enable_alternative_service_with_different_host = false; |
| 651 CreateSession(); | 655 CreateSession(); |
| 652 | 656 |
| 653 EXPECT_FALSE( | 657 EXPECT_FALSE( |
| 654 test_socket_performance_watcher_factory_.rtt_notification_received()); | 658 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 655 SendRequestAndExpectQuicResponse("hello!"); | 659 SendRequestAndExpectQuicResponse("hello!"); |
| 656 EXPECT_TRUE( | 660 EXPECT_TRUE( |
| 657 test_socket_performance_watcher_factory_.rtt_notification_received()); | 661 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 658 | 662 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); | 766 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); |
| 763 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); | 767 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); |
| 764 ProofVerifyDetailsChromium verify_details; | 768 ProofVerifyDetailsChromium verify_details; |
| 765 verify_details.cert_verify_result.verified_cert = cert; | 769 verify_details.cert_verify_result.verified_cert = cert; |
| 766 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 770 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 767 ProofVerifyDetailsChromium verify_details2; | 771 ProofVerifyDetailsChromium verify_details2; |
| 768 verify_details2.cert_verify_result.verified_cert = cert; | 772 verify_details2.cert_verify_result.verified_cert = cert; |
| 769 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); | 773 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); |
| 770 | 774 |
| 771 request_.url = GURL("http://" + origin_host); | 775 request_.url = GURL("http://" + origin_host); |
| 776 AddHangingNonAlternateProtocolSocketData(); |
| 772 CreateSession(); | 777 CreateSession(); |
| 773 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 778 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 774 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 779 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 775 } | 780 } |
| 776 | 781 |
| 777 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { | 782 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { |
| 778 params_.enable_alternative_service_with_different_host = true; | 783 params_.enable_alternative_service_with_different_host = true; |
| 779 HostPortPair origin("www.example.org", 443); | 784 HostPortPair origin("www.example.org", 443); |
| 780 HostPortPair alternative("mail.example.org", 443); | 785 HostPortPair alternative("mail.example.org", 443); |
| 781 | 786 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 803 mock_quic_data.AddRead( | 808 mock_quic_data.AddRead( |
| 804 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 809 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 805 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 810 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 806 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 811 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 807 mock_quic_data.AddRead(ASYNC, 0); | 812 mock_quic_data.AddRead(ASYNC, 0); |
| 808 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 813 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 809 | 814 |
| 810 request_.url = GURL("https://" + origin.host()); | 815 request_.url = GURL("https://" + origin.host()); |
| 811 AddQuicRemoteAlternativeServiceMapping( | 816 AddQuicRemoteAlternativeServiceMapping( |
| 812 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); | 817 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); |
| 818 AddHangingNonAlternateProtocolSocketData(); |
| 813 CreateSession(); | 819 CreateSession(); |
| 814 | 820 |
| 815 SendRequestAndExpectQuicResponse("hello!"); | 821 SendRequestAndExpectQuicResponse("hello!"); |
| 816 } | 822 } |
| 817 | 823 |
| 818 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 824 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
| 819 params_.origins_to_force_quic_on.insert( | 825 params_.origins_to_force_quic_on.insert( |
| 820 HostPortPair::FromString("mail.example.org:443")); | 826 HostPortPair::FromString("mail.example.org:443")); |
| 821 | 827 |
| 822 MockQuicData mock_quic_data1; | 828 MockQuicData mock_quic_data1; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 894 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 889 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 895 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 890 mock_quic_data.AddRead( | 896 mock_quic_data.AddRead( |
| 891 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 897 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 892 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 898 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 893 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 899 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 894 mock_quic_data.AddRead(ASYNC, 0); // EOF | 900 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 895 | 901 |
| 896 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 902 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 897 | 903 |
| 904 AddHangingNonAlternateProtocolSocketData(); |
| 898 CreateSession(); | 905 CreateSession(); |
| 899 | 906 |
| 900 SendRequestAndExpectHttpResponse("hello world"); | 907 SendRequestAndExpectHttpResponse("hello world"); |
| 901 SendRequestAndExpectQuicResponse("hello!"); | 908 SendRequestAndExpectQuicResponse("hello!"); |
| 902 } | 909 } |
| 903 | 910 |
| 904 TEST_P(QuicNetworkTransactionTest, | 911 TEST_P(QuicNetworkTransactionTest, |
| 905 UseAlternativeServiceWithProbabilityForQuic) { | 912 UseAlternativeServiceWithProbabilityForQuic) { |
| 906 MockRead http_reads[] = { | 913 MockRead http_reads[] = { |
| 907 MockRead("HTTP/1.1 200 OK\r\n"), | 914 MockRead("HTTP/1.1 200 OK\r\n"), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 922 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 929 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 923 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 930 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 924 mock_quic_data.AddRead( | 931 mock_quic_data.AddRead( |
| 925 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 932 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 926 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 933 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 927 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 934 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 928 mock_quic_data.AddRead(ASYNC, 0); // EOF | 935 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 929 | 936 |
| 930 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 937 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 931 | 938 |
| 939 AddHangingNonAlternateProtocolSocketData(); |
| 932 CreateSession(); | 940 CreateSession(); |
| 933 | 941 |
| 934 SendRequestAndExpectHttpResponse("hello world"); | 942 SendRequestAndExpectHttpResponse("hello world"); |
| 935 SendRequestAndExpectQuicResponse("hello!"); | 943 SendRequestAndExpectQuicResponse("hello!"); |
| 936 } | 944 } |
| 937 | 945 |
| 938 TEST_P(QuicNetworkTransactionTest, SetAlternativeServiceWithScheme) { | 946 TEST_P(QuicNetworkTransactionTest, SetAlternativeServiceWithScheme) { |
| 939 MockRead http_reads[] = { | 947 MockRead http_reads[] = { |
| 940 MockRead("HTTP/1.1 200 OK\r\n"), | 948 MockRead("HTTP/1.1 200 OK\r\n"), |
| 941 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"), | 949 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"), |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1030 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1023 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1031 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1024 mock_quic_data.AddRead( | 1032 mock_quic_data.AddRead( |
| 1025 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1033 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1026 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1034 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1027 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1035 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1028 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1036 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1029 | 1037 |
| 1030 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1038 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1031 | 1039 |
| 1040 AddHangingNonAlternateProtocolSocketData(); |
| 1032 CreateSession(); | 1041 CreateSession(); |
| 1033 | 1042 |
| 1034 SendRequestAndExpectHttpResponse("hello world"); | 1043 SendRequestAndExpectHttpResponse("hello world"); |
| 1035 SendRequestAndExpectQuicResponse("hello!"); | 1044 SendRequestAndExpectQuicResponse("hello!"); |
| 1036 } | 1045 } |
| 1037 | 1046 |
| 1038 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { | 1047 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { |
| 1039 MockQuicData mock_quic_data; | 1048 MockQuicData mock_quic_data; |
| 1040 mock_quic_data.AddWrite( | 1049 mock_quic_data.AddWrite( |
| 1041 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1050 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 1175 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), |
| 1167 &response_header_offset)); | 1176 &response_header_offset)); |
| 1168 mock_quic_data.AddRead( | 1177 mock_quic_data.AddRead( |
| 1169 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!")); | 1178 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!")); |
| 1170 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); | 1179 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); |
| 1171 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1180 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1172 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1181 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1173 | 1182 |
| 1174 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1183 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1175 | 1184 |
| 1185 AddHangingNonAlternateProtocolSocketData(); |
| 1176 CreateSession(); | 1186 CreateSession(); |
| 1177 | 1187 |
| 1178 SendRequestAndExpectHttpResponse("hello world"); | 1188 SendRequestAndExpectHttpResponse("hello world"); |
| 1179 | 1189 |
| 1180 SendRequestAndExpectQuicResponseOnPort("hello!", 443); | 1190 SendRequestAndExpectQuicResponseOnPort("hello!", 443); |
| 1181 SendRequestAndExpectQuicResponseOnPort("hello!", 443); | 1191 SendRequestAndExpectQuicResponseOnPort("hello!", 443); |
| 1182 } | 1192 } |
| 1183 | 1193 |
| 1184 // When multiple alternative services that has existing QUIC session. | 1194 // When multiple alternative services that has existing QUIC session. |
| 1185 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first | 1195 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1250 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1260 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1251 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 1261 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), |
| 1252 &response_header_offset)); | 1262 &response_header_offset)); |
| 1253 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, | 1263 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, |
| 1254 true, 0, "hello from foo!")); | 1264 true, 0, "hello from foo!")); |
| 1255 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); | 1265 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); |
| 1256 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1266 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1257 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1267 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1258 | 1268 |
| 1259 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1269 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1270 AddHangingNonAlternateProtocolSocketData(); |
| 1271 |
| 1260 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 1272 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
| 1261 | 1273 |
| 1274 AddHangingNonAlternateProtocolSocketData(); |
| 1275 |
| 1262 CreateSession(); | 1276 CreateSession(); |
| 1263 | 1277 |
| 1264 SendRequestAndExpectHttpResponse("hello world"); | 1278 SendRequestAndExpectHttpResponse("hello world"); |
| 1265 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); | 1279 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); |
| 1266 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); | 1280 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); |
| 1267 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); | 1281 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); |
| 1268 } | 1282 } |
| 1269 | 1283 |
| 1270 // Multiple origins have listed the same alternative services. When there's a | 1284 // Multiple origins have listed the same alternative services. When there's a |
| 1271 // existing QUIC session opened by a request to other origin, | 1285 // existing QUIC session opened by a request to other origin, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1327 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1341 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1328 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 1342 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), |
| 1329 &response_header_offset)); | 1343 &response_header_offset)); |
| 1330 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, | 1344 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, |
| 1331 true, 0, "hello from mail QUIC!")); | 1345 true, 0, "hello from mail QUIC!")); |
| 1332 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); | 1346 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); |
| 1333 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1347 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1334 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1348 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1335 | 1349 |
| 1336 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1350 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1351 AddHangingNonAlternateProtocolSocketData(); |
| 1337 | 1352 |
| 1338 CreateSession(); | 1353 CreateSession(); |
| 1339 | 1354 |
| 1340 // Send two HTTP requests, responses set up alt-svc lists for the origins. | 1355 // Send two HTTP requests, responses set up alt-svc lists for the origins. |
| 1341 request_.url = GURL("https://www.example.org/"); | 1356 request_.url = GURL("https://www.example.org/"); |
| 1342 SendRequestAndExpectHttpResponse("hello world from www.example.org"); | 1357 SendRequestAndExpectHttpResponse("hello world from www.example.org"); |
| 1343 request_.url = GURL("https://mail.example.org/"); | 1358 request_.url = GURL("https://mail.example.org/"); |
| 1344 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); | 1359 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); |
| 1345 | 1360 |
| 1346 // Open a QUIC session to mail.example.org:443 when making request | 1361 // Open a QUIC session to mail.example.org:443 when making request |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1419 mock_quic_data2.AddRead( | 1434 mock_quic_data2.AddRead( |
| 1420 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 1435 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
| 1421 GetResponseHeaders("200 OK"), &maker)); | 1436 GetResponseHeaders("200 OK"), &maker)); |
| 1422 mock_quic_data2.AddRead(ConstructDataPacket( | 1437 mock_quic_data2.AddRead(ConstructDataPacket( |
| 1423 2, kClientDataStreamId1, false, true, 0, "hello from docs QUIC!")); | 1438 2, kClientDataStreamId1, false, true, 0, "hello from docs QUIC!")); |
| 1424 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); | 1439 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); |
| 1425 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1440 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1426 mock_quic_data2.AddRead(ASYNC, 0); // EOF | 1441 mock_quic_data2.AddRead(ASYNC, 0); // EOF |
| 1427 | 1442 |
| 1428 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1443 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1444 AddHangingNonAlternateProtocolSocketData(); |
| 1445 |
| 1429 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 1446 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
| 1447 AddHangingNonAlternateProtocolSocketData(); |
| 1430 | 1448 |
| 1431 CreateSession(); | 1449 CreateSession(); |
| 1432 | 1450 |
| 1433 // Send HTTP requests, responses set up the alt-svc lists for the origins. | 1451 // Send HTTP requests, responses set up the alt-svc lists for the origins. |
| 1434 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); | 1452 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); |
| 1435 request_.url = GURL("https://mail.example.com/"); | 1453 request_.url = GURL("https://mail.example.com/"); |
| 1436 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); | 1454 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); |
| 1437 | 1455 |
| 1438 // Open a QUIC session to mail.example.org:443 when making request | 1456 // Open a QUIC session to mail.example.org:443 when making request |
| 1439 // to mail.example.org. | 1457 // to mail.example.org. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1465 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1483 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1466 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1484 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1467 mock_quic_data.AddRead( | 1485 mock_quic_data.AddRead( |
| 1468 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1486 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1469 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1487 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1470 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1488 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1471 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1489 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1472 | 1490 |
| 1473 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1491 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1474 | 1492 |
| 1493 AddHangingNonAlternateProtocolSocketData(); |
| 1475 CreateSession(); | 1494 CreateSession(); |
| 1476 | 1495 |
| 1477 SendRequestAndExpectHttpResponse("hello world"); | 1496 SendRequestAndExpectHttpResponse("hello world"); |
| 1478 SendRequestAndExpectQuicResponseOnPort("hello!", 137); | 1497 SendRequestAndExpectQuicResponseOnPort("hello!", 137); |
| 1479 } | 1498 } |
| 1480 | 1499 |
| 1481 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) { | 1500 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) { |
| 1482 MockRead http_reads[] = { | 1501 MockRead http_reads[] = { |
| 1483 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 1502 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
| 1484 MockRead("hello world"), | 1503 MockRead("hello world"), |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1497 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1516 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1498 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1517 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1499 mock_quic_data.AddRead( | 1518 mock_quic_data.AddRead( |
| 1500 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1519 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1501 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1520 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1502 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1521 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1503 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1522 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1504 | 1523 |
| 1505 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1524 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1506 | 1525 |
| 1526 AddHangingNonAlternateProtocolSocketData(); |
| 1507 CreateSession(); | 1527 CreateSession(); |
| 1508 | 1528 |
| 1509 AlternativeService alternative_service(QUIC, | 1529 AlternativeService alternative_service(QUIC, |
| 1510 HostPortPair::FromURL(request_.url)); | 1530 HostPortPair::FromURL(request_.url)); |
| 1511 http_server_properties_.MarkAlternativeServiceRecentlyBroken( | 1531 http_server_properties_.MarkAlternativeServiceRecentlyBroken( |
| 1512 alternative_service); | 1532 alternative_service); |
| 1513 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | 1533 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
| 1514 alternative_service)); | 1534 alternative_service)); |
| 1515 | 1535 |
| 1516 SendRequestAndExpectHttpResponse("hello world"); | 1536 SendRequestAndExpectHttpResponse("hello world"); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1573 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1593 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1574 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1594 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1575 mock_quic_data.AddRead( | 1595 mock_quic_data.AddRead( |
| 1576 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1596 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1577 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1597 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1578 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1598 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1579 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1599 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1580 | 1600 |
| 1581 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1601 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1582 | 1602 |
| 1603 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1604 // the alternate-protocol job will "win". |
| 1605 AddHangingNonAlternateProtocolSocketData(); |
| 1606 |
| 1583 params_.parse_alternative_services = false; | 1607 params_.parse_alternative_services = false; |
| 1584 params_.parse_alternative_services = false; | 1608 params_.parse_alternative_services = false; |
| 1585 CreateSession(); | 1609 CreateSession(); |
| 1586 | 1610 |
| 1587 SendRequestAndExpectHttpResponse("hello world"); | 1611 SendRequestAndExpectHttpResponse("hello world"); |
| 1588 SendRequestAndExpectQuicResponse("hello!"); | 1612 SendRequestAndExpectQuicResponse("hello!"); |
| 1589 } | 1613 } |
| 1590 | 1614 |
| 1591 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) { | 1615 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) { |
| 1592 MockRead http_reads[] = { | 1616 MockRead http_reads[] = { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1608 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1632 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1609 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1633 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1610 mock_quic_data.AddRead( | 1634 mock_quic_data.AddRead( |
| 1611 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1635 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1612 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1636 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1613 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1637 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1614 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1638 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1615 | 1639 |
| 1616 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1640 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1617 | 1641 |
| 1642 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1643 // the alternate-protocol job will "win". |
| 1644 AddHangingNonAlternateProtocolSocketData(); |
| 1645 |
| 1618 params_.parse_alternative_services = false; | 1646 params_.parse_alternative_services = false; |
| 1619 params_.parse_alternative_services = false; | 1647 params_.parse_alternative_services = false; |
| 1620 CreateSession(); | 1648 CreateSession(); |
| 1621 | 1649 |
| 1622 SendRequestAndExpectHttpResponse("hello world"); | 1650 SendRequestAndExpectHttpResponse("hello world"); |
| 1623 SendRequestAndExpectQuicResponse("hello!"); | 1651 SendRequestAndExpectQuicResponse("hello!"); |
| 1624 } | 1652 } |
| 1625 | 1653 |
| 1626 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { | 1654 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { |
| 1627 MockRead http_reads[] = { | 1655 MockRead http_reads[] = { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1643 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1671 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1644 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1672 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1645 mock_quic_data.AddRead( | 1673 mock_quic_data.AddRead( |
| 1646 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1674 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1647 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1675 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1648 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1676 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1649 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1677 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1650 | 1678 |
| 1651 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1679 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1652 | 1680 |
| 1681 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1682 // the alternate-protocol job will "win". |
| 1683 AddHangingNonAlternateProtocolSocketData(); |
| 1684 |
| 1653 params_.parse_alternative_services = false; | 1685 params_.parse_alternative_services = false; |
| 1654 CreateSession(); | 1686 CreateSession(); |
| 1655 | 1687 |
| 1656 SendRequestAndExpectHttpResponse("hello world"); | 1688 SendRequestAndExpectHttpResponse("hello world"); |
| 1657 SendRequestAndExpectQuicResponseOnPort("hello!", 137); | 1689 SendRequestAndExpectQuicResponseOnPort("hello!", 137); |
| 1658 } | 1690 } |
| 1659 | 1691 |
| 1660 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { | 1692 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { |
| 1661 MockRead http_reads[] = { | 1693 MockRead http_reads[] = { |
| 1662 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | 1694 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1676 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1708 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1677 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1709 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1678 mock_quic_data.AddRead( | 1710 mock_quic_data.AddRead( |
| 1679 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1711 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1680 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1712 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1681 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1713 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1682 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1714 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1683 | 1715 |
| 1684 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1716 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1685 | 1717 |
| 1718 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1719 // the alternate-protocol job will "win". |
| 1720 AddHangingNonAlternateProtocolSocketData(); |
| 1721 |
| 1686 params_.parse_alternative_services = false; | 1722 params_.parse_alternative_services = false; |
| 1687 CreateSession(); | 1723 CreateSession(); |
| 1688 | 1724 |
| 1689 AlternativeService alternative_service(QUIC, | 1725 AlternativeService alternative_service(QUIC, |
| 1690 HostPortPair::FromURL(request_.url)); | 1726 HostPortPair::FromURL(request_.url)); |
| 1691 http_server_properties_.MarkAlternativeServiceRecentlyBroken( | 1727 http_server_properties_.MarkAlternativeServiceRecentlyBroken( |
| 1692 alternative_service); | 1728 alternative_service); |
| 1693 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | 1729 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
| 1694 alternative_service)); | 1730 alternative_service)); |
| 1695 | 1731 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1721 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1757 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1722 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1758 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1723 mock_quic_data.AddRead( | 1759 mock_quic_data.AddRead( |
| 1724 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1760 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1725 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1761 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1726 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1762 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1727 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1763 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1728 | 1764 |
| 1729 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1765 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1730 | 1766 |
| 1767 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1768 // the alternate-protocol job will "win". |
| 1731 AddHangingNonAlternateProtocolSocketData(); | 1769 AddHangingNonAlternateProtocolSocketData(); |
| 1770 |
| 1732 CreateSession(); | 1771 CreateSession(); |
| 1733 | 1772 |
| 1734 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 1773 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
| 1735 SendRequestAndExpectHttpResponse("hello world"); | 1774 SendRequestAndExpectHttpResponse("hello world"); |
| 1736 } | 1775 } |
| 1737 | 1776 |
| 1738 class QuicAltSvcCertificateVerificationTest | 1777 class QuicAltSvcCertificateVerificationTest |
| 1739 : public QuicNetworkTransactionTest { | 1778 : public QuicNetworkTransactionTest { |
| 1740 public: | 1779 public: |
| 1741 void Run(bool valid) { | 1780 void Run(bool valid) { |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1878 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1917 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1879 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1918 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1880 mock_quic_data.AddRead( | 1919 mock_quic_data.AddRead( |
| 1881 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1920 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1882 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1921 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1883 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1922 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1884 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1923 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1885 | 1924 |
| 1886 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1925 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1887 | 1926 |
| 1927 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1928 // the alternate-protocol job will "win". |
| 1929 AddHangingNonAlternateProtocolSocketData(); |
| 1930 |
| 1888 CreateSession(); | 1931 CreateSession(); |
| 1889 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1932 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1890 SendRequestAndExpectQuicResponse("hello!"); | 1933 SendRequestAndExpectQuicResponse("hello!"); |
| 1891 } | 1934 } |
| 1892 | 1935 |
| 1893 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { | 1936 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { |
| 1894 MockQuicData mock_quic_data; | 1937 MockQuicData mock_quic_data; |
| 1895 mock_quic_data.AddWrite( | 1938 mock_quic_data.AddWrite( |
| 1896 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1939 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| 1897 GetRequestHeaders("GET", "https", "/"))); | 1940 GetRequestHeaders("GET", "https", "/"))); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1961 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 2004 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| 1962 GetRequestHeaders("GET", "https", "/"))); | 2005 GetRequestHeaders("GET", "https", "/"))); |
| 1963 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 2006 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 1964 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2007 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 1965 mock_quic_data.AddRead( | 2008 mock_quic_data.AddRead( |
| 1966 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 2009 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 1967 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 2010 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 1968 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 2011 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 1969 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2012 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1970 | 2013 |
| 2014 // The non-alternate protocol job needs to hang in order to guarantee that |
| 2015 // the alternate-protocol job will "win". |
| 2016 AddHangingNonAlternateProtocolSocketData(); |
| 2017 |
| 1971 // In order for a new QUIC session to be established via alternate-protocol | 2018 // In order for a new QUIC session to be established via alternate-protocol |
| 1972 // without racing an HTTP connection, we need the host resolution to happen | 2019 // without racing an HTTP connection, we need the host resolution to happen |
| 1973 // synchronously. Of course, even though QUIC *could* perform a 0-RTT | 2020 // synchronously. Of course, even though QUIC *could* perform a 0-RTT |
| 1974 // connection to the the server, in this test we require confirmation | 2021 // connection to the the server, in this test we require confirmation |
| 1975 // before encrypting so the HTTP job will still start. | 2022 // before encrypting so the HTTP job will still start. |
| 1976 host_resolver_.set_synchronous_mode(true); | 2023 host_resolver_.set_synchronous_mode(true); |
| 1977 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 2024 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
| 1978 ""); | 2025 ""); |
| 1979 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 2026 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
| 1980 AddressList address; | 2027 AddressList address; |
| 1981 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 2028 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
| 1982 nullptr, net_log_.bound()); | 2029 nullptr, net_log_.bound()); |
| 1983 | 2030 |
| 1984 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1985 // the alternate-protocol job will "win". | |
| 1986 AddHangingNonAlternateProtocolSocketData(); | |
| 1987 | |
| 1988 CreateSession(); | 2031 CreateSession(); |
| 1989 session_->quic_stream_factory()->set_require_confirmation(true); | 2032 session_->quic_stream_factory()->set_require_confirmation(true); |
| 1990 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2033 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 1991 | 2034 |
| 1992 std::unique_ptr<HttpNetworkTransaction> trans( | 2035 std::unique_ptr<HttpNetworkTransaction> trans( |
| 1993 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 1994 TestCompletionCallback callback; | 2037 TestCompletionCallback callback; |
| 1995 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2038 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 1996 EXPECT_EQ(ERR_IO_PENDING, rv); | 2039 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1997 | 2040 |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2196 | 2239 |
| 2197 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { | 2240 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { |
| 2198 // Alternate-protocol job | 2241 // Alternate-protocol job |
| 2199 MockRead quic_reads[] = { | 2242 MockRead quic_reads[] = { |
| 2200 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 2243 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
| 2201 }; | 2244 }; |
| 2202 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, | 2245 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, |
| 2203 0); | 2246 0); |
| 2204 socket_factory_.AddSocketDataProvider(&quic_data); | 2247 socket_factory_.AddSocketDataProvider(&quic_data); |
| 2205 | 2248 |
| 2249 AddHangingNonAlternateProtocolSocketData(); |
| 2250 |
| 2206 // Second Alternate-protocol job which will race with the TCP job. | 2251 // Second Alternate-protocol job which will race with the TCP job. |
| 2207 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads), | 2252 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads), |
| 2208 nullptr, 0); | 2253 nullptr, 0); |
| 2209 socket_factory_.AddSocketDataProvider(&quic_data2); | 2254 socket_factory_.AddSocketDataProvider(&quic_data2); |
| 2210 | 2255 |
| 2211 // Final job that will proceed when the QUIC job fails. | 2256 // Final job that will proceed when the QUIC job fails. |
| 2212 MockRead http_reads[] = { | 2257 MockRead http_reads[] = { |
| 2213 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2258 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
| 2214 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2259 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 2215 MockRead(ASYNC, OK)}; | 2260 MockRead(ASYNC, OK)}; |
| 2216 | 2261 |
| 2217 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2262 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 2218 0); | 2263 0); |
| 2219 socket_factory_.AddSocketDataProvider(&http_data); | 2264 socket_factory_.AddSocketDataProvider(&http_data); |
| 2220 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2265 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 2221 | 2266 |
| 2222 AddHangingNonAlternateProtocolSocketData(); | |
| 2223 CreateSession(); | 2267 CreateSession(); |
| 2224 | 2268 |
| 2225 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2269 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 2226 | 2270 |
| 2227 SendRequestAndExpectHttpResponse("hello from http"); | 2271 SendRequestAndExpectHttpResponse("hello from http"); |
| 2228 | 2272 |
| 2229 ExpectBrokenAlternateProtocolMapping(); | 2273 ExpectBrokenAlternateProtocolMapping(); |
| 2230 | 2274 |
| 2231 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 2275 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
| 2232 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 2276 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2330 GetRequestHeaders("GET", "https", "/"))); | 2374 GetRequestHeaders("GET", "https", "/"))); |
| 2331 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 2375 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 2332 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2376 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 2333 mock_quic_data.AddRead( | 2377 mock_quic_data.AddRead( |
| 2334 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 2378 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 2335 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 2379 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 2336 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 2380 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
| 2337 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2381 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2338 | 2382 |
| 2339 request_.url = GURL("https://www.example.org:443"); | 2383 request_.url = GURL("https://www.example.org:443"); |
| 2384 AddHangingNonAlternateProtocolSocketData(); |
| 2340 CreateSession(); | 2385 CreateSession(); |
| 2341 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 2386 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 2342 SendRequestAndExpectQuicResponse("hello!"); | 2387 SendRequestAndExpectQuicResponse("hello!"); |
| 2343 EXPECT_TRUE( | 2388 EXPECT_TRUE( |
| 2344 test_socket_performance_watcher_factory_.rtt_notification_received()); | 2389 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 2345 } | 2390 } |
| 2346 | 2391 |
| 2347 TEST_P(QuicNetworkTransactionTest, QuicUpload) { | 2392 TEST_P(QuicNetworkTransactionTest, QuicUpload) { |
| 2348 params_.origins_to_force_quic_on.insert( | 2393 params_.origins_to_force_quic_on.insert( |
| 2349 HostPortPair::FromString("mail.example.org:443")); | 2394 HostPortPair::FromString("mail.example.org:443")); |
| 2350 | 2395 |
| 2351 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 2396 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 2352 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; | 2397 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; |
| 2353 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 2398 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
| 2354 arraysize(writes)); | 2399 arraysize(writes)); |
| 2355 socket_factory_.AddSocketDataProvider(&socket_data); | 2400 socket_factory_.AddSocketDataProvider(&socket_data); |
| 2356 | 2401 |
| 2402 // The non-alternate protocol job needs to hang in order to guarantee that |
| 2403 // the alternate-protocol job will "win". |
| 2404 AddHangingNonAlternateProtocolSocketData(); |
| 2405 |
| 2357 params_.parse_alternative_services = false; | 2406 params_.parse_alternative_services = false; |
| 2358 params_.enable_alternative_service_with_different_host = false; | 2407 params_.enable_alternative_service_with_different_host = false; |
| 2359 CreateSession(); | 2408 CreateSession(); |
| 2360 request_.method = "POST"; | 2409 request_.method = "POST"; |
| 2361 ChunkedUploadDataStream upload_data(0); | 2410 ChunkedUploadDataStream upload_data(0); |
| 2362 upload_data.AppendData("1", 1, true); | 2411 upload_data.AppendData("1", 1, true); |
| 2363 | 2412 |
| 2364 request_.upload_data_stream = &upload_data; | 2413 request_.upload_data_stream = &upload_data; |
| 2365 | 2414 |
| 2366 std::unique_ptr<HttpNetworkTransaction> trans( | 2415 std::unique_ptr<HttpNetworkTransaction> trans( |
| 2367 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2368 TestCompletionCallback callback; | 2417 TestCompletionCallback callback; |
| 2369 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2418 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 2370 EXPECT_EQ(ERR_IO_PENDING, rv); | 2419 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2371 EXPECT_NE(OK, callback.WaitForResult()); | 2420 EXPECT_NE(OK, callback.WaitForResult()); |
| 2372 } | 2421 } |
| 2373 | 2422 |
| 2374 } // namespace test | 2423 } // namespace test |
| 2375 } // namespace net | 2424 } // namespace net |
| OLD | NEW |