| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 #include "net/quic/chromium/quic_test_packet_maker.h" | 47 #include "net/quic/chromium/quic_test_packet_maker.h" |
| 48 #include "net/quic/chromium/test_task_runner.h" | 48 #include "net/quic/chromium/test_task_runner.h" |
| 49 #include "net/quic/core/crypto/quic_decrypter.h" | 49 #include "net/quic/core/crypto/quic_decrypter.h" |
| 50 #include "net/quic/core/crypto/quic_encrypter.h" | 50 #include "net/quic/core/crypto/quic_encrypter.h" |
| 51 #include "net/quic/core/quic_framer.h" | 51 #include "net/quic/core/quic_framer.h" |
| 52 #include "net/quic/platform/api/quic_string_piece.h" | 52 #include "net/quic/platform/api/quic_string_piece.h" |
| 53 #include "net/quic/platform/impl/quic_test_impl.h" | 53 #include "net/quic/platform/impl/quic_test_impl.h" |
| 54 #include "net/quic/test_tools/crypto_test_utils.h" | 54 #include "net/quic/test_tools/crypto_test_utils.h" |
| 55 #include "net/quic/test_tools/mock_clock.h" | 55 #include "net/quic/test_tools/mock_clock.h" |
| 56 #include "net/quic/test_tools/mock_random.h" | 56 #include "net/quic/test_tools/mock_random.h" |
| 57 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 57 #include "net/quic/test_tools/quic_test_utils.h" | 58 #include "net/quic/test_tools/quic_test_utils.h" |
| 58 #include "net/socket/client_socket_factory.h" | 59 #include "net/socket/client_socket_factory.h" |
| 59 #include "net/socket/mock_client_socket_pool_manager.h" | 60 #include "net/socket/mock_client_socket_pool_manager.h" |
| 60 #include "net/socket/next_proto.h" | 61 #include "net/socket/next_proto.h" |
| 61 #include "net/socket/socket_performance_watcher.h" | 62 #include "net/socket/socket_performance_watcher.h" |
| 62 #include "net/socket/socket_performance_watcher_factory.h" | 63 #include "net/socket/socket_performance_watcher_factory.h" |
| 63 #include "net/socket/socket_test_util.h" | 64 #include "net/socket/socket_test_util.h" |
| 64 #include "net/spdy/core/spdy_frame_builder.h" | 65 #include "net/spdy/core/spdy_frame_builder.h" |
| 65 #include "net/spdy/core/spdy_framer.h" | 66 #include "net/spdy/core/spdy_framer.h" |
| 66 #include "net/ssl/ssl_config_service_defaults.h" | 67 #include "net/ssl/ssl_config_service_defaults.h" |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); | 710 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); |
| 710 | 711 |
| 711 // The alternative proxy server should no longer be in use. | 712 // The alternative proxy server should no longer be in use. |
| 712 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); | 713 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); |
| 713 | 714 |
| 714 // Verify that the second request completes successfully, and the | 715 // Verify that the second request completes successfully, and the |
| 715 // alternative proxy server job is not started. | 716 // alternative proxy server job is not started. |
| 716 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); | 717 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); |
| 717 } | 718 } |
| 718 | 719 |
| 720 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 721 return test::GetNthClientInitiatedStreamId(version_, n); |
| 722 } |
| 723 |
| 724 QuicStreamId GetNthServerInitiatedStreamId(int n) { |
| 725 return test::GetNthServerInitiatedStreamId(version_, n); |
| 726 } |
| 727 |
| 719 const QuicVersion version_; | 728 const QuicVersion version_; |
| 720 QuicFlagSaver flags_; // Save/restore all QUIC flag values. | 729 QuicFlagSaver flags_; // Save/restore all QUIC flag values. |
| 721 MockClock clock_; | 730 MockClock clock_; |
| 722 QuicTestPacketMaker client_maker_; | 731 QuicTestPacketMaker client_maker_; |
| 723 QuicTestPacketMaker server_maker_; | 732 QuicTestPacketMaker server_maker_; |
| 724 std::unique_ptr<HttpNetworkSession> session_; | 733 std::unique_ptr<HttpNetworkSession> session_; |
| 725 MockClientSocketFactory socket_factory_; | 734 MockClientSocketFactory socket_factory_; |
| 726 ProofVerifyDetailsChromium verify_details_; | 735 ProofVerifyDetailsChromium verify_details_; |
| 727 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 736 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 728 MockHostResolver host_resolver_; | 737 MockHostResolver host_resolver_; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 | 780 |
| 772 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { | 781 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { |
| 773 params_.origins_to_force_quic_on.insert( | 782 params_.origins_to_force_quic_on.insert( |
| 774 HostPortPair::FromString("mail.example.org:443")); | 783 HostPortPair::FromString("mail.example.org:443")); |
| 775 | 784 |
| 776 MockQuicData mock_quic_data; | 785 MockQuicData mock_quic_data; |
| 777 QuicStreamOffset header_stream_offset = 0; | 786 QuicStreamOffset header_stream_offset = 0; |
| 778 mock_quic_data.AddWrite( | 787 mock_quic_data.AddWrite( |
| 779 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 788 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 780 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 789 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 781 2, kClientDataStreamId1, true, true, | 790 2, GetNthClientInitiatedStreamId(0), true, true, |
| 782 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 791 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 783 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 792 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 784 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 793 1, GetNthClientInitiatedStreamId(0), false, false, |
| 785 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 794 GetResponseHeaders("200 OK"))); |
| 786 false, true, 0, "hello!")); | 795 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 796 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 787 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 797 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 788 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 798 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 789 | 799 |
| 790 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 800 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 791 | 801 |
| 792 CreateSession(); | 802 CreateSession(); |
| 793 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); | 803 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); |
| 794 | 804 |
| 795 EXPECT_FALSE( | 805 EXPECT_FALSE( |
| 796 test_socket_performance_watcher_factory_.rtt_notification_received()); | 806 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 797 SendRequestAndExpectQuicResponse("hello!"); | 807 SendRequestAndExpectQuicResponse("hello!"); |
| 798 EXPECT_TRUE( | 808 EXPECT_TRUE( |
| 799 test_socket_performance_watcher_factory_.rtt_notification_received()); | 809 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 800 } | 810 } |
| 801 | 811 |
| 802 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { | 812 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { |
| 803 params_.origins_to_force_quic_on.insert( | 813 params_.origins_to_force_quic_on.insert( |
| 804 HostPortPair::FromString("mail.example.org:443")); | 814 HostPortPair::FromString("mail.example.org:443")); |
| 805 | 815 |
| 806 MockQuicData mock_quic_data; | 816 MockQuicData mock_quic_data; |
| 807 QuicStreamOffset header_stream_offset = 0; | 817 QuicStreamOffset header_stream_offset = 0; |
| 808 mock_quic_data.AddWrite( | 818 mock_quic_data.AddWrite( |
| 809 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 819 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 810 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 820 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 811 2, kClientDataStreamId1, true, true, | 821 2, GetNthClientInitiatedStreamId(0), true, true, |
| 812 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 822 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 813 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 823 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 814 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 824 1, GetNthClientInitiatedStreamId(0), false, false, |
| 815 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 825 GetResponseHeaders("200 OK"))); |
| 816 false, true, 0, "hello!")); | 826 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 827 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 817 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 828 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 818 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 829 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 819 | 830 |
| 820 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 831 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 821 | 832 |
| 822 CreateSession(); | 833 CreateSession(); |
| 823 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); | 834 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); |
| 824 | 835 |
| 825 EXPECT_FALSE( | 836 EXPECT_FALSE( |
| 826 test_socket_performance_watcher_factory_.rtt_notification_received()); | 837 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 827 SendRequestAndExpectQuicResponse("hello!"); | 838 SendRequestAndExpectQuicResponse("hello!"); |
| 828 EXPECT_FALSE( | 839 EXPECT_FALSE( |
| 829 test_socket_performance_watcher_factory_.rtt_notification_received()); | 840 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 830 } | 841 } |
| 831 | 842 |
| 832 TEST_P(QuicNetworkTransactionTest, ForceQuic) { | 843 TEST_P(QuicNetworkTransactionTest, ForceQuic) { |
| 833 params_.origins_to_force_quic_on.insert( | 844 params_.origins_to_force_quic_on.insert( |
| 834 HostPortPair::FromString("mail.example.org:443")); | 845 HostPortPair::FromString("mail.example.org:443")); |
| 835 | 846 |
| 836 MockQuicData mock_quic_data; | 847 MockQuicData mock_quic_data; |
| 837 QuicStreamOffset header_stream_offset = 0; | 848 QuicStreamOffset header_stream_offset = 0; |
| 838 mock_quic_data.AddWrite( | 849 mock_quic_data.AddWrite( |
| 839 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 850 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 840 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 851 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 841 2, kClientDataStreamId1, true, true, | 852 2, GetNthClientInitiatedStreamId(0), true, true, |
| 842 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 853 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 843 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 854 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 844 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 855 1, GetNthClientInitiatedStreamId(0), false, false, |
| 845 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 856 GetResponseHeaders("200 OK"))); |
| 846 false, true, 0, "hello!")); | 857 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 858 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 847 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 859 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 848 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 860 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 849 | 861 |
| 850 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 862 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 851 | 863 |
| 852 CreateSession(); | 864 CreateSession(); |
| 853 | 865 |
| 854 SendRequestAndExpectQuicResponse("hello!"); | 866 SendRequestAndExpectQuicResponse("hello!"); |
| 855 | 867 |
| 856 // Check that the NetLog was filled reasonably. | 868 // Check that the NetLog was filled reasonably. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { | 907 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { |
| 896 params_.origins_to_force_quic_on.insert(HostPortPair()); | 908 params_.origins_to_force_quic_on.insert(HostPortPair()); |
| 897 | 909 |
| 898 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 910 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 899 | 911 |
| 900 MockQuicData mock_quic_data; | 912 MockQuicData mock_quic_data; |
| 901 QuicStreamOffset header_stream_offset = 0; | 913 QuicStreamOffset header_stream_offset = 0; |
| 902 mock_quic_data.AddWrite( | 914 mock_quic_data.AddWrite( |
| 903 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 915 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 904 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 916 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 905 2, kClientDataStreamId1, true, true, | 917 2, GetNthClientInitiatedStreamId(0), true, true, |
| 906 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 918 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 907 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 919 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 908 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 920 1, GetNthClientInitiatedStreamId(0), false, false, |
| 909 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 921 GetResponseHeaders("200 OK"))); |
| 910 false, true, 0, "hello!")); | 922 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 923 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 911 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 924 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 912 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 925 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 913 | 926 |
| 914 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 927 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 915 | 928 |
| 916 CreateSession(); | 929 CreateSession(); |
| 917 | 930 |
| 918 SendRequestAndExpectQuicResponse("hello!"); | 931 SendRequestAndExpectQuicResponse("hello!"); |
| 919 EXPECT_TRUE( | 932 EXPECT_TRUE( |
| 920 test_socket_performance_watcher_factory_.rtt_notification_received()); | 933 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 921 } | 934 } |
| 922 | 935 |
| 923 TEST_P(QuicNetworkTransactionTest, QuicProxy) { | 936 TEST_P(QuicNetworkTransactionTest, QuicProxy) { |
| 924 params_.enable_quic = true; | 937 params_.enable_quic = true; |
| 925 proxy_service_ = | 938 proxy_service_ = |
| 926 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); | 939 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); |
| 927 | 940 |
| 928 MockQuicData mock_quic_data; | 941 MockQuicData mock_quic_data; |
| 929 QuicStreamOffset header_stream_offset = 0; | 942 QuicStreamOffset header_stream_offset = 0; |
| 930 mock_quic_data.AddWrite( | 943 mock_quic_data.AddWrite( |
| 931 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 944 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 932 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 945 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 933 2, kClientDataStreamId1, true, true, | 946 2, GetNthClientInitiatedStreamId(0), true, true, |
| 934 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 947 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
| 935 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 948 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 936 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 949 1, GetNthClientInitiatedStreamId(0), false, false, |
| 937 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 950 GetResponseHeaders("200 OK"))); |
| 938 false, true, 0, "hello!")); | 951 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 952 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 939 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 953 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 940 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 954 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 941 mock_quic_data.AddRead(ASYNC, 0); // EOF | 955 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 942 | 956 |
| 943 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 957 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 944 | 958 |
| 945 EXPECT_FALSE( | 959 EXPECT_FALSE( |
| 946 test_socket_performance_watcher_factory_.rtt_notification_received()); | 960 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 947 // There is no need to set up an alternate protocol job, because | 961 // There is no need to set up an alternate protocol job, because |
| 948 // no attempt will be made to speak to the proxy over TCP. | 962 // no attempt will be made to speak to the proxy over TCP. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 965 params_.enable_quic = true; | 979 params_.enable_quic = true; |
| 966 proxy_service_ = | 980 proxy_service_ = |
| 967 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); | 981 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); |
| 968 | 982 |
| 969 client_maker_.set_hostname(origin_host); | 983 client_maker_.set_hostname(origin_host); |
| 970 MockQuicData mock_quic_data; | 984 MockQuicData mock_quic_data; |
| 971 QuicStreamOffset header_stream_offset = 0; | 985 QuicStreamOffset header_stream_offset = 0; |
| 972 mock_quic_data.AddWrite( | 986 mock_quic_data.AddWrite( |
| 973 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 987 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 974 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 988 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 975 2, kClientDataStreamId1, true, true, | 989 2, GetNthClientInitiatedStreamId(0), true, true, |
| 976 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 990 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
| 977 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 991 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 978 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 992 1, GetNthClientInitiatedStreamId(0), false, false, |
| 979 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 993 GetResponseHeaders("200 OK"))); |
| 980 false, true, 0, "hello!")); | 994 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 995 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 981 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 996 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 982 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 997 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 983 mock_quic_data.AddRead(ASYNC, 0); | 998 mock_quic_data.AddRead(ASYNC, 0); |
| 984 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 999 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 985 | 1000 |
| 986 scoped_refptr<X509Certificate> cert( | 1001 scoped_refptr<X509Certificate> cert( |
| 987 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); | 1002 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
| 988 ASSERT_TRUE(cert.get()); | 1003 ASSERT_TRUE(cert.get()); |
| 989 // This certificate is valid for the proxy, but not for the origin. | 1004 // This certificate is valid for the proxy, but not for the origin. |
| 990 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, false)); | 1005 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, false)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1018 ProofVerifyDetailsChromium verify_details; | 1033 ProofVerifyDetailsChromium verify_details; |
| 1019 verify_details.cert_verify_result.verified_cert = cert; | 1034 verify_details.cert_verify_result.verified_cert = cert; |
| 1020 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1035 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 1021 | 1036 |
| 1022 client_maker_.set_hostname(origin.host()); | 1037 client_maker_.set_hostname(origin.host()); |
| 1023 MockQuicData mock_quic_data; | 1038 MockQuicData mock_quic_data; |
| 1024 QuicStreamOffset header_stream_offset = 0; | 1039 QuicStreamOffset header_stream_offset = 0; |
| 1025 mock_quic_data.AddWrite( | 1040 mock_quic_data.AddWrite( |
| 1026 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1041 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1027 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1042 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1028 2, kClientDataStreamId1, true, true, | 1043 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1029 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1044 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1030 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1045 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1031 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1046 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1032 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1047 GetResponseHeaders("200 OK"))); |
| 1033 false, true, 0, "hello!")); | 1048 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1049 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1034 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1050 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1035 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1051 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1036 mock_quic_data.AddRead(ASYNC, 0); | 1052 mock_quic_data.AddRead(ASYNC, 0); |
| 1037 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1053 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1038 | 1054 |
| 1039 request_.url = GURL("https://" + origin.host()); | 1055 request_.url = GURL("https://" + origin.host()); |
| 1040 AddQuicRemoteAlternativeServiceMapping( | 1056 AddQuicRemoteAlternativeServiceMapping( |
| 1041 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); | 1057 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); |
| 1042 AddHangingNonAlternateProtocolSocketData(); | 1058 AddHangingNonAlternateProtocolSocketData(); |
| 1043 CreateSession(); | 1059 CreateSession(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1060 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 1076 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 1061 http_server_properties_.SetAlternativeService(server, alternative_service, | 1077 http_server_properties_.SetAlternativeService(server, alternative_service, |
| 1062 expiration); | 1078 expiration); |
| 1063 | 1079 |
| 1064 // First try: alternative job uses QUIC, gets 421 Misdirected Request error. | 1080 // First try: alternative job uses QUIC, gets 421 Misdirected Request error. |
| 1065 MockQuicData mock_quic_data; | 1081 MockQuicData mock_quic_data; |
| 1066 QuicStreamOffset request_header_offset = 0; | 1082 QuicStreamOffset request_header_offset = 0; |
| 1067 mock_quic_data.AddWrite( | 1083 mock_quic_data.AddWrite( |
| 1068 ConstructInitialSettingsPacket(1, &request_header_offset)); | 1084 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 1069 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1085 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1070 2, kClientDataStreamId1, true, true, | 1086 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1071 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 1087 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 1072 mock_quic_data.AddRead( | 1088 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1073 ConstructServerResponseHeadersPacket(1, kClientDataStreamId1, false, true, | 1089 1, GetNthClientInitiatedStreamId(0), false, true, |
| 1074 GetResponseHeaders("421"), nullptr)); | 1090 GetResponseHeaders("421"), nullptr)); |
| 1075 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 1091 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
| 1076 3, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1)); | 1092 3, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 1, 1, 1)); |
| 1077 mock_quic_data.AddRead(ASYNC, OK); | 1093 mock_quic_data.AddRead(ASYNC, OK); |
| 1078 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1094 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1079 | 1095 |
| 1080 // First try: main job uses TCP, connection fails. | 1096 // First try: main job uses TCP, connection fails. |
| 1081 // (A hanging connection would not work here, because the main Job on the | 1097 // (A hanging connection would not work here, because the main Job on the |
| 1082 // second try would pool to that socket and hang.) | 1098 // second try would pool to that socket and hang.) |
| 1083 StaticSocketDataProvider failing_data; | 1099 StaticSocketDataProvider failing_data; |
| 1084 MockConnect failing_connect(SYNCHRONOUS, ERR_CONNECTION_CLOSED); | 1100 MockConnect failing_connect(SYNCHRONOUS, ERR_CONNECTION_CLOSED); |
| 1085 failing_data.set_connect_data(failing_connect); | 1101 failing_data.set_connect_data(failing_connect); |
| 1086 socket_factory_.AddSocketDataProvider(&failing_data); | 1102 socket_factory_.AddSocketDataProvider(&failing_data); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1171 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1187 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 1172 0); | 1188 0); |
| 1173 socket_factory_.AddSocketDataProvider(&http_data); | 1189 socket_factory_.AddSocketDataProvider(&http_data); |
| 1174 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1190 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 1175 | 1191 |
| 1176 MockQuicData mock_quic_data; | 1192 MockQuicData mock_quic_data; |
| 1177 QuicStreamOffset header_stream_offset = 0; | 1193 QuicStreamOffset header_stream_offset = 0; |
| 1178 mock_quic_data.AddWrite( | 1194 mock_quic_data.AddWrite( |
| 1179 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1195 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1180 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1196 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1181 2, kClientDataStreamId1, true, true, | 1197 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1182 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1198 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1183 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1199 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1184 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1200 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1185 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1201 GetResponseHeaders("200 OK"))); |
| 1186 false, true, 0, "hello!")); | 1202 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1203 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1187 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1204 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1188 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1205 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1189 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1206 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1190 | 1207 |
| 1191 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1208 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1192 | 1209 |
| 1193 AddHangingNonAlternateProtocolSocketData(); | 1210 AddHangingNonAlternateProtocolSocketData(); |
| 1194 CreateSession(); | 1211 CreateSession(); |
| 1195 | 1212 |
| 1196 SendRequestAndExpectHttpResponse("hello world"); | 1213 SendRequestAndExpectHttpResponse("hello world"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1209 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1226 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 1210 0); | 1227 0); |
| 1211 socket_factory_.AddSocketDataProvider(&http_data); | 1228 socket_factory_.AddSocketDataProvider(&http_data); |
| 1212 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1229 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 1213 | 1230 |
| 1214 MockQuicData mock_quic_data; | 1231 MockQuicData mock_quic_data; |
| 1215 QuicStreamOffset header_stream_offset = 0; | 1232 QuicStreamOffset header_stream_offset = 0; |
| 1216 mock_quic_data.AddWrite( | 1233 mock_quic_data.AddWrite( |
| 1217 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1234 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1218 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1235 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1219 2, kClientDataStreamId1, true, true, | 1236 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1220 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1237 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1221 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1238 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1222 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1239 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1223 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1240 GetResponseHeaders("200 OK"))); |
| 1224 false, true, 0, "hello!")); | 1241 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1242 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1225 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1243 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1226 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1244 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1227 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1245 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1228 | 1246 |
| 1229 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1247 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1230 | 1248 |
| 1231 AddHangingNonAlternateProtocolSocketData(); | 1249 AddHangingNonAlternateProtocolSocketData(); |
| 1232 CreateSession(); | 1250 CreateSession(); |
| 1233 | 1251 |
| 1234 SendRequestAndExpectHttpResponse("hello world"); | 1252 SendRequestAndExpectHttpResponse("hello world"); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1331 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 1314 0); | 1332 0); |
| 1315 socket_factory_.AddSocketDataProvider(&http_data); | 1333 socket_factory_.AddSocketDataProvider(&http_data); |
| 1316 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1334 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 1317 | 1335 |
| 1318 MockQuicData mock_quic_data; | 1336 MockQuicData mock_quic_data; |
| 1319 QuicStreamOffset header_stream_offset = 0; | 1337 QuicStreamOffset header_stream_offset = 0; |
| 1320 mock_quic_data.AddWrite( | 1338 mock_quic_data.AddWrite( |
| 1321 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1339 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1322 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1340 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1323 2, kClientDataStreamId1, true, true, | 1341 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1324 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1342 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1325 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1343 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1326 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1344 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1327 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1345 GetResponseHeaders("200 OK"))); |
| 1328 false, true, 0, "hello!")); | 1346 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1347 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1329 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1348 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1330 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1349 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1331 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1350 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1332 | 1351 |
| 1333 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1352 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1334 | 1353 |
| 1335 AddHangingNonAlternateProtocolSocketData(); | 1354 AddHangingNonAlternateProtocolSocketData(); |
| 1336 CreateSession(); | 1355 CreateSession(); |
| 1337 | 1356 |
| 1338 SendRequestAndExpectHttpResponse("hello world"); | 1357 SendRequestAndExpectHttpResponse("hello world"); |
| 1339 SendRequestAndExpectQuicResponse("hello!"); | 1358 SendRequestAndExpectQuicResponse("hello!"); |
| 1340 } | 1359 } |
| 1341 | 1360 |
| 1342 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { | 1361 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { |
| 1343 MockQuicData mock_quic_data; | 1362 MockQuicData mock_quic_data; |
| 1344 QuicStreamOffset header_stream_offset = 0; | 1363 QuicStreamOffset header_stream_offset = 0; |
| 1345 mock_quic_data.AddWrite( | 1364 mock_quic_data.AddWrite( |
| 1346 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1365 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1347 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1366 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1348 2, kClientDataStreamId1, true, true, | 1367 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1349 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1368 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1350 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1369 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1351 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1370 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1371 GetResponseHeaders("200 OK"))); |
| 1352 // Read a GoAway packet with | 1372 // Read a GoAway packet with |
| 1353 // QuicErrorCode: QUIC_ERROR_MIGRATING_PORT from the peer. | 1373 // QuicErrorCode: QUIC_ERROR_MIGRATING_PORT from the peer. |
| 1354 mock_quic_data.AddSynchronousRead(ConstructServerGoAwayPacket( | 1374 mock_quic_data.AddSynchronousRead(ConstructServerGoAwayPacket( |
| 1355 2, QUIC_ERROR_MIGRATING_PORT, | 1375 2, QUIC_ERROR_MIGRATING_PORT, |
| 1356 "connection migration with port change only")); | 1376 "connection migration with port change only")); |
| 1357 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1377 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1358 mock_quic_data.AddSynchronousRead(ConstructServerDataPacket( | 1378 mock_quic_data.AddSynchronousRead(ConstructServerDataPacket( |
| 1359 3, kClientDataStreamId1, false, true, 0, "hello!")); | 1379 3, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1360 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 1380 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
| 1361 4, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 3, 3, 1)); | 1381 4, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 3, 3, 1)); |
| 1362 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1382 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 1363 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1383 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 1364 | 1384 |
| 1365 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1385 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1366 | 1386 |
| 1367 // The non-alternate protocol job needs to hang in order to guarantee that | 1387 // The non-alternate protocol job needs to hang in order to guarantee that |
| 1368 // the alternate-protocol job will "win". | 1388 // the alternate-protocol job will "win". |
| 1369 AddHangingNonAlternateProtocolSocketData(); | 1389 AddHangingNonAlternateProtocolSocketData(); |
| 1370 | 1390 |
| 1371 // In order for a new QUIC session to be established via alternate-protocol | 1391 // In order for a new QUIC session to be established via alternate-protocol |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1409 params_.quic_idle_connection_timeout_seconds = 5; | 1429 params_.quic_idle_connection_timeout_seconds = 5; |
| 1410 | 1430 |
| 1411 // The request will initially go out over QUIC. | 1431 // The request will initially go out over QUIC. |
| 1412 MockQuicData quic_data; | 1432 MockQuicData quic_data; |
| 1413 QuicStreamOffset header_stream_offset = 0; | 1433 QuicStreamOffset header_stream_offset = 0; |
| 1414 SpdyPriority priority = | 1434 SpdyPriority priority = |
| 1415 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1435 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1416 | 1436 |
| 1417 std::string request_data; | 1437 std::string request_data; |
| 1418 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1438 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1419 1, kClientDataStreamId1, true, true, priority, | 1439 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 1420 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1440 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 1421 &request_data)); | 1441 &request_data)); |
| 1422 | 1442 |
| 1423 std::string settings_data; | 1443 std::string settings_data; |
| 1424 QuicStreamOffset settings_offset = header_stream_offset; | 1444 QuicStreamOffset settings_offset = header_stream_offset; |
| 1425 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1445 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 1426 2, &header_stream_offset, &settings_data)); | 1446 2, &header_stream_offset, &settings_data)); |
| 1427 // TLP 1 | 1447 // TLP 1 |
| 1428 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1448 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
| 1429 false, 0, request_data)); | 1449 false, 0, request_data)); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1499 params_.quic_connection_options.push_back(k5RTO); | 1519 params_.quic_connection_options.push_back(k5RTO); |
| 1500 | 1520 |
| 1501 // The request will initially go out over QUIC. | 1521 // The request will initially go out over QUIC. |
| 1502 MockQuicData quic_data; | 1522 MockQuicData quic_data; |
| 1503 QuicStreamOffset header_stream_offset = 0; | 1523 QuicStreamOffset header_stream_offset = 0; |
| 1504 SpdyPriority priority = | 1524 SpdyPriority priority = |
| 1505 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1525 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1506 | 1526 |
| 1507 std::string request_data; | 1527 std::string request_data; |
| 1508 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1528 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1509 1, kClientDataStreamId1, true, true, priority, | 1529 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 1510 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1530 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 1511 &request_data)); | 1531 &request_data)); |
| 1512 | 1532 |
| 1513 std::string settings_data; | 1533 std::string settings_data; |
| 1514 QuicStreamOffset settings_offset = header_stream_offset; | 1534 QuicStreamOffset settings_offset = header_stream_offset; |
| 1515 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1535 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 1516 2, &header_stream_offset, &settings_data)); | 1536 2, &header_stream_offset, &settings_data)); |
| 1517 // TLP 1 | 1537 // TLP 1 |
| 1518 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1538 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
| 1519 false, 0, request_data)); | 1539 false, 0, request_data)); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1598 params_.quic_connection_options.push_back(k5RTO); | 1618 params_.quic_connection_options.push_back(k5RTO); |
| 1599 | 1619 |
| 1600 // The request will initially go out over QUIC. | 1620 // The request will initially go out over QUIC. |
| 1601 MockQuicData quic_data; | 1621 MockQuicData quic_data; |
| 1602 QuicStreamOffset header_stream_offset = 0; | 1622 QuicStreamOffset header_stream_offset = 0; |
| 1603 SpdyPriority priority = | 1623 SpdyPriority priority = |
| 1604 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1624 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1605 | 1625 |
| 1606 std::string request_data; | 1626 std::string request_data; |
| 1607 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1627 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1608 1, kClientDataStreamId1, true, true, priority, | 1628 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 1609 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1629 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 1610 &request_data)); | 1630 &request_data)); |
| 1611 | 1631 |
| 1612 std::string settings_data; | 1632 std::string settings_data; |
| 1613 QuicStreamOffset settings_offset = header_stream_offset; | 1633 QuicStreamOffset settings_offset = header_stream_offset; |
| 1614 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1634 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 1615 2, &header_stream_offset, &settings_data)); | 1635 2, &header_stream_offset, &settings_data)); |
| 1616 | 1636 |
| 1617 quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1, | 1637 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 1618 QUIC_STREAM_CANCELLED)); | 1638 3, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 1619 // TLP 1 | 1639 // TLP 1 |
| 1620 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, | 1640 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, |
| 1621 false, 0, request_data)); | 1641 false, 0, request_data)); |
| 1622 // TLP 2 | 1642 // TLP 2 |
| 1623 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1643 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 1624 5, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1644 5, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 1625 // RTO 1 | 1645 // RTO 1 |
| 1626 quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1, | 1646 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 1627 QUIC_STREAM_CANCELLED)); | 1647 6, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 1628 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, | 1648 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, |
| 1629 false, 0, request_data)); | 1649 false, 0, request_data)); |
| 1630 // RTO 2 | 1650 // RTO 2 |
| 1631 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1651 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 1632 8, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1652 8, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 1633 quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1, | 1653 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 1634 QUIC_STREAM_CANCELLED)); | 1654 9, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 1635 // RTO 3 | 1655 // RTO 3 |
| 1636 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, | 1656 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, |
| 1637 false, 0, request_data)); | 1657 false, 0, request_data)); |
| 1638 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1658 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 1639 11, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1659 11, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 1640 // RTO 4 | 1660 // RTO 4 |
| 1641 quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1, | 1661 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 1642 QUIC_STREAM_CANCELLED)); | 1662 12, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 1643 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, | 1663 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, |
| 1644 false, 0, request_data)); | 1664 false, 0, request_data)); |
| 1645 // RTO 5 | 1665 // RTO 5 |
| 1646 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( | 1666 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( |
| 1647 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, | 1667 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, |
| 1648 "5 consecutive retransmission timeouts")); | 1668 "5 consecutive retransmission timeouts")); |
| 1649 | 1669 |
| 1650 quic_data.AddRead(ASYNC, OK); | 1670 quic_data.AddRead(ASYNC, OK); |
| 1651 quic_data.AddSocketDataToFactory(&socket_factory_); | 1671 quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1652 | 1672 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1697 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 1717 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
| 1698 } | 1718 } |
| 1699 | 1719 |
| 1700 // Verify that if a QUIC protocol error occurs after the handshake is confirmed | 1720 // Verify that if a QUIC protocol error occurs after the handshake is confirmed |
| 1701 // the request fails with QUIC_PROTOCOL_ERROR. | 1721 // the request fails with QUIC_PROTOCOL_ERROR. |
| 1702 TEST_P(QuicNetworkTransactionTest, ProtocolErrorAfterHandshakeConfirmed) { | 1722 TEST_P(QuicNetworkTransactionTest, ProtocolErrorAfterHandshakeConfirmed) { |
| 1703 // The request will initially go out over QUIC. | 1723 // The request will initially go out over QUIC. |
| 1704 MockQuicData quic_data; | 1724 MockQuicData quic_data; |
| 1705 QuicStreamOffset header_stream_offset = 0; | 1725 QuicStreamOffset header_stream_offset = 0; |
| 1706 quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1726 quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1707 1, kClientDataStreamId1, true, true, | 1727 1, GetNthClientInitiatedStreamId(0), true, true, |
| 1708 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1728 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1709 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 1729 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
| 1710 // Peer sending data from an non-existing stream causes this end to raise | 1730 // Peer sending data from an non-existing stream causes this end to raise |
| 1711 // error and close connection. | 1731 // error and close connection. |
| 1712 quic_data.AddRead( | 1732 quic_data.AddRead( |
| 1713 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 1733 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
| 1714 std::string quic_error_details = "Data for nonexistent stream"; | 1734 std::string quic_error_details = "Data for nonexistent stream"; |
| 1715 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 1735 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
| 1716 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 1736 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
| 1717 quic_error_details)); | 1737 quic_error_details)); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 params_.quic_idle_connection_timeout_seconds = 5; | 1786 params_.quic_idle_connection_timeout_seconds = 5; |
| 1767 | 1787 |
| 1768 // The request will initially go out over QUIC. | 1788 // The request will initially go out over QUIC. |
| 1769 MockQuicData quic_data; | 1789 MockQuicData quic_data; |
| 1770 QuicStreamOffset header_stream_offset = 0; | 1790 QuicStreamOffset header_stream_offset = 0; |
| 1771 SpdyPriority priority = | 1791 SpdyPriority priority = |
| 1772 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1792 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1773 | 1793 |
| 1774 std::string request_data; | 1794 std::string request_data; |
| 1775 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1795 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1776 1, kClientDataStreamId1, true, true, priority, | 1796 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 1777 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1797 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 1778 &request_data)); | 1798 &request_data)); |
| 1779 | 1799 |
| 1780 std::string settings_data; | 1800 std::string settings_data; |
| 1781 QuicStreamOffset settings_offset = header_stream_offset; | 1801 QuicStreamOffset settings_offset = header_stream_offset; |
| 1782 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1802 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 1783 2, &header_stream_offset, &settings_data)); | 1803 2, &header_stream_offset, &settings_data)); |
| 1784 // TLP 1 | 1804 // TLP 1 |
| 1785 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1805 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
| 1786 false, 0, request_data)); | 1806 false, 0, request_data)); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1883 params_.quic_idle_connection_timeout_seconds = 5; | 1903 params_.quic_idle_connection_timeout_seconds = 5; |
| 1884 | 1904 |
| 1885 // The request will initially go out over QUIC. | 1905 // The request will initially go out over QUIC. |
| 1886 MockQuicData quic_data; | 1906 MockQuicData quic_data; |
| 1887 QuicStreamOffset header_stream_offset = 0; | 1907 QuicStreamOffset header_stream_offset = 0; |
| 1888 SpdyPriority priority = | 1908 SpdyPriority priority = |
| 1889 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1909 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1890 | 1910 |
| 1891 std::string request_data; | 1911 std::string request_data; |
| 1892 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1912 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1893 1, kClientDataStreamId1, true, true, priority, | 1913 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 1894 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1914 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 1895 &request_data)); | 1915 &request_data)); |
| 1896 | 1916 |
| 1897 std::string settings_data; | 1917 std::string settings_data; |
| 1898 QuicStreamOffset settings_offset = header_stream_offset; | 1918 QuicStreamOffset settings_offset = header_stream_offset; |
| 1899 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1919 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 1900 2, &header_stream_offset, &settings_data)); | 1920 2, &header_stream_offset, &settings_data)); |
| 1901 // TLP 1 | 1921 // TLP 1 |
| 1902 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1922 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
| 1903 false, 0, request_data)); | 1923 false, 0, request_data)); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2003 params_.quic_idle_connection_timeout_seconds = 5; | 2023 params_.quic_idle_connection_timeout_seconds = 5; |
| 2004 | 2024 |
| 2005 // The request will initially go out over QUIC. | 2025 // The request will initially go out over QUIC. |
| 2006 MockQuicData quic_data; | 2026 MockQuicData quic_data; |
| 2007 QuicStreamOffset header_stream_offset = 0; | 2027 QuicStreamOffset header_stream_offset = 0; |
| 2008 SpdyPriority priority = | 2028 SpdyPriority priority = |
| 2009 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2029 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2010 | 2030 |
| 2011 std::string request_data; | 2031 std::string request_data; |
| 2012 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2032 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2013 1, kClientDataStreamId1, true, true, priority, | 2033 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 2014 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2034 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 2015 &request_data)); | 2035 &request_data)); |
| 2016 | 2036 |
| 2017 std::string settings_data; | 2037 std::string settings_data; |
| 2018 QuicStreamOffset settings_offset = header_stream_offset; | 2038 QuicStreamOffset settings_offset = header_stream_offset; |
| 2019 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2039 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 2020 2, &header_stream_offset, &settings_data)); | 2040 2, &header_stream_offset, &settings_data)); |
| 2021 | 2041 |
| 2022 quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2042 quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2023 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2043 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2044 GetResponseHeaders("200 OK"))); |
| 2024 // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1)); | 2045 // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1)); |
| 2025 quic_data.AddWrite(ConstructClientAckPacket( | 2046 quic_data.AddWrite(ConstructClientAckPacket( |
| 2026 3, 1, 1, 1, QuicTime::Delta::FromMilliseconds(25))); | 2047 3, 1, 1, 1, QuicTime::Delta::FromMilliseconds(25))); |
| 2027 | 2048 |
| 2028 // TLP 1 | 2049 // TLP 1 |
| 2029 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false, | 2050 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false, |
| 2030 false, 0, request_data)); | 2051 false, 0, request_data)); |
| 2031 // TLP 2 | 2052 // TLP 2 |
| 2032 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2053 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 2033 5, kHeadersStreamId, false, false, settings_offset, settings_data)); | 2054 5, kHeadersStreamId, false, false, settings_offset, settings_data)); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2114 params_.quic_connection_options.push_back(k5RTO); | 2135 params_.quic_connection_options.push_back(k5RTO); |
| 2115 | 2136 |
| 2116 // The request will initially go out over QUIC. | 2137 // The request will initially go out over QUIC. |
| 2117 MockQuicData quic_data; | 2138 MockQuicData quic_data; |
| 2118 QuicStreamOffset header_stream_offset = 0; | 2139 QuicStreamOffset header_stream_offset = 0; |
| 2119 SpdyPriority priority = | 2140 SpdyPriority priority = |
| 2120 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2141 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2121 | 2142 |
| 2122 std::string request_data; | 2143 std::string request_data; |
| 2123 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2144 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2124 1, kClientDataStreamId1, true, true, priority, | 2145 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 2125 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2146 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 2126 &request_data)); | 2147 &request_data)); |
| 2127 | 2148 |
| 2128 std::string settings_data; | 2149 std::string settings_data; |
| 2129 QuicStreamOffset settings_offset = header_stream_offset; | 2150 QuicStreamOffset settings_offset = header_stream_offset; |
| 2130 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2151 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 2131 2, &header_stream_offset, &settings_data)); | 2152 2, &header_stream_offset, &settings_data)); |
| 2132 // TLP 1 | 2153 // TLP 1 |
| 2133 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 2154 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
| 2134 false, 0, request_data)); | 2155 false, 0, request_data)); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2239 params_.quic_connection_options.push_back(k5RTO); | 2260 params_.quic_connection_options.push_back(k5RTO); |
| 2240 | 2261 |
| 2241 // The request will initially go out over QUIC. | 2262 // The request will initially go out over QUIC. |
| 2242 MockQuicData quic_data; | 2263 MockQuicData quic_data; |
| 2243 QuicStreamOffset header_stream_offset = 0; | 2264 QuicStreamOffset header_stream_offset = 0; |
| 2244 SpdyPriority priority = | 2265 SpdyPriority priority = |
| 2245 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2266 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2246 | 2267 |
| 2247 std::string request_data; | 2268 std::string request_data; |
| 2248 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2269 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2249 1, kClientDataStreamId1, true, true, priority, | 2270 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| 2250 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2271 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
| 2251 &request_data)); | 2272 &request_data)); |
| 2252 | 2273 |
| 2253 std::string settings_data; | 2274 std::string settings_data; |
| 2254 QuicStreamOffset settings_offset = header_stream_offset; | 2275 QuicStreamOffset settings_offset = header_stream_offset; |
| 2255 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2276 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
| 2256 2, &header_stream_offset, &settings_data)); | 2277 2, &header_stream_offset, &settings_data)); |
| 2257 | 2278 |
| 2258 quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1, | 2279 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 2259 QUIC_STREAM_CANCELLED)); | 2280 3, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 2260 // TLP 1 | 2281 // TLP 1 |
| 2261 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, | 2282 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, |
| 2262 false, 0, request_data)); | 2283 false, 0, request_data)); |
| 2263 // TLP 2 | 2284 // TLP 2 |
| 2264 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2285 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 2265 5, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2286 5, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 2266 // RTO 1 | 2287 // RTO 1 |
| 2267 quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1, | 2288 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 2268 QUIC_STREAM_CANCELLED)); | 2289 6, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 2269 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, | 2290 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, |
| 2270 false, 0, request_data)); | 2291 false, 0, request_data)); |
| 2271 // RTO 2 | 2292 // RTO 2 |
| 2272 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2293 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 2273 8, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2294 8, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 2274 quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1, | 2295 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 2275 QUIC_STREAM_CANCELLED)); | 2296 9, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 2276 // RTO 3 | 2297 // RTO 3 |
| 2277 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, | 2298 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, |
| 2278 false, 0, request_data)); | 2299 false, 0, request_data)); |
| 2279 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2300 quic_data.AddWrite(client_maker_.MakeDataPacket( |
| 2280 11, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2301 11, kHeadersStreamId, true, false, settings_offset, settings_data)); |
| 2281 // RTO 4 | 2302 // RTO 4 |
| 2282 quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1, | 2303 quic_data.AddWrite(client_maker_.MakeRstPacket( |
| 2283 QUIC_STREAM_CANCELLED)); | 2304 12, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 2284 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, | 2305 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, |
| 2285 false, 0, request_data)); | 2306 false, 0, request_data)); |
| 2286 // RTO 5 | 2307 // RTO 5 |
| 2287 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( | 2308 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( |
| 2288 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, | 2309 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, |
| 2289 "5 consecutive retransmission timeouts")); | 2310 "5 consecutive retransmission timeouts")); |
| 2290 | 2311 |
| 2291 quic_data.AddRead(ASYNC, OK); | 2312 quic_data.AddRead(ASYNC, OK); |
| 2292 quic_data.AddSocketDataToFactory(&socket_factory_); | 2313 quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2293 | 2314 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2343 // retried over TCP and the QUIC will be marked as broken. | 2364 // retried over TCP and the QUIC will be marked as broken. |
| 2344 TEST_P(QuicNetworkTransactionTest, | 2365 TEST_P(QuicNetworkTransactionTest, |
| 2345 ProtocolErrorAfterHandshakeConfirmedThenBroken) { | 2366 ProtocolErrorAfterHandshakeConfirmedThenBroken) { |
| 2346 params_.retry_without_alt_svc_on_quic_errors = true; | 2367 params_.retry_without_alt_svc_on_quic_errors = true; |
| 2347 params_.quic_idle_connection_timeout_seconds = 5; | 2368 params_.quic_idle_connection_timeout_seconds = 5; |
| 2348 | 2369 |
| 2349 // The request will initially go out over QUIC. | 2370 // The request will initially go out over QUIC. |
| 2350 MockQuicData quic_data; | 2371 MockQuicData quic_data; |
| 2351 QuicStreamOffset header_stream_offset = 0; | 2372 QuicStreamOffset header_stream_offset = 0; |
| 2352 quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2373 quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2353 1, kClientDataStreamId1, true, true, | 2374 1, GetNthClientInitiatedStreamId(0), true, true, |
| 2354 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2375 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 2355 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 2376 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
| 2356 // Peer sending data from an non-existing stream causes this end to raise | 2377 // Peer sending data from an non-existing stream causes this end to raise |
| 2357 // error and close connection. | 2378 // error and close connection. |
| 2358 quic_data.AddRead( | 2379 quic_data.AddRead( |
| 2359 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 2380 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
| 2360 std::string quic_error_details = "Data for nonexistent stream"; | 2381 std::string quic_error_details = "Data for nonexistent stream"; |
| 2361 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 2382 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
| 2362 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 2383 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
| 2363 quic_error_details)); | 2384 quic_error_details)); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2469 | 2490 |
| 2470 QuicStreamOffset request_header_offset = 0; | 2491 QuicStreamOffset request_header_offset = 0; |
| 2471 QuicStreamOffset response_header_offset = 0; | 2492 QuicStreamOffset response_header_offset = 0; |
| 2472 // First QUIC request data. | 2493 // First QUIC request data. |
| 2473 // Open a session to foo.example.org:443 using the first entry of the | 2494 // Open a session to foo.example.org:443 using the first entry of the |
| 2474 // alternative service list. | 2495 // alternative service list. |
| 2475 MockQuicData mock_quic_data; | 2496 MockQuicData mock_quic_data; |
| 2476 mock_quic_data.AddWrite( | 2497 mock_quic_data.AddWrite( |
| 2477 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2498 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 2478 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2499 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2479 2, kClientDataStreamId1, true, true, | 2500 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2480 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2501 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2481 | 2502 |
| 2482 std::string alt_svc_list = | 2503 std::string alt_svc_list = |
| 2483 "quic=\"mail.example.org:444\", quic=\"foo.example.org:443\", " | 2504 "quic=\"mail.example.org:444\", quic=\"foo.example.org:443\", " |
| 2484 "quic=\"bar.example.org:445\""; | 2505 "quic=\"bar.example.org:445\""; |
| 2485 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2506 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2486 1, kClientDataStreamId1, false, false, | 2507 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2487 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); | 2508 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); |
| 2488 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2509 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2489 false, true, 0, "hello!")); | 2510 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2490 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2511 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2491 | 2512 |
| 2492 // Second QUIC request data. | 2513 // Second QUIC request data. |
| 2493 // Connection pooling, using existing session, no need to include version | 2514 // Connection pooling, using existing session, no need to include version |
| 2494 // as version negotiation has been completed. | 2515 // as version negotiation has been completed. |
| 2495 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2516 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2496 4, kClientDataStreamId2, false, true, | 2517 4, GetNthClientInitiatedStreamId(1), false, true, |
| 2497 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2518 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2498 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2519 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2499 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2520 3, GetNthClientInitiatedStreamId(1), false, false, |
| 2500 &response_header_offset)); | 2521 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2501 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2522 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2502 false, true, 0, "hello!")); | 2523 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
| 2503 mock_quic_data.AddWrite( | 2524 mock_quic_data.AddWrite( |
| 2504 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2525 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
| 2505 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2526 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2506 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2527 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2507 | 2528 |
| 2508 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2529 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2509 | 2530 |
| 2510 AddHangingNonAlternateProtocolSocketData(); | 2531 AddHangingNonAlternateProtocolSocketData(); |
| 2511 CreateSession(); | 2532 CreateSession(); |
| 2512 | 2533 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2523 | 2544 |
| 2524 QuicStreamOffset request_header_offset = 0; | 2545 QuicStreamOffset request_header_offset = 0; |
| 2525 QuicStreamOffset response_header_offset = 0; | 2546 QuicStreamOffset response_header_offset = 0; |
| 2526 // First QUIC request data. | 2547 // First QUIC request data. |
| 2527 // Open a session to foo.example.org:443 using the first entry of the | 2548 // Open a session to foo.example.org:443 using the first entry of the |
| 2528 // alternative service list. | 2549 // alternative service list. |
| 2529 MockQuicData mock_quic_data; | 2550 MockQuicData mock_quic_data; |
| 2530 mock_quic_data.AddWrite( | 2551 mock_quic_data.AddWrite( |
| 2531 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2552 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 2532 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2553 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2533 2, kClientDataStreamId1, true, true, | 2554 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2534 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); | 2555 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); |
| 2535 | 2556 |
| 2536 std::string alt_svc_list; | 2557 std::string alt_svc_list; |
| 2537 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2558 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2538 1, kClientDataStreamId1, false, false, | 2559 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2539 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); | 2560 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); |
| 2540 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2561 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2541 false, true, 0, "hello!")); | 2562 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2542 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2563 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2543 | 2564 |
| 2544 // Second QUIC request data. | 2565 // Second QUIC request data. |
| 2545 // Connection pooling, using existing session, no need to include version | 2566 // Connection pooling, using existing session, no need to include version |
| 2546 // as version negotiation has been completed. | 2567 // as version negotiation has been completed. |
| 2547 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2568 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2548 4, kClientDataStreamId2, false, true, | 2569 4, GetNthClientInitiatedStreamId(1), false, true, |
| 2549 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); | 2570 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); |
| 2550 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2571 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2551 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2572 3, GetNthClientInitiatedStreamId(1), false, false, |
| 2552 &response_header_offset)); | 2573 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2553 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2574 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2554 false, true, 0, "hello!")); | 2575 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
| 2555 mock_quic_data.AddWrite( | 2576 mock_quic_data.AddWrite( |
| 2556 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2577 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
| 2557 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2578 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2558 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2579 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2559 | 2580 |
| 2560 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2581 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2561 | 2582 |
| 2562 AddHangingNonAlternateProtocolSocketData(); | 2583 AddHangingNonAlternateProtocolSocketData(); |
| 2563 | 2584 |
| 2564 TestProxyDelegate test_proxy_delegate; | 2585 TestProxyDelegate test_proxy_delegate; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2590 // even if alternative service destination is different. | 2611 // even if alternative service destination is different. |
| 2591 TEST_P(QuicNetworkTransactionTest, PoolByOrigin) { | 2612 TEST_P(QuicNetworkTransactionTest, PoolByOrigin) { |
| 2592 MockQuicData mock_quic_data; | 2613 MockQuicData mock_quic_data; |
| 2593 QuicStreamOffset request_header_offset(0); | 2614 QuicStreamOffset request_header_offset(0); |
| 2594 QuicStreamOffset response_header_offset(0); | 2615 QuicStreamOffset response_header_offset(0); |
| 2595 | 2616 |
| 2596 mock_quic_data.AddWrite( | 2617 mock_quic_data.AddWrite( |
| 2597 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2618 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 2598 // First request. | 2619 // First request. |
| 2599 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2620 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2600 2, kClientDataStreamId1, true, true, | 2621 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2601 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2622 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2602 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2623 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2603 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2624 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2604 &response_header_offset)); | 2625 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2605 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2626 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2606 false, true, 0, "hello!")); | 2627 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2607 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2628 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2608 | 2629 |
| 2609 // Second request. | 2630 // Second request. |
| 2610 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2631 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2611 4, kClientDataStreamId2, false, true, | 2632 4, GetNthClientInitiatedStreamId(1), false, true, |
| 2612 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2633 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2613 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2634 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2614 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2635 3, GetNthClientInitiatedStreamId(1), false, false, |
| 2615 &response_header_offset)); | 2636 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2616 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2637 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2617 false, true, 0, "hello!")); | 2638 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
| 2618 mock_quic_data.AddWrite( | 2639 mock_quic_data.AddWrite( |
| 2619 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2640 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
| 2620 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2641 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2621 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2642 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2622 | 2643 |
| 2623 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2644 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2624 | 2645 |
| 2625 AddHangingNonAlternateProtocolSocketData(); | 2646 AddHangingNonAlternateProtocolSocketData(); |
| 2626 AddHangingNonAlternateProtocolSocketData(); | 2647 AddHangingNonAlternateProtocolSocketData(); |
| 2627 | 2648 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2658 ASSERT_NE(origin1.host(), origin2.host()); | 2679 ASSERT_NE(origin1.host(), origin2.host()); |
| 2659 | 2680 |
| 2660 MockQuicData mock_quic_data; | 2681 MockQuicData mock_quic_data; |
| 2661 QuicStreamOffset request_header_offset(0); | 2682 QuicStreamOffset request_header_offset(0); |
| 2662 QuicStreamOffset response_header_offset(0); | 2683 QuicStreamOffset response_header_offset(0); |
| 2663 | 2684 |
| 2664 mock_quic_data.AddWrite( | 2685 mock_quic_data.AddWrite( |
| 2665 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2686 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 2666 // First request. | 2687 // First request. |
| 2667 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2688 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2668 2, kClientDataStreamId1, true, true, | 2689 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2669 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2690 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2670 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2691 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2671 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2692 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2672 &response_header_offset)); | 2693 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2673 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2694 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2674 false, true, 0, "hello!")); | 2695 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2675 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2696 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2676 | 2697 |
| 2677 // Second request. | 2698 // Second request. |
| 2678 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), | 2699 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), |
| 2679 Perspective::IS_CLIENT); | 2700 Perspective::IS_CLIENT); |
| 2680 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), | 2701 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), |
| 2681 Perspective::IS_SERVER); | 2702 Perspective::IS_SERVER); |
| 2682 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2703 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2683 4, kClientDataStreamId2, false, true, | 2704 4, GetNthClientInitiatedStreamId(1), false, true, |
| 2684 GetRequestHeaders("GET", "https", "/", &client_maker2), | 2705 GetRequestHeaders("GET", "https", "/", &client_maker2), |
| 2685 &request_header_offset)); | 2706 &request_header_offset)); |
| 2686 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2707 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2687 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2708 3, GetNthClientInitiatedStreamId(1), false, false, |
| 2688 &response_header_offset)); | 2709 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2689 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2710 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2690 false, true, 0, "hello!")); | 2711 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
| 2691 mock_quic_data.AddWrite( | 2712 mock_quic_data.AddWrite( |
| 2692 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2713 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
| 2693 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2714 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2694 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2715 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2695 | 2716 |
| 2696 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2717 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2697 | 2718 |
| 2698 AddHangingNonAlternateProtocolSocketData(); | 2719 AddHangingNonAlternateProtocolSocketData(); |
| 2699 AddHangingNonAlternateProtocolSocketData(); | 2720 AddHangingNonAlternateProtocolSocketData(); |
| 2700 | 2721 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2771 | 2792 |
| 2772 QuicTestPacketMaker client_maker(version_, 0, &clock_, "mail.example.org", | 2793 QuicTestPacketMaker client_maker(version_, 0, &clock_, "mail.example.org", |
| 2773 Perspective::IS_CLIENT); | 2794 Perspective::IS_CLIENT); |
| 2774 server_maker_.set_hostname("www.example.org"); | 2795 server_maker_.set_hostname("www.example.org"); |
| 2775 client_maker_.set_hostname("www.example.org"); | 2796 client_maker_.set_hostname("www.example.org"); |
| 2776 MockQuicData mock_quic_data; | 2797 MockQuicData mock_quic_data; |
| 2777 mock_quic_data.AddWrite( | 2798 mock_quic_data.AddWrite( |
| 2778 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2799 ConstructInitialSettingsPacket(1, &request_header_offset)); |
| 2779 // First QUIC request data. | 2800 // First QUIC request data. |
| 2780 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2801 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2781 2, kClientDataStreamId1, true, true, | 2802 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2782 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2803 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
| 2783 | 2804 |
| 2784 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2805 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2785 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2806 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2786 &response_header_offset)); | 2807 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2787 mock_quic_data.AddRead(ConstructServerDataPacket( | 2808 mock_quic_data.AddRead( |
| 2788 2, kClientDataStreamId1, false, true, 0, "hello from mail QUIC!")); | 2809 ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false, |
| 2810 true, 0, "hello from mail QUIC!")); |
| 2789 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2811 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2790 // Second QUIC request data. | 2812 // Second QUIC request data. |
| 2791 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2813 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2792 4, kClientDataStreamId2, false, true, | 2814 4, GetNthClientInitiatedStreamId(1), false, true, |
| 2793 GetRequestHeaders("GET", "https", "/", &client_maker), | 2815 GetRequestHeaders("GET", "https", "/", &client_maker), |
| 2794 &request_header_offset)); | 2816 &request_header_offset)); |
| 2795 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2817 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2796 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2818 3, GetNthClientInitiatedStreamId(1), false, false, |
| 2797 &response_header_offset)); | 2819 GetResponseHeaders("200 OK"), &response_header_offset)); |
| 2798 mock_quic_data.AddRead(ConstructServerDataPacket( | 2820 mock_quic_data.AddRead( |
| 2799 4, kClientDataStreamId2, false, true, 0, "hello from mail QUIC!")); | 2821 ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1), false, |
| 2822 true, 0, "hello from mail QUIC!")); |
| 2800 mock_quic_data.AddWrite( | 2823 mock_quic_data.AddWrite( |
| 2801 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2824 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
| 2802 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2825 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2803 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2826 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2804 | 2827 |
| 2805 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2828 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2806 | 2829 |
| 2807 AddHangingNonAlternateProtocolSocketData(); | 2830 AddHangingNonAlternateProtocolSocketData(); |
| 2808 CreateSession(); | 2831 CreateSession(); |
| 2809 | 2832 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2861 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2884 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 2862 0); | 2885 0); |
| 2863 socket_factory_.AddSocketDataProvider(&http_data); | 2886 socket_factory_.AddSocketDataProvider(&http_data); |
| 2864 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2887 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 2865 | 2888 |
| 2866 MockQuicData mock_quic_data; | 2889 MockQuicData mock_quic_data; |
| 2867 QuicStreamOffset header_stream_offset = 0; | 2890 QuicStreamOffset header_stream_offset = 0; |
| 2868 mock_quic_data.AddWrite( | 2891 mock_quic_data.AddWrite( |
| 2869 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2892 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 2870 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2893 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2871 2, kClientDataStreamId1, true, true, | 2894 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2872 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2895 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 2873 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2896 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2874 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2897 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2875 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2898 GetResponseHeaders("200 OK"))); |
| 2876 false, true, 0, "hello!")); | 2899 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2900 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2877 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2901 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2878 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2902 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2879 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2903 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2880 | 2904 |
| 2881 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2905 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2882 | 2906 |
| 2883 AddHangingNonAlternateProtocolSocketData(); | 2907 AddHangingNonAlternateProtocolSocketData(); |
| 2884 CreateSession(); | 2908 CreateSession(); |
| 2885 | 2909 |
| 2886 AlternativeService alternative_service(kProtoQUIC, | 2910 AlternativeService alternative_service(kProtoQUIC, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2912 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2936 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 2913 0); | 2937 0); |
| 2914 socket_factory_.AddSocketDataProvider(&http_data); | 2938 socket_factory_.AddSocketDataProvider(&http_data); |
| 2915 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2939 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 2916 | 2940 |
| 2917 MockQuicData mock_quic_data; | 2941 MockQuicData mock_quic_data; |
| 2918 QuicStreamOffset header_stream_offset = 0; | 2942 QuicStreamOffset header_stream_offset = 0; |
| 2919 mock_quic_data.AddWrite( | 2943 mock_quic_data.AddWrite( |
| 2920 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2944 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 2921 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2945 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2922 2, kClientDataStreamId1, true, true, | 2946 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2923 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2947 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 2924 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2948 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2925 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2949 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2926 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2950 GetResponseHeaders("200 OK"))); |
| 2927 false, true, 0, "hello!")); | 2951 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2952 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2928 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2953 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2929 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 2954 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
| 2930 | 2955 |
| 2931 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2956 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2932 | 2957 |
| 2933 AddHangingNonAlternateProtocolSocketData(); | 2958 AddHangingNonAlternateProtocolSocketData(); |
| 2934 CreateSession(); | 2959 CreateSession(); |
| 2935 | 2960 |
| 2936 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 2961 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
| 2937 SendRequestAndExpectHttpResponse("hello world"); | 2962 SendRequestAndExpectHttpResponse("hello world"); |
| 2938 } | 2963 } |
| 2939 | 2964 |
| 2940 // Tests that the connection to an HTTPS proxy is raced with an available | 2965 // Tests that the connection to an HTTPS proxy is raced with an available |
| 2941 // alternative proxy server. | 2966 // alternative proxy server. |
| 2942 TEST_P(QuicNetworkTransactionTest, QuicProxyWithRacing) { | 2967 TEST_P(QuicNetworkTransactionTest, QuicProxyWithRacing) { |
| 2943 base::HistogramTester histogram_tester; | 2968 base::HistogramTester histogram_tester; |
| 2944 proxy_service_ = | 2969 proxy_service_ = |
| 2945 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); | 2970 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); |
| 2946 | 2971 |
| 2947 MockQuicData mock_quic_data; | 2972 MockQuicData mock_quic_data; |
| 2948 QuicStreamOffset header_stream_offset = 0; | 2973 QuicStreamOffset header_stream_offset = 0; |
| 2949 mock_quic_data.AddWrite( | 2974 mock_quic_data.AddWrite( |
| 2950 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2975 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 2951 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2976 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2952 2, kClientDataStreamId1, true, true, | 2977 2, GetNthClientInitiatedStreamId(0), true, true, |
| 2953 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 2978 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
| 2954 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2979 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2955 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2980 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2956 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2981 GetResponseHeaders("200 OK"))); |
| 2957 false, true, 0, "hello!")); | 2982 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2983 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 2958 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2984 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 2959 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2985 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2960 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2986 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2961 | 2987 |
| 2962 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2988 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2963 | 2989 |
| 2964 // There is no need to set up main job, because no attempt will be made to | 2990 // There is no need to set up main job, because no attempt will be made to |
| 2965 // speak to the proxy over TCP. | 2991 // speak to the proxy over TCP. |
| 2966 request_.url = GURL("http://mail.example.org/"); | 2992 request_.url = GURL("http://mail.example.org/"); |
| 2967 TestProxyDelegate test_proxy_delegate; | 2993 TestProxyDelegate test_proxy_delegate; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3038 | 3064 |
| 3039 ASSERT_TRUE(http_data2.AllReadDataConsumed()); | 3065 ASSERT_TRUE(http_data2.AllReadDataConsumed()); |
| 3040 ASSERT_TRUE(http_data2.AllWriteDataConsumed()); | 3066 ASSERT_TRUE(http_data2.AllWriteDataConsumed()); |
| 3041 ASSERT_TRUE(quic_data.AllReadDataConsumed()); | 3067 ASSERT_TRUE(quic_data.AllReadDataConsumed()); |
| 3042 } | 3068 } |
| 3043 | 3069 |
| 3044 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) { | 3070 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) { |
| 3045 MockQuicData mock_quic_data; | 3071 MockQuicData mock_quic_data; |
| 3046 QuicStreamOffset header_stream_offset = 0; | 3072 QuicStreamOffset header_stream_offset = 0; |
| 3047 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3073 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3048 1, kClientDataStreamId1, true, true, | 3074 1, GetNthClientInitiatedStreamId(0), true, true, |
| 3049 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3075 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3050 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3076 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3051 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3077 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3052 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3078 GetResponseHeaders("200 OK"))); |
| 3053 false, true, 0, "hello!")); | 3079 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3080 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3054 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); | 3081 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
| 3055 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3082 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 3056 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3083 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 3057 | 3084 |
| 3058 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3085 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3059 | 3086 |
| 3060 // The non-alternate protocol job needs to hang in order to guarantee that | 3087 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3061 // the alternate-protocol job will "win". | 3088 // the alternate-protocol job will "win". |
| 3062 AddHangingNonAlternateProtocolSocketData(); | 3089 AddHangingNonAlternateProtocolSocketData(); |
| 3063 | 3090 |
| 3064 CreateSession(); | 3091 CreateSession(); |
| 3065 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 3092 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 3066 SendRequestAndExpectQuicResponse("hello!"); | 3093 SendRequestAndExpectQuicResponse("hello!"); |
| 3067 | 3094 |
| 3068 EXPECT_EQ(nullptr, | 3095 EXPECT_EQ(nullptr, |
| 3069 http_server_properties_.GetServerNetworkStats( | 3096 http_server_properties_.GetServerNetworkStats( |
| 3070 url::SchemeHostPort("https", request_.url.host(), 443))); | 3097 url::SchemeHostPort("https", request_.url.host(), 443))); |
| 3071 } | 3098 } |
| 3072 | 3099 |
| 3073 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { | 3100 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { |
| 3074 MockQuicData mock_quic_data; | 3101 MockQuicData mock_quic_data; |
| 3075 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3102 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3076 1, kClientDataStreamId1, true, true, | 3103 1, GetNthClientInitiatedStreamId(0), true, true, |
| 3077 GetRequestHeaders("GET", "https", "/"))); | 3104 GetRequestHeaders("GET", "https", "/"))); |
| 3078 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3105 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3079 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3106 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3080 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3107 GetResponseHeaders("200 OK"))); |
| 3081 false, true, 0, "hello!")); | 3108 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3109 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3082 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); | 3110 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
| 3083 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3111 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 3084 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3112 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 3085 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3113 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3086 | 3114 |
| 3087 // In order for a new QUIC session to be established via alternate-protocol | 3115 // In order for a new QUIC session to be established via alternate-protocol |
| 3088 // without racing an HTTP connection, we need the host resolution to happen | 3116 // without racing an HTTP connection, we need the host resolution to happen |
| 3089 // synchronously. | 3117 // synchronously. |
| 3090 host_resolver_.set_synchronous_mode(true); | 3118 host_resolver_.set_synchronous_mode(true); |
| 3091 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 3119 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3137 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 3165 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
| 3138 SendRequestAndExpectHttpResponse("hello world"); | 3166 SendRequestAndExpectHttpResponse("hello world"); |
| 3139 } | 3167 } |
| 3140 | 3168 |
| 3141 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { | 3169 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { |
| 3142 MockQuicData mock_quic_data; | 3170 MockQuicData mock_quic_data; |
| 3143 QuicStreamOffset header_stream_offset = 0; | 3171 QuicStreamOffset header_stream_offset = 0; |
| 3144 mock_quic_data.AddWrite( | 3172 mock_quic_data.AddWrite( |
| 3145 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3173 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3146 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3174 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3147 2, kClientDataStreamId1, true, true, | 3175 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3148 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3176 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3149 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3177 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3150 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3178 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3151 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3179 GetResponseHeaders("200 OK"))); |
| 3152 false, true, 0, "hello!")); | 3180 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3181 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3153 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3182 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 3154 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 3183 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 3155 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3184 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3156 | 3185 |
| 3157 // The non-alternate protocol job needs to hang in order to guarantee that | 3186 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3158 // the alternate-protocol job will "win". | 3187 // the alternate-protocol job will "win". |
| 3159 AddHangingNonAlternateProtocolSocketData(); | 3188 AddHangingNonAlternateProtocolSocketData(); |
| 3160 | 3189 |
| 3161 // In order for a new QUIC session to be established via alternate-protocol | 3190 // In order for a new QUIC session to be established via alternate-protocol |
| 3162 // without racing an HTTP connection, we need the host resolution to happen | 3191 // without racing an HTTP connection, we need the host resolution to happen |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3189 CheckResponseData(&trans, "hello!"); | 3218 CheckResponseData(&trans, "hello!"); |
| 3190 } | 3219 } |
| 3191 | 3220 |
| 3192 TEST_P(QuicNetworkTransactionTest, | 3221 TEST_P(QuicNetworkTransactionTest, |
| 3193 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { | 3222 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { |
| 3194 MockQuicData mock_quic_data; | 3223 MockQuicData mock_quic_data; |
| 3195 QuicStreamOffset header_stream_offset = 0; | 3224 QuicStreamOffset header_stream_offset = 0; |
| 3196 mock_quic_data.AddWrite( | 3225 mock_quic_data.AddWrite( |
| 3197 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3226 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3198 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3227 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3199 2, kClientDataStreamId1, true, true, | 3228 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3200 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3229 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3201 // Read a close connection packet with | 3230 // Read a close connection packet with |
| 3202 // QuicErrorCode: QUIC_CRYPTO_VERSION_NOT_SUPPORTED from the peer. | 3231 // QuicErrorCode: QUIC_CRYPTO_VERSION_NOT_SUPPORTED from the peer. |
| 3203 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(1)); | 3232 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(1)); |
| 3204 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3233 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3205 | 3234 |
| 3206 // The non-alternate protocol job needs to hang in order to guarantee that | 3235 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3207 // the alternate-protocol job will "win". | 3236 // the alternate-protocol job will "win". |
| 3208 AddHangingNonAlternateProtocolSocketData(); | 3237 AddHangingNonAlternateProtocolSocketData(); |
| 3209 | 3238 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3242 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); | 3271 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); |
| 3243 } | 3272 } |
| 3244 | 3273 |
| 3245 TEST_P(QuicNetworkTransactionTest, | 3274 TEST_P(QuicNetworkTransactionTest, |
| 3246 LogGranularQuicErrorCodeOnQuicProtocolErrorRemote) { | 3275 LogGranularQuicErrorCodeOnQuicProtocolErrorRemote) { |
| 3247 MockQuicData mock_quic_data; | 3276 MockQuicData mock_quic_data; |
| 3248 QuicStreamOffset header_stream_offset = 0; | 3277 QuicStreamOffset header_stream_offset = 0; |
| 3249 mock_quic_data.AddWrite( | 3278 mock_quic_data.AddWrite( |
| 3250 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3279 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3251 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3280 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3252 2, kClientDataStreamId1, true, true, | 3281 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3253 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3282 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3254 // Peer sending data from an non-existing stream causes this end to raise | 3283 // Peer sending data from an non-existing stream causes this end to raise |
| 3255 // error and close connection. | 3284 // error and close connection. |
| 3256 mock_quic_data.AddRead( | 3285 mock_quic_data.AddRead( |
| 3257 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 3286 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
| 3258 std::string quic_error_details = "Data for nonexistent stream"; | 3287 std::string quic_error_details = "Data for nonexistent stream"; |
| 3259 mock_quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 3288 mock_quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
| 3260 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 3289 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
| 3261 quic_error_details)); | 3290 quic_error_details)); |
| 3262 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3291 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3297 trans.PopulateNetErrorDetails(&details); | 3326 trans.PopulateNetErrorDetails(&details); |
| 3298 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); | 3327 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); |
| 3299 } | 3328 } |
| 3300 | 3329 |
| 3301 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { | 3330 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { |
| 3302 MockQuicData mock_quic_data; | 3331 MockQuicData mock_quic_data; |
| 3303 QuicStreamOffset header_stream_offset = 0; | 3332 QuicStreamOffset header_stream_offset = 0; |
| 3304 mock_quic_data.AddWrite( | 3333 mock_quic_data.AddWrite( |
| 3305 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3334 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3306 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3335 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3307 2, kClientDataStreamId1, true, true, | 3336 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3308 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3337 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3309 // Read the response headers, then a RST_STREAM frame. | 3338 // Read the response headers, then a RST_STREAM frame. |
| 3310 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3339 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3311 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3340 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3341 GetResponseHeaders("200 OK"))); |
| 3312 mock_quic_data.AddRead(ConstructServerRstPacket( | 3342 mock_quic_data.AddRead(ConstructServerRstPacket( |
| 3313 2, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 3343 2, false, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 3314 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3344 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 3315 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3345 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
| 3316 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3346 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3317 | 3347 |
| 3318 // The non-alternate protocol job needs to hang in order to guarantee that | 3348 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3319 // the alternate-protocol job will "win". | 3349 // the alternate-protocol job will "win". |
| 3320 AddHangingNonAlternateProtocolSocketData(); | 3350 AddHangingNonAlternateProtocolSocketData(); |
| 3321 | 3351 |
| 3322 // In order for a new QUIC session to be established via alternate-protocol | 3352 // In order for a new QUIC session to be established via alternate-protocol |
| 3323 // without racing an HTTP connection, we need the host resolution to happen | 3353 // without racing an HTTP connection, we need the host resolution to happen |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3359 std::string response_data; | 3389 std::string response_data; |
| 3360 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); | 3390 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); |
| 3361 } | 3391 } |
| 3362 | 3392 |
| 3363 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { | 3393 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { |
| 3364 MockQuicData mock_quic_data; | 3394 MockQuicData mock_quic_data; |
| 3365 QuicStreamOffset header_stream_offset = 0; | 3395 QuicStreamOffset header_stream_offset = 0; |
| 3366 mock_quic_data.AddWrite( | 3396 mock_quic_data.AddWrite( |
| 3367 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3397 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3368 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3398 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3369 2, kClientDataStreamId1, true, true, | 3399 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3370 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3400 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3371 mock_quic_data.AddRead(ConstructServerRstPacket( | 3401 mock_quic_data.AddRead(ConstructServerRstPacket( |
| 3372 1, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 3402 1, false, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
| 3373 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3403 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
| 3374 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3404 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3375 | 3405 |
| 3376 // The non-alternate protocol job needs to hang in order to guarantee that | 3406 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3377 // the alternate-protocol job will "win". | 3407 // the alternate-protocol job will "win". |
| 3378 AddHangingNonAlternateProtocolSocketData(); | 3408 AddHangingNonAlternateProtocolSocketData(); |
| 3379 | 3409 |
| 3380 // In order for a new QUIC session to be established via alternate-protocol | 3410 // In order for a new QUIC session to be established via alternate-protocol |
| 3381 // without racing an HTTP connection, we need the host resolution to happen | 3411 // without racing an HTTP connection, we need the host resolution to happen |
| 3382 // synchronously. Of course, even though QUIC *could* perform a 0-RTT | 3412 // synchronously. Of course, even though QUIC *could* perform a 0-RTT |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3581 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 3611 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
| 3582 SendRequestAndExpectHttpResponse("hello from http"); | 3612 SendRequestAndExpectHttpResponse("hello from http"); |
| 3583 | 3613 |
| 3584 ExpectBrokenAlternateProtocolMapping(); | 3614 ExpectBrokenAlternateProtocolMapping(); |
| 3585 } | 3615 } |
| 3586 | 3616 |
| 3587 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { | 3617 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { |
| 3588 MockQuicData mock_quic_data; | 3618 MockQuicData mock_quic_data; |
| 3589 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); | 3619 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); |
| 3590 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3620 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3591 1, kClientDataStreamId1, true, true, | 3621 1, GetNthClientInitiatedStreamId(0), true, true, |
| 3592 GetRequestHeaders("GET", "https", "/"))); | 3622 GetRequestHeaders("GET", "https", "/"))); |
| 3593 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); | 3623 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); |
| 3594 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3624 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3595 | 3625 |
| 3596 // When the QUIC connection fails, we will try the request again over HTTP. | 3626 // When the QUIC connection fails, we will try the request again over HTTP. |
| 3597 MockRead http_reads[] = { | 3627 MockRead http_reads[] = { |
| 3598 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 3628 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
| 3599 MockRead("hello world"), | 3629 MockRead("hello world"), |
| 3600 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 3630 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 3601 MockRead(ASYNC, OK)}; | 3631 MockRead(ASYNC, OK)}; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3647 TestAlternativeProxy(ERR_IO_PENDING); | 3677 TestAlternativeProxy(ERR_IO_PENDING); |
| 3648 } | 3678 } |
| 3649 TEST_P(QuicNetworkTransactionTest, BrokenAlternativeProxyAddressUnreachable) { | 3679 TEST_P(QuicNetworkTransactionTest, BrokenAlternativeProxyAddressUnreachable) { |
| 3650 TestAlternativeProxy(ERR_ADDRESS_UNREACHABLE); | 3680 TestAlternativeProxy(ERR_ADDRESS_UNREACHABLE); |
| 3651 } | 3681 } |
| 3652 | 3682 |
| 3653 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnectProxy) { | 3683 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnectProxy) { |
| 3654 MockQuicData mock_quic_data; | 3684 MockQuicData mock_quic_data; |
| 3655 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); | 3685 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); |
| 3656 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3686 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3657 1, kClientDataStreamId1, true, true, | 3687 1, GetNthClientInitiatedStreamId(0), true, true, |
| 3658 GetRequestHeaders("GET", "https", "/"))); | 3688 GetRequestHeaders("GET", "https", "/"))); |
| 3659 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); | 3689 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); |
| 3660 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3690 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3661 | 3691 |
| 3662 // When the QUIC connection fails, we will try the request again over HTTP. | 3692 // When the QUIC connection fails, we will try the request again over HTTP. |
| 3663 MockRead http_reads[] = { | 3693 MockRead http_reads[] = { |
| 3664 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 3694 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
| 3665 MockRead("hello world"), | 3695 MockRead("hello world"), |
| 3666 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 3696 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 3667 MockRead(ASYNC, OK)}; | 3697 MockRead(ASYNC, OK)}; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3701 | 3731 |
| 3702 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 3732 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
| 3703 client_maker_.set_hostname("www.example.org"); | 3733 client_maker_.set_hostname("www.example.org"); |
| 3704 EXPECT_FALSE( | 3734 EXPECT_FALSE( |
| 3705 test_socket_performance_watcher_factory_.rtt_notification_received()); | 3735 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 3706 MockQuicData mock_quic_data; | 3736 MockQuicData mock_quic_data; |
| 3707 QuicStreamOffset header_stream_offset = 0; | 3737 QuicStreamOffset header_stream_offset = 0; |
| 3708 mock_quic_data.AddWrite( | 3738 mock_quic_data.AddWrite( |
| 3709 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3739 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3710 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3740 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3711 2, kClientDataStreamId1, true, true, | 3741 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3712 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3742 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3713 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3743 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3714 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3744 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3715 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3745 GetResponseHeaders("200 OK"))); |
| 3716 false, true, 0, "hello!")); | 3746 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3747 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3717 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3748 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 3718 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3749 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
| 3719 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3750 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3720 | 3751 |
| 3721 request_.url = GURL("https://www.example.org:443"); | 3752 request_.url = GURL("https://www.example.org:443"); |
| 3722 AddHangingNonAlternateProtocolSocketData(); | 3753 AddHangingNonAlternateProtocolSocketData(); |
| 3723 CreateSession(); | 3754 CreateSession(); |
| 3724 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 3755 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 3725 SendRequestAndExpectQuicResponse("hello!"); | 3756 SendRequestAndExpectQuicResponse("hello!"); |
| 3726 EXPECT_TRUE( | 3757 EXPECT_TRUE( |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3815 | 3846 |
| 3816 params_.origins_to_force_quic_on.insert( | 3847 params_.origins_to_force_quic_on.insert( |
| 3817 HostPortPair::FromString("mail.example.org:443")); | 3848 HostPortPair::FromString("mail.example.org:443")); |
| 3818 params_.quic_migrate_sessions_on_network_change = true; | 3849 params_.quic_migrate_sessions_on_network_change = true; |
| 3819 | 3850 |
| 3820 MockQuicData socket_data; | 3851 MockQuicData socket_data; |
| 3821 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 3852 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 3822 QuicStreamOffset offset = 0; | 3853 QuicStreamOffset offset = 0; |
| 3823 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 3854 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
| 3824 socket_data.AddWrite(ConstructClientRequestHeadersPacket( | 3855 socket_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3825 2, kClientDataStreamId1, true, false, | 3856 2, GetNthClientInitiatedStreamId(0), true, false, |
| 3826 GetRequestHeaders("POST", "https", "/"), &offset)); | 3857 GetRequestHeaders("POST", "https", "/"), &offset)); |
| 3827 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); | 3858 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 3828 socket_data.AddSocketDataToFactory(&socket_factory_); | 3859 socket_data.AddSocketDataToFactory(&socket_factory_); |
| 3829 | 3860 |
| 3830 MockQuicData socket_data2; | 3861 MockQuicData socket_data2; |
| 3831 socket_data2.AddConnect(SYNCHRONOUS, ERR_ADDRESS_INVALID); | 3862 socket_data2.AddConnect(SYNCHRONOUS, ERR_ADDRESS_INVALID); |
| 3832 socket_data2.AddSocketDataToFactory(&socket_factory_); | 3863 socket_data2.AddSocketDataToFactory(&socket_factory_); |
| 3833 | 3864 |
| 3834 // The non-alternate protocol job needs to hang in order to guarantee that | 3865 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3835 // the alternate-protocol job will "win". | 3866 // the alternate-protocol job will "win". |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3859 // Adds coverage to catch regression such as https://crbug.com/622043 | 3890 // Adds coverage to catch regression such as https://crbug.com/622043 |
| 3860 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { | 3891 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
| 3861 params_.origins_to_force_quic_on.insert( | 3892 params_.origins_to_force_quic_on.insert( |
| 3862 HostPortPair::FromString("mail.example.org:443")); | 3893 HostPortPair::FromString("mail.example.org:443")); |
| 3863 | 3894 |
| 3864 MockQuicData mock_quic_data; | 3895 MockQuicData mock_quic_data; |
| 3865 QuicStreamOffset header_stream_offset = 0; | 3896 QuicStreamOffset header_stream_offset = 0; |
| 3866 mock_quic_data.AddWrite( | 3897 mock_quic_data.AddWrite( |
| 3867 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3898 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 3868 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3899 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3869 2, kClientDataStreamId1, true, true, | 3900 2, GetNthClientInitiatedStreamId(0), true, true, |
| 3870 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3901 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 3871 QuicStreamOffset server_header_offset = 0; | 3902 QuicStreamOffset server_header_offset = 0; |
| 3872 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 3903 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
| 3873 1, kClientDataStreamId1, kServerDataStreamId1, false, | 3904 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
| 3874 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 3905 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
| 3875 &server_maker_)); | 3906 &server_header_offset, &server_maker_)); |
| 3876 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3907 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3877 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 3908 2, GetNthClientInitiatedStreamId(0), false, false, |
| 3878 &server_header_offset)); | 3909 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 3879 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3910 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 3880 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3911 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3881 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 3912 3, GetNthServerInitiatedStreamId(0), false, false, |
| 3882 &server_header_offset)); | 3913 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 3883 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1, | 3914 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3884 false, true, 0, "hello!")); | 3915 4, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3885 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 3916 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
| 3886 mock_quic_data.AddRead(ConstructServerDataPacket( | 3917 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3887 5, kServerDataStreamId1, false, true, 0, "and hello!")); | 3918 5, GetNthServerInitiatedStreamId(0), false, true, 0, "and hello!")); |
| 3888 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 3919 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
| 3889 5, kServerDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); | 3920 5, GetNthServerInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
| 3890 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3921 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 3891 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3922 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 3892 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3923 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3893 | 3924 |
| 3894 // The non-alternate protocol job needs to hang in order to guarantee that | 3925 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3895 // the alternate-protocol job will "win". | 3926 // the alternate-protocol job will "win". |
| 3896 AddHangingNonAlternateProtocolSocketData(); | 3927 AddHangingNonAlternateProtocolSocketData(); |
| 3897 | 3928 |
| 3898 CreateSession(); | 3929 CreateSession(); |
| 3899 | 3930 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3918 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { | 3949 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { |
| 3919 params_.quic_force_hol_blocking = true; | 3950 params_.quic_force_hol_blocking = true; |
| 3920 params_.origins_to_force_quic_on.insert( | 3951 params_.origins_to_force_quic_on.insert( |
| 3921 HostPortPair::FromString("mail.example.org:443")); | 3952 HostPortPair::FromString("mail.example.org:443")); |
| 3922 | 3953 |
| 3923 MockQuicData mock_quic_data; | 3954 MockQuicData mock_quic_data; |
| 3924 | 3955 |
| 3925 QuicStreamOffset offset = 0; | 3956 QuicStreamOffset offset = 0; |
| 3926 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 3957 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
| 3927 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3958 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3928 2, kClientDataStreamId1, true, false, | 3959 2, GetNthClientInitiatedStreamId(0), true, false, |
| 3929 GetRequestHeaders("POST", "https", "/"), &offset)); | 3960 GetRequestHeaders("POST", "https", "/"), &offset)); |
| 3930 | 3961 |
| 3931 std::unique_ptr<QuicEncryptedPacket> packet; | 3962 std::unique_ptr<QuicEncryptedPacket> packet; |
| 3932 if (version_ == QUIC_VERSION_36) { | 3963 if (version_ == QUIC_VERSION_36) { |
| 3933 packet = ConstructClientForceHolDataPacket(3, kClientDataStreamId1, true, | 3964 packet = ConstructClientForceHolDataPacket( |
| 3934 true, &offset, "1"); | 3965 3, GetNthClientInitiatedStreamId(0), true, true, &offset, "1"); |
| 3935 } else { | 3966 } else { |
| 3936 packet = | 3967 packet = ConstructClientDataPacket(3, GetNthClientInitiatedStreamId(0), |
| 3937 ConstructClientDataPacket(3, kClientDataStreamId1, true, true, 0, "1"); | 3968 true, true, 0, "1"); |
| 3938 } | 3969 } |
| 3939 mock_quic_data.AddWrite(std::move(packet)); | 3970 mock_quic_data.AddWrite(std::move(packet)); |
| 3940 | 3971 |
| 3941 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3972 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 3942 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3973 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3974 GetResponseHeaders("200 OK"))); |
| 3943 | 3975 |
| 3944 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3976 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3945 false, true, 0, "hello!")); | 3977 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 3946 | 3978 |
| 3947 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 2, 1, 1)); | 3979 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 2, 1, 1)); |
| 3948 | 3980 |
| 3949 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3981 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 3950 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3982 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 3951 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3983 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3952 | 3984 |
| 3953 // The non-alternate protocol job needs to hang in order to guarantee that | 3985 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3954 // the alternate-protocol job will "win". | 3986 // the alternate-protocol job will "win". |
| 3955 AddHangingNonAlternateProtocolSocketData(); | 3987 AddHangingNonAlternateProtocolSocketData(); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4002 HostPortPair::FromString("mail.example.org:443")); | 4034 HostPortPair::FromString("mail.example.org:443")); |
| 4003 | 4035 |
| 4004 MockQuicData mock_quic_data; | 4036 MockQuicData mock_quic_data; |
| 4005 QuicStreamOffset header_stream_offset = 0; | 4037 QuicStreamOffset header_stream_offset = 0; |
| 4006 mock_quic_data.AddWrite( | 4038 mock_quic_data.AddWrite( |
| 4007 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4039 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4008 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4040 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
| 4009 headers["user-agent"] = ""; | 4041 headers["user-agent"] = ""; |
| 4010 headers["accept-encoding"] = "gzip, deflate"; | 4042 headers["accept-encoding"] = "gzip, deflate"; |
| 4011 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4043 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4012 2, kClientDataStreamId1, true, true, std::move(headers), | 4044 2, GetNthClientInitiatedStreamId(0), true, true, std::move(headers), |
| 4013 &header_stream_offset)); | 4045 &header_stream_offset)); |
| 4014 | 4046 |
| 4015 QuicStreamOffset expected_raw_header_response_size = 0; | 4047 QuicStreamOffset expected_raw_header_response_size = 0; |
| 4016 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4048 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4017 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4049 1, GetNthClientInitiatedStreamId(0), false, false, |
| 4018 &expected_raw_header_response_size)); | 4050 GetResponseHeaders("200 OK"), &expected_raw_header_response_size)); |
| 4019 | 4051 |
| 4020 mock_quic_data.AddRead(ConstructServerDataPacket( | 4052 mock_quic_data.AddRead( |
| 4021 2, kClientDataStreamId1, false, true, 0, "Main Resource Data")); | 4053 ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false, |
| 4054 true, 0, "Main Resource Data")); |
| 4022 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4055 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 4023 | 4056 |
| 4024 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4057 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 4025 | 4058 |
| 4026 CreateSession(); | 4059 CreateSession(); |
| 4027 | 4060 |
| 4028 TestDelegate delegate; | 4061 TestDelegate delegate; |
| 4029 QuicURLRequestContext quic_url_request_context(std::move(session_), | 4062 QuicURLRequestContext quic_url_request_context(std::move(session_), |
| 4030 &socket_factory_); | 4063 &socket_factory_); |
| 4031 | 4064 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 4060 HostPortPair::FromString("mail.example.org:443")); | 4093 HostPortPair::FromString("mail.example.org:443")); |
| 4061 | 4094 |
| 4062 MockQuicData mock_quic_data; | 4095 MockQuicData mock_quic_data; |
| 4063 QuicStreamOffset header_stream_offset = 0; | 4096 QuicStreamOffset header_stream_offset = 0; |
| 4064 mock_quic_data.AddWrite( | 4097 mock_quic_data.AddWrite( |
| 4065 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4098 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4066 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4099 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
| 4067 headers["user-agent"] = ""; | 4100 headers["user-agent"] = ""; |
| 4068 headers["accept-encoding"] = "gzip, deflate"; | 4101 headers["accept-encoding"] = "gzip, deflate"; |
| 4069 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4102 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4070 2, kClientDataStreamId1, true, true, std::move(headers), | 4103 2, GetNthClientInitiatedStreamId(0), true, true, std::move(headers), |
| 4071 &header_stream_offset)); | 4104 &header_stream_offset)); |
| 4072 | 4105 |
| 4073 QuicStreamOffset server_header_offset = 0; | 4106 QuicStreamOffset server_header_offset = 0; |
| 4074 QuicStreamOffset expected_raw_header_response_size = 0; | 4107 QuicStreamOffset expected_raw_header_response_size = 0; |
| 4075 | 4108 |
| 4076 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 4109 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
| 4077 1, kClientDataStreamId1, kServerDataStreamId1, false, | 4110 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
| 4078 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 4111 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
| 4079 &server_maker_)); | 4112 &server_header_offset, &server_maker_)); |
| 4080 | 4113 |
| 4081 expected_raw_header_response_size = server_header_offset; | 4114 expected_raw_header_response_size = server_header_offset; |
| 4082 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4115 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4083 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4116 2, GetNthClientInitiatedStreamId(0), false, false, |
| 4084 &server_header_offset)); | 4117 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 4085 expected_raw_header_response_size = | 4118 expected_raw_header_response_size = |
| 4086 server_header_offset - expected_raw_header_response_size; | 4119 server_header_offset - expected_raw_header_response_size; |
| 4087 | 4120 |
| 4088 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4121 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 4089 | 4122 |
| 4090 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4123 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4091 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4124 3, GetNthServerInitiatedStreamId(0), false, false, |
| 4092 &server_header_offset)); | 4125 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 4093 mock_quic_data.AddRead(ConstructServerDataPacket( | 4126 mock_quic_data.AddRead( |
| 4094 4, kServerDataStreamId1, false, true, 0, "Pushed Resource Data")); | 4127 ConstructServerDataPacket(4, GetNthServerInitiatedStreamId(0), false, |
| 4128 true, 0, "Pushed Resource Data")); |
| 4095 | 4129 |
| 4096 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 4130 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
| 4097 mock_quic_data.AddRead(ConstructServerDataPacket( | 4131 mock_quic_data.AddRead( |
| 4098 5, kClientDataStreamId1, false, true, 0, "Main Resource Data")); | 4132 ConstructServerDataPacket(5, GetNthClientInitiatedStreamId(0), false, |
| 4133 true, 0, "Main Resource Data")); |
| 4099 | 4134 |
| 4100 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(6)); | 4135 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(6)); |
| 4101 | 4136 |
| 4102 CreateSession(); | 4137 CreateSession(); |
| 4103 | 4138 |
| 4104 TestDelegate delegate; | 4139 TestDelegate delegate; |
| 4105 QuicURLRequestContext quic_url_request_context(std::move(session_), | 4140 QuicURLRequestContext quic_url_request_context(std::move(session_), |
| 4106 &socket_factory_); | 4141 &socket_factory_); |
| 4107 | 4142 |
| 4108 mock_quic_data.AddSocketDataToFactory( | 4143 mock_quic_data.AddSocketDataToFactory( |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4324 ASSERT_TRUE(response != nullptr); | 4359 ASSERT_TRUE(response != nullptr); |
| 4325 ASSERT_TRUE(response->headers.get() != nullptr); | 4360 ASSERT_TRUE(response->headers.get() != nullptr); |
| 4326 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 4361 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 4327 EXPECT_TRUE(response->was_fetched_via_spdy); | 4362 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 4328 EXPECT_TRUE(response->was_alpn_negotiated); | 4363 EXPECT_TRUE(response->was_alpn_negotiated); |
| 4329 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), | 4364 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), |
| 4330 response->connection_info); | 4365 response->connection_info); |
| 4331 EXPECT_EQ(443, response->socket_address.port()); | 4366 EXPECT_EQ(443, response->socket_address.port()); |
| 4332 } | 4367 } |
| 4333 | 4368 |
| 4369 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 4370 return test::GetNthClientInitiatedStreamId(version_, n); |
| 4371 } |
| 4372 |
| 4334 MockClock clock_; | 4373 MockClock clock_; |
| 4335 QuicVersion version_; | 4374 QuicVersion version_; |
| 4336 DestinationType destination_type_; | 4375 DestinationType destination_type_; |
| 4337 std::string origin1_; | 4376 std::string origin1_; |
| 4338 std::string origin2_; | 4377 std::string origin2_; |
| 4339 std::unique_ptr<HttpNetworkSession> session_; | 4378 std::unique_ptr<HttpNetworkSession> session_; |
| 4340 MockClientSocketFactory socket_factory_; | 4379 MockClientSocketFactory socket_factory_; |
| 4341 MockHostResolver host_resolver_; | 4380 MockHostResolver host_resolver_; |
| 4342 MockCertVerifier cert_verifier_; | 4381 MockCertVerifier cert_verifier_; |
| 4343 TransportSecurityState transport_security_state_; | 4382 TransportSecurityState transport_security_state_; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4430 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, | 4469 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, |
| 4431 Perspective::IS_SERVER); | 4470 Perspective::IS_SERVER); |
| 4432 | 4471 |
| 4433 QuicStreamOffset request_header_offset(0); | 4472 QuicStreamOffset request_header_offset(0); |
| 4434 QuicStreamOffset response_header_offset(0); | 4473 QuicStreamOffset response_header_offset(0); |
| 4435 | 4474 |
| 4436 MockQuicData mock_quic_data; | 4475 MockQuicData mock_quic_data; |
| 4437 mock_quic_data.AddWrite(ConstructInitialSettingsPacket( | 4476 mock_quic_data.AddWrite(ConstructInitialSettingsPacket( |
| 4438 1, &request_header_offset, &client_maker1)); | 4477 1, &request_header_offset, &client_maker1)); |
| 4439 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4478 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4440 2, kClientDataStreamId1, true, &request_header_offset, &client_maker1)); | 4479 2, GetNthClientInitiatedStreamId(0), true, &request_header_offset, |
| 4480 &client_maker1)); |
| 4441 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4481 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4442 1, kClientDataStreamId1, &response_header_offset, &server_maker1)); | 4482 1, GetNthClientInitiatedStreamId(0), &response_header_offset, |
| 4443 mock_quic_data.AddRead( | 4483 &server_maker1)); |
| 4444 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker1)); | 4484 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4485 2, GetNthClientInitiatedStreamId(0), &server_maker1)); |
| 4445 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); | 4486 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); |
| 4446 | 4487 |
| 4447 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, | 4488 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, |
| 4448 Perspective::IS_CLIENT); | 4489 Perspective::IS_CLIENT); |
| 4449 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, | 4490 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, |
| 4450 Perspective::IS_SERVER); | 4491 Perspective::IS_SERVER); |
| 4451 | 4492 |
| 4452 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4493 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4453 4, kClientDataStreamId2, false, &request_header_offset, &client_maker2)); | 4494 4, GetNthClientInitiatedStreamId(1), false, &request_header_offset, |
| 4495 &client_maker2)); |
| 4454 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4496 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4455 3, kClientDataStreamId2, &response_header_offset, &server_maker2)); | 4497 3, GetNthClientInitiatedStreamId(1), &response_header_offset, |
| 4456 mock_quic_data.AddRead( | 4498 &server_maker2)); |
| 4457 ConstructServerDataPacket(4, kClientDataStreamId2, &server_maker2)); | 4499 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4500 4, GetNthClientInitiatedStreamId(1), &server_maker2)); |
| 4458 mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker2)); | 4501 mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker2)); |
| 4459 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4502 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 4460 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4503 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 4461 | 4504 |
| 4462 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 4505 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 4463 | 4506 |
| 4464 AddHangingSocketData(); | 4507 AddHangingSocketData(); |
| 4465 AddHangingSocketData(); | 4508 AddHangingSocketData(); |
| 4466 | 4509 |
| 4467 SendRequestAndExpectQuicResponse(origin1_); | 4510 SendRequestAndExpectQuicResponse(origin1_); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4506 QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, | 4549 QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, |
| 4507 Perspective::IS_CLIENT); | 4550 Perspective::IS_CLIENT); |
| 4508 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, | 4551 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, |
| 4509 Perspective::IS_SERVER); | 4552 Perspective::IS_SERVER); |
| 4510 | 4553 |
| 4511 MockQuicData mock_quic_data1; | 4554 MockQuicData mock_quic_data1; |
| 4512 QuicStreamOffset header_stream_offset1 = 0; | 4555 QuicStreamOffset header_stream_offset1 = 0; |
| 4513 mock_quic_data1.AddWrite(ConstructInitialSettingsPacket( | 4556 mock_quic_data1.AddWrite(ConstructInitialSettingsPacket( |
| 4514 1, &header_stream_offset1, &client_maker1)); | 4557 1, &header_stream_offset1, &client_maker1)); |
| 4515 mock_quic_data1.AddWrite(ConstructClientRequestHeadersPacket( | 4558 mock_quic_data1.AddWrite(ConstructClientRequestHeadersPacket( |
| 4516 2, kClientDataStreamId1, true, &header_stream_offset1, &client_maker1)); | 4559 2, GetNthClientInitiatedStreamId(0), true, &header_stream_offset1, |
| 4560 &client_maker1)); |
| 4517 mock_quic_data1.AddRead(ConstructServerResponseHeadersPacket( | 4561 mock_quic_data1.AddRead(ConstructServerResponseHeadersPacket( |
| 4518 1, kClientDataStreamId1, &server_maker1)); | 4562 1, GetNthClientInitiatedStreamId(0), &server_maker1)); |
| 4519 mock_quic_data1.AddRead( | 4563 mock_quic_data1.AddRead(ConstructServerDataPacket( |
| 4520 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker1)); | 4564 2, GetNthClientInitiatedStreamId(0), &server_maker1)); |
| 4521 mock_quic_data1.AddWrite( | 4565 mock_quic_data1.AddWrite( |
| 4522 ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); | 4566 ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); |
| 4523 mock_quic_data1.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4567 mock_quic_data1.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 4524 mock_quic_data1.AddRead(ASYNC, 0); // EOF | 4568 mock_quic_data1.AddRead(ASYNC, 0); // EOF |
| 4525 | 4569 |
| 4526 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); | 4570 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); |
| 4527 | 4571 |
| 4528 AddHangingSocketData(); | 4572 AddHangingSocketData(); |
| 4529 | 4573 |
| 4530 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, | 4574 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, |
| 4531 Perspective::IS_CLIENT); | 4575 Perspective::IS_CLIENT); |
| 4532 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, | 4576 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, |
| 4533 Perspective::IS_SERVER); | 4577 Perspective::IS_SERVER); |
| 4534 | 4578 |
| 4535 MockQuicData mock_quic_data2; | 4579 MockQuicData mock_quic_data2; |
| 4536 QuicStreamOffset header_stream_offset2 = 0; | 4580 QuicStreamOffset header_stream_offset2 = 0; |
| 4537 mock_quic_data2.AddWrite(ConstructInitialSettingsPacket( | 4581 mock_quic_data2.AddWrite(ConstructInitialSettingsPacket( |
| 4538 1, &header_stream_offset2, &client_maker2)); | 4582 1, &header_stream_offset2, &client_maker2)); |
| 4539 mock_quic_data2.AddWrite(ConstructClientRequestHeadersPacket( | 4583 mock_quic_data2.AddWrite(ConstructClientRequestHeadersPacket( |
| 4540 2, kClientDataStreamId1, true, &header_stream_offset2, &client_maker2)); | 4584 2, GetNthClientInitiatedStreamId(0), true, &header_stream_offset2, |
| 4585 &client_maker2)); |
| 4541 mock_quic_data2.AddRead(ConstructServerResponseHeadersPacket( | 4586 mock_quic_data2.AddRead(ConstructServerResponseHeadersPacket( |
| 4542 1, kClientDataStreamId1, &server_maker2)); | 4587 1, GetNthClientInitiatedStreamId(0), &server_maker2)); |
| 4543 mock_quic_data2.AddRead( | 4588 mock_quic_data2.AddRead(ConstructServerDataPacket( |
| 4544 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker2)); | 4589 2, GetNthClientInitiatedStreamId(0), &server_maker2)); |
| 4545 mock_quic_data2.AddWrite( | 4590 mock_quic_data2.AddWrite( |
| 4546 ConstructClientAckPacket(3, 2, 1, 1, &client_maker2)); | 4591 ConstructClientAckPacket(3, 2, 1, 1, &client_maker2)); |
| 4547 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4592 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 4548 mock_quic_data2.AddRead(ASYNC, 0); // EOF | 4593 mock_quic_data2.AddRead(ASYNC, 0); // EOF |
| 4549 | 4594 |
| 4550 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 4595 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
| 4551 | 4596 |
| 4552 AddHangingSocketData(); | 4597 AddHangingSocketData(); |
| 4553 | 4598 |
| 4554 SendRequestAndExpectQuicResponse(origin1_); | 4599 SendRequestAndExpectQuicResponse(origin1_); |
| 4555 SendRequestAndExpectQuicResponse(origin2_); | 4600 SendRequestAndExpectQuicResponse(origin2_); |
| 4556 | 4601 |
| 4557 EXPECT_TRUE(AllDataConsumed()); | 4602 EXPECT_TRUE(AllDataConsumed()); |
| 4558 } | 4603 } |
| 4559 | 4604 |
| 4560 // crbug.com/705109 - this confirms that matching request with a body | 4605 // crbug.com/705109 - this confirms that matching request with a body |
| 4561 // triggers a crash (pre-fix). | 4606 // triggers a crash (pre-fix). |
| 4562 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { | 4607 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { |
| 4563 params_.origins_to_force_quic_on.insert( | 4608 params_.origins_to_force_quic_on.insert( |
| 4564 HostPortPair::FromString("mail.example.org:443")); | 4609 HostPortPair::FromString("mail.example.org:443")); |
| 4565 | 4610 |
| 4566 MockQuicData mock_quic_data; | 4611 MockQuicData mock_quic_data; |
| 4567 QuicStreamOffset header_stream_offset = 0; | 4612 QuicStreamOffset header_stream_offset = 0; |
| 4568 mock_quic_data.AddWrite( | 4613 mock_quic_data.AddWrite( |
| 4569 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4614 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4570 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4615 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4571 2, kClientDataStreamId1, true, true, | 4616 2, GetNthClientInitiatedStreamId(0), true, true, |
| 4572 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 4617 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 4573 QuicStreamOffset server_header_offset = 0; | 4618 QuicStreamOffset server_header_offset = 0; |
| 4574 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 4619 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
| 4575 1, kClientDataStreamId1, kServerDataStreamId1, false, | 4620 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
| 4576 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 4621 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
| 4577 &server_maker_)); | 4622 &server_header_offset, &server_maker_)); |
| 4578 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4623 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4579 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4624 2, GetNthClientInitiatedStreamId(0), false, false, |
| 4580 &server_header_offset)); | 4625 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 4581 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4626 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 4582 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4627 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4583 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4628 3, GetNthServerInitiatedStreamId(0), false, false, |
| 4584 &server_header_offset)); | 4629 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 4585 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1, | 4630 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4586 false, true, 0, "hello!")); | 4631 4, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 4587 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 4632 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
| 4588 mock_quic_data.AddRead(ConstructServerDataPacket( | 4633 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4589 5, kServerDataStreamId1, false, true, 0, "and hello!")); | 4634 5, GetNthServerInitiatedStreamId(0), false, true, 0, "and hello!")); |
| 4590 | 4635 |
| 4591 // Because the matching request has a body, we will see the push | 4636 // Because the matching request has a body, we will see the push |
| 4592 // stream get cancelled, and the matching request go out on the | 4637 // stream get cancelled, and the matching request go out on the |
| 4593 // wire. | 4638 // wire. |
| 4594 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 4639 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
| 4595 5, kServerDataStreamId1, QUIC_STREAM_CANCELLED, 5, 5, 1)); | 4640 5, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 5, 5, 1)); |
| 4596 const char kBody[] = "1"; | 4641 const char kBody[] = "1"; |
| 4597 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4642 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4598 6, kClientDataStreamId2, false, false, | 4643 6, GetNthClientInitiatedStreamId(1), false, false, |
| 4599 GetRequestHeaders("GET", "https", "/pushed.jpg"), &header_stream_offset)); | 4644 GetRequestHeaders("GET", "https", "/pushed.jpg"), &header_stream_offset)); |
| 4600 mock_quic_data.AddWrite(ConstructClientMultipleDataFramesPacket( | 4645 mock_quic_data.AddWrite(ConstructClientMultipleDataFramesPacket( |
| 4601 7, kClientDataStreamId2, false, true, {kBody}, 0)); | 4646 7, GetNthClientInitiatedStreamId(1), false, true, {kBody}, 0)); |
| 4602 | 4647 |
| 4603 // We see the same response as for the earlier pushed and cancelled | 4648 // We see the same response as for the earlier pushed and cancelled |
| 4604 // stream. | 4649 // stream. |
| 4605 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4650 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 4606 6, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 4651 6, GetNthClientInitiatedStreamId(1), false, false, |
| 4607 &server_header_offset)); | 4652 GetResponseHeaders("200 OK"), &server_header_offset)); |
| 4608 mock_quic_data.AddRead(ConstructServerDataPacket( | 4653 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4609 7, kClientDataStreamId2, false, true, 0, "and hello!")); | 4654 7, GetNthClientInitiatedStreamId(1), false, true, 0, "and hello!")); |
| 4610 | 4655 |
| 4611 mock_quic_data.AddWrite(ConstructClientAckPacket(8, 7, 6, 1)); | 4656 mock_quic_data.AddWrite(ConstructClientAckPacket(8, 7, 6, 1)); |
| 4612 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4657 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 4613 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4658 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 4614 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 4659 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 4615 | 4660 |
| 4616 // The non-alternate protocol job needs to hang in order to guarantee that | 4661 // The non-alternate protocol job needs to hang in order to guarantee that |
| 4617 // the alternate-protocol job will "win". | 4662 // the alternate-protocol job will "win". |
| 4618 AddHangingNonAlternateProtocolSocketData(); | 4663 AddHangingNonAlternateProtocolSocketData(); |
| 4619 | 4664 |
| 4620 CreateSession(); | 4665 CreateSession(); |
| 4621 | 4666 |
| 4622 // PUSH_PROMISE handling in the http layer gets exercised here. | 4667 // PUSH_PROMISE handling in the http layer gets exercised here. |
| 4623 SendRequestAndExpectQuicResponse("hello!"); | 4668 SendRequestAndExpectQuicResponse("hello!"); |
| 4624 | 4669 |
| 4625 request_.url = GURL("https://mail.example.org/pushed.jpg"); | 4670 request_.url = GURL("https://mail.example.org/pushed.jpg"); |
| 4626 ChunkedUploadDataStream upload_data(0); | 4671 ChunkedUploadDataStream upload_data(0); |
| 4627 upload_data.AppendData("1", 1, true); | 4672 upload_data.AppendData("1", 1, true); |
| 4628 request_.upload_data_stream = &upload_data; | 4673 request_.upload_data_stream = &upload_data; |
| 4629 SendRequestAndExpectQuicResponse("and hello!"); | 4674 SendRequestAndExpectQuicResponse("and hello!"); |
| 4630 } | 4675 } |
| 4631 | 4676 |
| 4632 } // namespace test | 4677 } // namespace test |
| 4633 } // namespace net | 4678 } // namespace net |
| OLD | NEW |