| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/chromium/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/chromium/bidirectional_stream_quic_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 namespace test { | 53 namespace test { |
| 54 | 54 |
| 55 namespace { | 55 namespace { |
| 56 | 56 |
| 57 const char kUploadData[] = "Really nifty data!"; | 57 const char kUploadData[] = "Really nifty data!"; |
| 58 const char kDefaultServerHostName[] = "www.google.com"; | 58 const char kDefaultServerHostName[] = "www.google.com"; |
| 59 const uint16_t kDefaultServerPort = 80; | 59 const uint16_t kDefaultServerPort = 80; |
| 60 // Size of the buffer to be allocated for each read. | 60 // Size of the buffer to be allocated for each read. |
| 61 const size_t kReadBufferSize = 4096; | 61 const size_t kReadBufferSize = 4096; |
| 62 | 62 |
| 63 enum DelegateMethod { |
| 64 kOnStreamReady, |
| 65 kOnHeadersReceived, |
| 66 kOnTrailersReceived, |
| 67 kOnDataRead, |
| 68 kOnDataSent, |
| 69 kOnFailed |
| 70 }; |
| 71 |
| 63 class TestDelegateBase : public BidirectionalStreamImpl::Delegate { | 72 class TestDelegateBase : public BidirectionalStreamImpl::Delegate { |
| 64 public: | 73 public: |
| 65 TestDelegateBase(IOBuffer* read_buf, int read_buf_len) | 74 TestDelegateBase(IOBuffer* read_buf, int read_buf_len) |
| 66 : TestDelegateBase(read_buf, | 75 : TestDelegateBase(read_buf, |
| 67 read_buf_len, | 76 read_buf_len, |
| 68 base::MakeUnique<base::Timer>(false, false)) {} | 77 base::MakeUnique<base::Timer>(false, false)) {} |
| 69 | 78 |
| 70 TestDelegateBase(IOBuffer* read_buf, | 79 TestDelegateBase(IOBuffer* read_buf, |
| 71 int read_buf_len, | 80 int read_buf_len, |
| 72 std::unique_ptr<base::Timer> timer) | 81 std::unique_ptr<base::Timer> timer) |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 | 180 |
| 172 void SendvData(const std::vector<scoped_refptr<IOBuffer>>& data, | 181 void SendvData(const std::vector<scoped_refptr<IOBuffer>>& data, |
| 173 const std::vector<int>& lengths, | 182 const std::vector<int>& lengths, |
| 174 bool end_of_stream) { | 183 bool end_of_stream) { |
| 175 not_expect_callback_ = true; | 184 not_expect_callback_ = true; |
| 176 stream_->SendvData(data, lengths, end_of_stream); | 185 stream_->SendvData(data, lengths, end_of_stream); |
| 177 not_expect_callback_ = false; | 186 not_expect_callback_ = false; |
| 178 } | 187 } |
| 179 | 188 |
| 180 // Waits until next Delegate callback. | 189 // Waits until next Delegate callback. |
| 181 void WaitUntilNextCallback() { | 190 void WaitUntilNextCallback(DelegateMethod method) { |
| 191 ASSERT_FALSE(on_failed_called_); |
| 192 bool is_ready = is_ready_; |
| 193 bool headers_received = !response_headers_.empty(); |
| 194 bool trailers_received = trailers_received_; |
| 195 int on_data_read_count = on_data_read_count_; |
| 196 int on_data_sent_count = on_data_sent_count_; |
| 197 |
| 182 loop_->Run(); | 198 loop_->Run(); |
| 183 loop_.reset(new base::RunLoop); | 199 loop_.reset(new base::RunLoop); |
| 200 |
| 201 EXPECT_EQ(method == kOnFailed, on_failed_called_); |
| 202 EXPECT_EQ(is_ready || (method == kOnStreamReady), is_ready_); |
| 203 EXPECT_EQ(headers_received || (method == kOnHeadersReceived), |
| 204 !response_headers_.empty()); |
| 205 EXPECT_EQ(trailers_received || (method == kOnTrailersReceived), |
| 206 trailers_received_); |
| 207 EXPECT_EQ(on_data_read_count + (method == kOnDataRead ? 1 : 0), |
| 208 on_data_read_count_); |
| 209 EXPECT_EQ(on_data_sent_count + (method == kOnDataSent ? 1 : 0), |
| 210 on_data_sent_count_); |
| 184 } | 211 } |
| 185 | 212 |
| 186 // Calls ReadData on the |stream_| and updates |data_received_|. | 213 // Calls ReadData on the |stream_| and updates |data_received_|. |
| 187 int ReadData(const CompletionCallback& callback) { | 214 int ReadData(const CompletionCallback& callback) { |
| 188 not_expect_callback_ = true; | 215 not_expect_callback_ = true; |
| 189 int rv = stream_->ReadData(read_buf_.get(), read_buf_len_); | 216 int rv = stream_->ReadData(read_buf_.get(), read_buf_len_); |
| 190 not_expect_callback_ = false; | 217 not_expect_callback_ = false; |
| 191 if (rv > 0) | 218 if (rv > 0) |
| 192 data_received_.append(read_buf_->data(), rv); | 219 data_received_.append(read_buf_->data(), rv); |
| 193 if (rv == ERR_IO_PENDING) | 220 if (rv == ERR_IO_PENDING) |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 759 request.method = "GET"; | 786 request.method = "GET"; |
| 760 request.url = GURL("http://www.google.com/"); | 787 request.url = GURL("http://www.google.com/"); |
| 761 request.end_stream_on_headers = true; | 788 request.end_stream_on_headers = true; |
| 762 request.priority = DEFAULT_PRIORITY; | 789 request.priority = DEFAULT_PRIORITY; |
| 763 | 790 |
| 764 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 791 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 765 std::unique_ptr<TestDelegateBase> delegate( | 792 std::unique_ptr<TestDelegateBase> delegate( |
| 766 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 793 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 767 delegate->set_trailers_expected(true); | 794 delegate->set_trailers_expected(true); |
| 768 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 795 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 769 delegate->WaitUntilNextCallback(); // OnStreamReady | 796 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 770 ConfirmHandshake(); | 797 ConfirmHandshake(); |
| 771 | 798 |
| 772 // Server acks the request. | 799 // Server acks the request. |
| 773 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 800 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 774 | 801 |
| 775 // Server sends the response headers. | 802 // Server sends the response headers. |
| 776 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 803 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 777 | 804 |
| 778 size_t spdy_response_headers_frame_length; | 805 size_t spdy_response_headers_frame_length; |
| 779 QuicStreamOffset offset = 0; | 806 QuicStreamOffset offset = 0; |
| 780 ProcessPacket(ConstructResponseHeadersPacket( | 807 ProcessPacket(ConstructResponseHeadersPacket( |
| 781 2, !kFin, std::move(response_headers), | 808 2, !kFin, std::move(response_headers), |
| 782 &spdy_response_headers_frame_length, &offset)); | 809 &spdy_response_headers_frame_length, &offset)); |
| 783 | 810 |
| 784 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 811 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 785 LoadTimingInfo load_timing_info; | 812 LoadTimingInfo load_timing_info; |
| 786 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); | 813 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); |
| 787 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); | 814 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); |
| 788 TestCompletionCallback cb; | 815 TestCompletionCallback cb; |
| 789 int rv = delegate->ReadData(cb.callback()); | 816 int rv = delegate->ReadData(cb.callback()); |
| 790 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 817 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 791 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 818 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 792 const char kResponseBody[] = "Hello world!"; | 819 const char kResponseBody[] = "Hello world!"; |
| 793 // Server sends data. | 820 // Server sends data. |
| 794 ProcessPacket( | 821 ProcessPacket( |
| 795 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 822 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 796 EXPECT_EQ(12, cb.WaitForResult()); | 823 EXPECT_EQ(12, cb.WaitForResult()); |
| 797 | 824 |
| 798 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 825 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 799 TestCompletionCallback cb2; | 826 TestCompletionCallback cb2; |
| 800 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsError(ERR_IO_PENDING)); | 827 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsError(ERR_IO_PENDING)); |
| 801 | 828 |
| 802 SpdyHeaderBlock trailers; | 829 SpdyHeaderBlock trailers; |
| 803 size_t spdy_trailers_frame_length; | 830 size_t spdy_trailers_frame_length; |
| 804 trailers["foo"] = "bar"; | 831 trailers["foo"] = "bar"; |
| 805 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 832 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 806 // Server sends trailers. | 833 // Server sends trailers. |
| 807 ProcessPacket(ConstructResponseTrailersPacket( | 834 ProcessPacket(ConstructResponseTrailersPacket( |
| 808 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 835 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 809 | 836 |
| 810 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 837 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 811 EXPECT_THAT(cb2.WaitForResult(), IsOk()); | 838 EXPECT_THAT(cb2.WaitForResult(), IsOk()); |
| 812 trailers.erase(kFinalOffsetHeaderKey); | 839 trailers.erase(kFinalOffsetHeaderKey); |
| 813 EXPECT_EQ(trailers, delegate->trailers()); | 840 EXPECT_EQ(trailers, delegate->trailers()); |
| 814 | 841 |
| 815 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsOk()); | 842 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsOk()); |
| 816 base::RunLoop().RunUntilIdle(); | 843 base::RunLoop().RunUntilIdle(); |
| 817 | 844 |
| 818 EXPECT_EQ(2, delegate->on_data_read_count()); | 845 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 819 EXPECT_EQ(0, delegate->on_data_sent_count()); | 846 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 820 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 847 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 std::unique_ptr<TestDelegateBase> delegate( | 894 std::unique_ptr<TestDelegateBase> delegate( |
| 868 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 895 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 869 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 896 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 870 | 897 |
| 871 // Start second request. | 898 // Start second request. |
| 872 scoped_refptr<IOBuffer> read_buffer2(new IOBuffer(kReadBufferSize)); | 899 scoped_refptr<IOBuffer> read_buffer2(new IOBuffer(kReadBufferSize)); |
| 873 std::unique_ptr<TestDelegateBase> delegate2( | 900 std::unique_ptr<TestDelegateBase> delegate2( |
| 874 new TestDelegateBase(read_buffer2.get(), kReadBufferSize)); | 901 new TestDelegateBase(read_buffer2.get(), kReadBufferSize)); |
| 875 delegate2->Start(&request, net_log().bound(), session()->CreateHandle()); | 902 delegate2->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 876 | 903 |
| 877 delegate->WaitUntilNextCallback(); // OnStreamReady | 904 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 878 delegate2->WaitUntilNextCallback(); // OnStreamReady | 905 delegate2->WaitUntilNextCallback(kOnStreamReady); |
| 879 | 906 |
| 880 ConfirmHandshake(); | 907 ConfirmHandshake(); |
| 881 // Server acks the request. | 908 // Server acks the request. |
| 882 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 909 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 883 | 910 |
| 884 // Server sends the response headers. | 911 // Server sends the response headers. |
| 885 offset = 0; | 912 offset = 0; |
| 886 ProcessPacket(ConstructResponseHeadersPacketInner( | 913 ProcessPacket(ConstructResponseHeadersPacketInner( |
| 887 2, GetNthClientInitiatedStreamId(0), kFin, | 914 2, GetNthClientInitiatedStreamId(0), kFin, |
| 888 ConstructResponseHeaders("200"), nullptr, &offset)); | 915 ConstructResponseHeaders("200"), nullptr, &offset)); |
| 889 | 916 |
| 890 ProcessPacket(ConstructResponseHeadersPacketInner( | 917 ProcessPacket(ConstructResponseHeadersPacketInner( |
| 891 3, GetNthClientInitiatedStreamId(1), kFin, | 918 3, GetNthClientInitiatedStreamId(1), kFin, |
| 892 ConstructResponseHeaders("200"), nullptr, &offset)); | 919 ConstructResponseHeaders("200"), nullptr, &offset)); |
| 893 | 920 |
| 894 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 921 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 895 delegate2->WaitUntilNextCallback(); // OnHeadersReceived | 922 delegate2->WaitUntilNextCallback(kOnHeadersReceived); |
| 896 | 923 |
| 897 LoadTimingInfo load_timing_info; | 924 LoadTimingInfo load_timing_info; |
| 898 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); | 925 EXPECT_TRUE(delegate->GetLoadTimingInfo(&load_timing_info)); |
| 899 LoadTimingInfo load_timing_info2; | 926 LoadTimingInfo load_timing_info2; |
| 900 EXPECT_TRUE(delegate2->GetLoadTimingInfo(&load_timing_info2)); | 927 EXPECT_TRUE(delegate2->GetLoadTimingInfo(&load_timing_info2)); |
| 901 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); | 928 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); |
| 902 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); | 929 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); |
| 903 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 930 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 904 EXPECT_EQ("200", delegate2->response_headers().find(":status")->second); | 931 EXPECT_EQ("200", delegate2->response_headers().find(":status")->second); |
| 905 // No response body. ReadData() should return OK synchronously. | 932 // No response body. ReadData() should return OK synchronously. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 request.end_stream_on_headers = false; | 967 request.end_stream_on_headers = false; |
| 941 request.priority = DEFAULT_PRIORITY; | 968 request.priority = DEFAULT_PRIORITY; |
| 942 | 969 |
| 943 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 970 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 944 std::unique_ptr<TestDelegateBase> delegate( | 971 std::unique_ptr<TestDelegateBase> delegate( |
| 945 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 972 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 946 delegate->DoNotSendRequestHeadersAutomatically(); | 973 delegate->DoNotSendRequestHeadersAutomatically(); |
| 947 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 974 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 948 EXPECT_FALSE(delegate->is_ready()); | 975 EXPECT_FALSE(delegate->is_ready()); |
| 949 ConfirmHandshake(); | 976 ConfirmHandshake(); |
| 950 delegate->WaitUntilNextCallback(); // OnStreamReady | 977 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 951 EXPECT_TRUE(delegate->is_ready()); | 978 EXPECT_TRUE(delegate->is_ready()); |
| 952 | 979 |
| 953 // Sends request headers separately, which causes them to be sent in a | 980 // Sends request headers separately, which causes them to be sent in a |
| 954 // separate packet. | 981 // separate packet. |
| 955 delegate->SendRequestHeaders(); | 982 delegate->SendRequestHeaders(); |
| 956 // Send a Data packet. | 983 // Send a Data packet. |
| 957 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 984 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 958 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 985 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 959 | 986 |
| 960 std::vector<int> lengths = {buf1->size(), buf2->size()}; | 987 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| 961 delegate->SendvData({buf1, buf2}, lengths, !kFin); | 988 delegate->SendvData({buf1, buf2}, lengths, !kFin); |
| 962 delegate->WaitUntilNextCallback(); // OnDataSent | 989 delegate->WaitUntilNextCallback(kOnDataSent); |
| 963 | 990 |
| 964 // Server acks the request. | 991 // Server acks the request. |
| 965 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 992 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 966 | 993 |
| 967 // Server sends the response headers. | 994 // Server sends the response headers. |
| 968 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 995 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 969 size_t spdy_response_headers_frame_length; | 996 size_t spdy_response_headers_frame_length; |
| 970 QuicStreamOffset offset = 0; | 997 QuicStreamOffset offset = 0; |
| 971 ProcessPacket(ConstructResponseHeadersPacket( | 998 ProcessPacket(ConstructResponseHeadersPacket( |
| 972 2, !kFin, std::move(response_headers), | 999 2, !kFin, std::move(response_headers), |
| 973 &spdy_response_headers_frame_length, &offset)); | 1000 &spdy_response_headers_frame_length, &offset)); |
| 974 | 1001 |
| 975 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1002 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 976 TestCompletionCallback cb; | 1003 TestCompletionCallback cb; |
| 977 int rv = delegate->ReadData(cb.callback()); | 1004 int rv = delegate->ReadData(cb.callback()); |
| 978 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1005 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 979 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1006 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 980 const char kResponseBody[] = "Hello world!"; | 1007 const char kResponseBody[] = "Hello world!"; |
| 981 // Server sends data. | 1008 // Server sends data. |
| 982 ProcessPacket( | 1009 ProcessPacket( |
| 983 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1010 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 984 | 1011 |
| 985 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1012 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 986 | 1013 |
| 987 // Send a second Data packet. | 1014 // Send a second Data packet. |
| 988 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); | 1015 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); |
| 989 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); | 1016 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); |
| 990 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); | 1017 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); |
| 991 | 1018 |
| 992 delegate->SendvData({buf3, buf4, buf5}, | 1019 delegate->SendvData({buf3, buf4, buf5}, |
| 993 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 1020 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 994 delegate->WaitUntilNextCallback(); // OnDataSent | 1021 delegate->WaitUntilNextCallback(kOnDataSent); |
| 995 | 1022 |
| 996 size_t spdy_trailers_frame_length; | 1023 size_t spdy_trailers_frame_length; |
| 997 SpdyHeaderBlock trailers; | 1024 SpdyHeaderBlock trailers; |
| 998 trailers["foo"] = "bar"; | 1025 trailers["foo"] = "bar"; |
| 999 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1026 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1000 // Server sends trailers. | 1027 // Server sends trailers. |
| 1001 ProcessPacket(ConstructResponseTrailersPacket( | 1028 ProcessPacket(ConstructResponseTrailersPacket( |
| 1002 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1029 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1003 | 1030 |
| 1004 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1031 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 1005 trailers.erase(kFinalOffsetHeaderKey); | 1032 trailers.erase(kFinalOffsetHeaderKey); |
| 1006 EXPECT_EQ(trailers, delegate->trailers()); | 1033 EXPECT_EQ(trailers, delegate->trailers()); |
| 1007 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); | 1034 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1008 | 1035 |
| 1009 EXPECT_EQ(1, delegate->on_data_read_count()); | 1036 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1010 EXPECT_EQ(2, delegate->on_data_sent_count()); | 1037 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 1011 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 1038 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| 1012 EXPECT_EQ( | 1039 EXPECT_EQ( |
| 1013 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + | 1040 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |
| 1014 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + | 1041 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1046 request.url = GURL("http://www.google.com/"); | 1073 request.url = GURL("http://www.google.com/"); |
| 1047 request.end_stream_on_headers = false; | 1074 request.end_stream_on_headers = false; |
| 1048 request.priority = DEFAULT_PRIORITY; | 1075 request.priority = DEFAULT_PRIORITY; |
| 1049 | 1076 |
| 1050 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1077 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1051 std::unique_ptr<TestDelegateBase> delegate( | 1078 std::unique_ptr<TestDelegateBase> delegate( |
| 1052 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1079 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1053 delegate->DoNotSendRequestHeadersAutomatically(); | 1080 delegate->DoNotSendRequestHeadersAutomatically(); |
| 1054 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1081 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1055 ConfirmHandshake(); | 1082 ConfirmHandshake(); |
| 1056 delegate->WaitUntilNextCallback(); // OnStreamReady | 1083 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1057 | 1084 |
| 1058 // Send a Data packet. | 1085 // Send a Data packet. |
| 1059 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 1086 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 1060 | 1087 |
| 1061 delegate->SendData(buf1, buf1->size(), false); | 1088 delegate->SendData(buf1, buf1->size(), false); |
| 1062 delegate->WaitUntilNextCallback(); // OnDataSent | 1089 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1063 | 1090 |
| 1064 // Server acks the request. | 1091 // Server acks the request. |
| 1065 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1092 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1066 | 1093 |
| 1067 // Server sends the response headers. | 1094 // Server sends the response headers. |
| 1068 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1095 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1069 size_t spdy_response_headers_frame_length; | 1096 size_t spdy_response_headers_frame_length; |
| 1070 QuicStreamOffset offset = 0; | 1097 QuicStreamOffset offset = 0; |
| 1071 ProcessPacket(ConstructResponseHeadersPacket( | 1098 ProcessPacket(ConstructResponseHeadersPacket( |
| 1072 2, !kFin, std::move(response_headers), | 1099 2, !kFin, std::move(response_headers), |
| 1073 &spdy_response_headers_frame_length, &offset)); | 1100 &spdy_response_headers_frame_length, &offset)); |
| 1074 | 1101 |
| 1075 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1102 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1076 TestCompletionCallback cb; | 1103 TestCompletionCallback cb; |
| 1077 int rv = delegate->ReadData(cb.callback()); | 1104 int rv = delegate->ReadData(cb.callback()); |
| 1078 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1105 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1079 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1106 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1080 const char kResponseBody[] = "Hello world!"; | 1107 const char kResponseBody[] = "Hello world!"; |
| 1081 // Server sends data. | 1108 // Server sends data. |
| 1082 ProcessPacket( | 1109 ProcessPacket( |
| 1083 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1110 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1084 | 1111 |
| 1085 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1112 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1086 | 1113 |
| 1087 // Send a second Data packet. | 1114 // Send a second Data packet. |
| 1088 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 1115 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 1089 | 1116 |
| 1090 delegate->SendData(buf2, buf2->size(), true); | 1117 delegate->SendData(buf2, buf2->size(), true); |
| 1091 delegate->WaitUntilNextCallback(); // OnDataSent | 1118 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1092 | 1119 |
| 1093 size_t spdy_trailers_frame_length; | 1120 size_t spdy_trailers_frame_length; |
| 1094 SpdyHeaderBlock trailers; | 1121 SpdyHeaderBlock trailers; |
| 1095 trailers["foo"] = "bar"; | 1122 trailers["foo"] = "bar"; |
| 1096 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1123 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1097 // Server sends trailers. | 1124 // Server sends trailers. |
| 1098 ProcessPacket(ConstructResponseTrailersPacket( | 1125 ProcessPacket(ConstructResponseTrailersPacket( |
| 1099 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1126 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1100 | 1127 |
| 1101 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1128 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 1102 trailers.erase(kFinalOffsetHeaderKey); | 1129 trailers.erase(kFinalOffsetHeaderKey); |
| 1103 EXPECT_EQ(trailers, delegate->trailers()); | 1130 EXPECT_EQ(trailers, delegate->trailers()); |
| 1104 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); | 1131 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1105 | 1132 |
| 1106 EXPECT_EQ(1, delegate->on_data_read_count()); | 1133 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1107 EXPECT_EQ(2, delegate->on_data_sent_count()); | 1134 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 1108 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 1135 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| 1109 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1136 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1110 strlen(kBody1) + strlen(kBody2)), | 1137 strlen(kBody1) + strlen(kBody2)), |
| 1111 delegate->GetTotalSentBytes()); | 1138 delegate->GetTotalSentBytes()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1145 request.url = GURL("http://www.google.com/"); | 1172 request.url = GURL("http://www.google.com/"); |
| 1146 request.end_stream_on_headers = false; | 1173 request.end_stream_on_headers = false; |
| 1147 request.priority = DEFAULT_PRIORITY; | 1174 request.priority = DEFAULT_PRIORITY; |
| 1148 | 1175 |
| 1149 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1176 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1150 std::unique_ptr<TestDelegateBase> delegate( | 1177 std::unique_ptr<TestDelegateBase> delegate( |
| 1151 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1178 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1152 delegate->DoNotSendRequestHeadersAutomatically(); | 1179 delegate->DoNotSendRequestHeadersAutomatically(); |
| 1153 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1180 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1154 ConfirmHandshake(); | 1181 ConfirmHandshake(); |
| 1155 delegate->WaitUntilNextCallback(); // OnStreamReady | 1182 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1156 | 1183 |
| 1157 // Send a Data packet. | 1184 // Send a Data packet. |
| 1158 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 1185 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 1159 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 1186 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 1160 | 1187 |
| 1161 std::vector<int> lengths = {buf1->size(), buf2->size()}; | 1188 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| 1162 delegate->SendvData({buf1, buf2}, lengths, !kFin); | 1189 delegate->SendvData({buf1, buf2}, lengths, !kFin); |
| 1163 delegate->WaitUntilNextCallback(); // OnDataSent | 1190 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1164 | 1191 |
| 1165 // Server acks the request. | 1192 // Server acks the request. |
| 1166 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1193 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1167 | 1194 |
| 1168 // Server sends the response headers. | 1195 // Server sends the response headers. |
| 1169 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1196 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1170 size_t spdy_response_headers_frame_length; | 1197 size_t spdy_response_headers_frame_length; |
| 1171 QuicStreamOffset offset = 0; | 1198 QuicStreamOffset offset = 0; |
| 1172 ProcessPacket(ConstructResponseHeadersPacket( | 1199 ProcessPacket(ConstructResponseHeadersPacket( |
| 1173 2, !kFin, std::move(response_headers), | 1200 2, !kFin, std::move(response_headers), |
| 1174 &spdy_response_headers_frame_length, &offset)); | 1201 &spdy_response_headers_frame_length, &offset)); |
| 1175 | 1202 |
| 1176 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1203 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1177 TestCompletionCallback cb; | 1204 TestCompletionCallback cb; |
| 1178 int rv = delegate->ReadData(cb.callback()); | 1205 int rv = delegate->ReadData(cb.callback()); |
| 1179 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1206 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1180 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1207 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1181 const char kResponseBody[] = "Hello world!"; | 1208 const char kResponseBody[] = "Hello world!"; |
| 1182 // Server sends data. | 1209 // Server sends data. |
| 1183 ProcessPacket( | 1210 ProcessPacket( |
| 1184 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1211 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1185 | 1212 |
| 1186 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1213 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1187 | 1214 |
| 1188 // Send a second Data packet. | 1215 // Send a second Data packet. |
| 1189 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); | 1216 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); |
| 1190 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); | 1217 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); |
| 1191 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); | 1218 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); |
| 1192 | 1219 |
| 1193 delegate->SendvData({buf3, buf4, buf5}, | 1220 delegate->SendvData({buf3, buf4, buf5}, |
| 1194 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 1221 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 1195 delegate->WaitUntilNextCallback(); // OnDataSent | 1222 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1196 | 1223 |
| 1197 size_t spdy_trailers_frame_length; | 1224 size_t spdy_trailers_frame_length; |
| 1198 SpdyHeaderBlock trailers; | 1225 SpdyHeaderBlock trailers; |
| 1199 trailers["foo"] = "bar"; | 1226 trailers["foo"] = "bar"; |
| 1200 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1227 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1201 // Server sends trailers. | 1228 // Server sends trailers. |
| 1202 ProcessPacket(ConstructResponseTrailersPacket( | 1229 ProcessPacket(ConstructResponseTrailersPacket( |
| 1203 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1230 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1204 | 1231 |
| 1205 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1232 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 1206 trailers.erase(kFinalOffsetHeaderKey); | 1233 trailers.erase(kFinalOffsetHeaderKey); |
| 1207 EXPECT_EQ(trailers, delegate->trailers()); | 1234 EXPECT_EQ(trailers, delegate->trailers()); |
| 1208 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); | 1235 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1209 | 1236 |
| 1210 EXPECT_EQ(1, delegate->on_data_read_count()); | 1237 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1211 EXPECT_EQ(2, delegate->on_data_sent_count()); | 1238 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 1212 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 1239 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| 1213 EXPECT_EQ( | 1240 EXPECT_EQ( |
| 1214 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + | 1241 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |
| 1215 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + | 1242 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1239 request.method = "POST"; | 1266 request.method = "POST"; |
| 1240 request.url = GURL("http://www.google.com/"); | 1267 request.url = GURL("http://www.google.com/"); |
| 1241 request.end_stream_on_headers = false; | 1268 request.end_stream_on_headers = false; |
| 1242 request.priority = DEFAULT_PRIORITY; | 1269 request.priority = DEFAULT_PRIORITY; |
| 1243 | 1270 |
| 1244 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1271 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1245 std::unique_ptr<TestDelegateBase> delegate( | 1272 std::unique_ptr<TestDelegateBase> delegate( |
| 1246 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1273 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1247 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1274 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1248 ConfirmHandshake(); | 1275 ConfirmHandshake(); |
| 1249 delegate->WaitUntilNextCallback(); // OnStreamReady | 1276 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1250 | 1277 |
| 1251 // Send a DATA frame. | 1278 // Send a DATA frame. |
| 1252 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1279 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1253 | 1280 |
| 1254 delegate->SendData(buf, buf->size(), true); | 1281 delegate->SendData(buf, buf->size(), true); |
| 1255 delegate->WaitUntilNextCallback(); // OnDataSent | 1282 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1256 | 1283 |
| 1257 // Server acks the request. | 1284 // Server acks the request. |
| 1258 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1285 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1259 | 1286 |
| 1260 // Server sends the response headers. | 1287 // Server sends the response headers. |
| 1261 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1288 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1262 size_t spdy_response_headers_frame_length; | 1289 size_t spdy_response_headers_frame_length; |
| 1263 QuicStreamOffset offset = 0; | 1290 QuicStreamOffset offset = 0; |
| 1264 ProcessPacket(ConstructResponseHeadersPacket( | 1291 ProcessPacket(ConstructResponseHeadersPacket( |
| 1265 2, !kFin, std::move(response_headers), | 1292 2, !kFin, std::move(response_headers), |
| 1266 &spdy_response_headers_frame_length, &offset)); | 1293 &spdy_response_headers_frame_length, &offset)); |
| 1267 | 1294 |
| 1268 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1295 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1269 TestCompletionCallback cb; | 1296 TestCompletionCallback cb; |
| 1270 int rv = delegate->ReadData(cb.callback()); | 1297 int rv = delegate->ReadData(cb.callback()); |
| 1271 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1298 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1272 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1299 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1273 const char kResponseBody[] = "Hello world!"; | 1300 const char kResponseBody[] = "Hello world!"; |
| 1274 // Server sends data. | 1301 // Server sends data. |
| 1275 ProcessPacket( | 1302 ProcessPacket( |
| 1276 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1303 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1277 | 1304 |
| 1278 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1305 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1279 | 1306 |
| 1280 size_t spdy_trailers_frame_length; | 1307 size_t spdy_trailers_frame_length; |
| 1281 SpdyHeaderBlock trailers; | 1308 SpdyHeaderBlock trailers; |
| 1282 trailers["foo"] = "bar"; | 1309 trailers["foo"] = "bar"; |
| 1283 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1310 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1284 // Server sends trailers. | 1311 // Server sends trailers. |
| 1285 ProcessPacket(ConstructResponseTrailersPacket( | 1312 ProcessPacket(ConstructResponseTrailersPacket( |
| 1286 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1313 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1287 | 1314 |
| 1288 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1315 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 1289 trailers.erase(kFinalOffsetHeaderKey); | 1316 trailers.erase(kFinalOffsetHeaderKey); |
| 1290 EXPECT_EQ(trailers, delegate->trailers()); | 1317 EXPECT_EQ(trailers, delegate->trailers()); |
| 1291 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); | 1318 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1292 | 1319 |
| 1293 EXPECT_EQ(1, delegate->on_data_read_count()); | 1320 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1294 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1321 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1295 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 1322 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| 1296 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1323 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1297 strlen(kUploadData)), | 1324 strlen(kUploadData)), |
| 1298 delegate->GetTotalSentBytes()); | 1325 delegate->GetTotalSentBytes()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1316 BidirectionalStreamRequestInfo request; | 1343 BidirectionalStreamRequestInfo request; |
| 1317 request.method = "PUT"; | 1344 request.method = "PUT"; |
| 1318 request.url = GURL("http://www.google.com/"); | 1345 request.url = GURL("http://www.google.com/"); |
| 1319 request.end_stream_on_headers = false; | 1346 request.end_stream_on_headers = false; |
| 1320 request.priority = DEFAULT_PRIORITY; | 1347 request.priority = DEFAULT_PRIORITY; |
| 1321 | 1348 |
| 1322 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1349 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1323 std::unique_ptr<TestDelegateBase> delegate( | 1350 std::unique_ptr<TestDelegateBase> delegate( |
| 1324 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1351 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1325 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1352 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1326 delegate->WaitUntilNextCallback(); // OnStreamReady | 1353 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1327 | 1354 |
| 1328 // Send a DATA frame. | 1355 // Send a DATA frame. |
| 1329 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1356 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1330 | 1357 |
| 1331 delegate->SendData(buf, buf->size(), true); | 1358 delegate->SendData(buf, buf->size(), true); |
| 1332 delegate->WaitUntilNextCallback(); // OnDataSent | 1359 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1333 | 1360 |
| 1334 // Server acks the request. | 1361 // Server acks the request. |
| 1335 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1362 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1336 | 1363 |
| 1337 // Server sends the response headers. | 1364 // Server sends the response headers. |
| 1338 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1365 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1339 size_t spdy_response_headers_frame_length; | 1366 size_t spdy_response_headers_frame_length; |
| 1340 QuicStreamOffset offset = 0; | 1367 QuicStreamOffset offset = 0; |
| 1341 ProcessPacket(ConstructResponseHeadersPacket( | 1368 ProcessPacket(ConstructResponseHeadersPacket( |
| 1342 2, !kFin, std::move(response_headers), | 1369 2, !kFin, std::move(response_headers), |
| 1343 &spdy_response_headers_frame_length, &offset)); | 1370 &spdy_response_headers_frame_length, &offset)); |
| 1344 | 1371 |
| 1345 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1372 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1346 TestCompletionCallback cb; | 1373 TestCompletionCallback cb; |
| 1347 int rv = delegate->ReadData(cb.callback()); | 1374 int rv = delegate->ReadData(cb.callback()); |
| 1348 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1375 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1349 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1376 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1350 const char kResponseBody[] = "Hello world!"; | 1377 const char kResponseBody[] = "Hello world!"; |
| 1351 // Server sends data. | 1378 // Server sends data. |
| 1352 ProcessPacket( | 1379 ProcessPacket( |
| 1353 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1380 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1354 | 1381 |
| 1355 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1382 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1356 | 1383 |
| 1357 size_t spdy_trailers_frame_length; | 1384 size_t spdy_trailers_frame_length; |
| 1358 SpdyHeaderBlock trailers; | 1385 SpdyHeaderBlock trailers; |
| 1359 trailers["foo"] = "bar"; | 1386 trailers["foo"] = "bar"; |
| 1360 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1387 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1361 // Server sends trailers. | 1388 // Server sends trailers. |
| 1362 ProcessPacket(ConstructResponseTrailersPacket( | 1389 ProcessPacket(ConstructResponseTrailersPacket( |
| 1363 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1390 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1364 | 1391 |
| 1365 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1392 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 1366 trailers.erase(kFinalOffsetHeaderKey); | 1393 trailers.erase(kFinalOffsetHeaderKey); |
| 1367 EXPECT_EQ(trailers, delegate->trailers()); | 1394 EXPECT_EQ(trailers, delegate->trailers()); |
| 1368 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); | 1395 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1369 | 1396 |
| 1370 EXPECT_EQ(1, delegate->on_data_read_count()); | 1397 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1371 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1398 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1372 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); | 1399 EXPECT_EQ(kProtoQUIC, delegate->GetProtocol()); |
| 1373 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1400 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1374 strlen(kUploadData)), | 1401 strlen(kUploadData)), |
| 1375 delegate->GetTotalSentBytes()); | 1402 delegate->GetTotalSentBytes()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1398 request.method = "POST"; | 1425 request.method = "POST"; |
| 1399 request.url = GURL("http://www.google.com/"); | 1426 request.url = GURL("http://www.google.com/"); |
| 1400 request.end_stream_on_headers = false; | 1427 request.end_stream_on_headers = false; |
| 1401 request.priority = DEFAULT_PRIORITY; | 1428 request.priority = DEFAULT_PRIORITY; |
| 1402 | 1429 |
| 1403 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1430 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1404 std::unique_ptr<TestDelegateBase> delegate( | 1431 std::unique_ptr<TestDelegateBase> delegate( |
| 1405 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1432 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1406 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1433 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1407 ConfirmHandshake(); | 1434 ConfirmHandshake(); |
| 1408 delegate->WaitUntilNextCallback(); // OnStreamReady | 1435 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1409 | 1436 |
| 1410 // Server acks the request. | 1437 // Server acks the request. |
| 1411 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1438 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1412 | 1439 |
| 1413 // Server sends the response headers. | 1440 // Server sends the response headers. |
| 1414 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1441 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1415 size_t spdy_response_headers_frame_length; | 1442 size_t spdy_response_headers_frame_length; |
| 1416 ProcessPacket( | 1443 ProcessPacket( |
| 1417 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), | 1444 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), |
| 1418 &spdy_response_headers_frame_length, 0)); | 1445 &spdy_response_headers_frame_length, 0)); |
| 1419 | 1446 |
| 1420 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1447 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1421 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1448 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1422 | 1449 |
| 1423 // Client sends a data packet. | 1450 // Client sends a data packet. |
| 1424 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1451 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1425 | 1452 |
| 1426 delegate->SendData(buf, buf->size(), false); | 1453 delegate->SendData(buf, buf->size(), false); |
| 1427 delegate->WaitUntilNextCallback(); // OnDataSent | 1454 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1428 | 1455 |
| 1429 TestCompletionCallback cb; | 1456 TestCompletionCallback cb; |
| 1430 int rv = delegate->ReadData(cb.callback()); | 1457 int rv = delegate->ReadData(cb.callback()); |
| 1431 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1458 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1432 const char kResponseBody[] = "Hello world!"; | 1459 const char kResponseBody[] = "Hello world!"; |
| 1433 | 1460 |
| 1434 // Server sends a data packet. | 1461 // Server sends a data packet. |
| 1435 ProcessPacket(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, | 1462 ProcessPacket(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, |
| 1436 0, kResponseBody, &server_maker_)); | 1463 0, kResponseBody, &server_maker_)); |
| 1437 | 1464 |
| 1438 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 1465 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1439 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 1466 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 1440 | 1467 |
| 1441 // Client sends a data packet. | 1468 // Client sends a data packet. |
| 1442 delegate->SendData(buf, buf->size(), true); | 1469 delegate->SendData(buf, buf->size(), true); |
| 1443 delegate->WaitUntilNextCallback(); // OnDataSent | 1470 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1444 | 1471 |
| 1445 TestCompletionCallback cb2; | 1472 TestCompletionCallback cb2; |
| 1446 rv = delegate->ReadData(cb2.callback()); | 1473 rv = delegate->ReadData(cb2.callback()); |
| 1447 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1474 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1448 ProcessPacket(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 1, 1, kFin, | 1475 ProcessPacket(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 1, 1, kFin, |
| 1449 strlen(kResponseBody), kResponseBody, | 1476 strlen(kResponseBody), kResponseBody, |
| 1450 &server_maker_)); | 1477 &server_maker_)); |
| 1451 | 1478 |
| 1452 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb2.WaitForResult()); | 1479 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb2.WaitForResult()); |
| 1453 | 1480 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1480 BidirectionalStreamRequestInfo request; | 1507 BidirectionalStreamRequestInfo request; |
| 1481 request.method = "GET"; | 1508 request.method = "GET"; |
| 1482 request.url = GURL("http://www.google.com/"); | 1509 request.url = GURL("http://www.google.com/"); |
| 1483 request.end_stream_on_headers = true; | 1510 request.end_stream_on_headers = true; |
| 1484 request.priority = DEFAULT_PRIORITY; | 1511 request.priority = DEFAULT_PRIORITY; |
| 1485 | 1512 |
| 1486 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1513 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1487 std::unique_ptr<TestDelegateBase> delegate( | 1514 std::unique_ptr<TestDelegateBase> delegate( |
| 1488 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1515 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1489 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1516 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1490 delegate->WaitUntilNextCallback(); // OnStreamReady | 1517 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1491 ConfirmHandshake(); | 1518 ConfirmHandshake(); |
| 1492 | 1519 |
| 1493 // Server sends a Rst. | 1520 // Server sends a Rst. |
| 1494 ProcessPacket(ConstructServerRstStreamPacket(1)); | 1521 ProcessPacket(ConstructServerRstStreamPacket(1)); |
| 1495 | 1522 |
| 1496 delegate->WaitUntilNextCallback(); // OnFailed | 1523 EXPECT_TRUE(delegate->on_failed_called()); |
| 1524 |
| 1497 TestCompletionCallback cb; | 1525 TestCompletionCallback cb; |
| 1498 EXPECT_THAT(delegate->ReadData(cb.callback()), | 1526 EXPECT_THAT(delegate->ReadData(cb.callback()), |
| 1499 IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1527 IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1500 | 1528 |
| 1501 base::RunLoop().RunUntilIdle(); | 1529 base::RunLoop().RunUntilIdle(); |
| 1502 | 1530 |
| 1503 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1531 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1504 EXPECT_EQ(0, delegate->on_data_read_count()); | 1532 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1505 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1533 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1506 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1534 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1524 BidirectionalStreamRequestInfo request; | 1552 BidirectionalStreamRequestInfo request; |
| 1525 request.method = "GET"; | 1553 request.method = "GET"; |
| 1526 request.url = GURL("http://www.google.com/"); | 1554 request.url = GURL("http://www.google.com/"); |
| 1527 request.end_stream_on_headers = true; | 1555 request.end_stream_on_headers = true; |
| 1528 request.priority = DEFAULT_PRIORITY; | 1556 request.priority = DEFAULT_PRIORITY; |
| 1529 | 1557 |
| 1530 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1558 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1531 std::unique_ptr<TestDelegateBase> delegate( | 1559 std::unique_ptr<TestDelegateBase> delegate( |
| 1532 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1560 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1533 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1561 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1534 delegate->WaitUntilNextCallback(); // OnStreamReady | 1562 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1535 ConfirmHandshake(); | 1563 ConfirmHandshake(); |
| 1536 | 1564 |
| 1537 // Server acks the request. | 1565 // Server acks the request. |
| 1538 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1566 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1539 | 1567 |
| 1540 // Server sends the response headers. | 1568 // Server sends the response headers. |
| 1541 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1569 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1542 | 1570 |
| 1543 size_t spdy_response_headers_frame_length; | 1571 size_t spdy_response_headers_frame_length; |
| 1544 QuicStreamOffset offset = 0; | 1572 QuicStreamOffset offset = 0; |
| 1545 ProcessPacket(ConstructResponseHeadersPacket( | 1573 ProcessPacket(ConstructResponseHeadersPacket( |
| 1546 2, !kFin, std::move(response_headers), | 1574 2, !kFin, std::move(response_headers), |
| 1547 &spdy_response_headers_frame_length, &offset)); | 1575 &spdy_response_headers_frame_length, &offset)); |
| 1548 | 1576 |
| 1549 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1577 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1550 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1578 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1551 | 1579 |
| 1552 TestCompletionCallback cb; | 1580 TestCompletionCallback cb; |
| 1553 int rv = delegate->ReadData(cb.callback()); | 1581 int rv = delegate->ReadData(cb.callback()); |
| 1554 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1582 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1555 | 1583 |
| 1556 // Server sends a Rst. | 1584 // Server sends a Rst. |
| 1557 ProcessPacket(ConstructServerRstStreamPacket(3)); | 1585 ProcessPacket(ConstructServerRstStreamPacket(3)); |
| 1558 | 1586 |
| 1559 delegate->WaitUntilNextCallback(); // OnFailed | 1587 EXPECT_TRUE(delegate->on_failed_called()); |
| 1560 | 1588 |
| 1561 EXPECT_THAT(delegate->ReadData(cb.callback()), | 1589 EXPECT_THAT(delegate->ReadData(cb.callback()), |
| 1562 IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1590 IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1563 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1591 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1564 EXPECT_EQ(0, delegate->on_data_read_count()); | 1592 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1565 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1593 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1566 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1594 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1567 delegate->GetTotalSentBytes()); | 1595 delegate->GetTotalSentBytes()); |
| 1568 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1596 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1569 delegate->GetTotalReceivedBytes()); | 1597 delegate->GetTotalReceivedBytes()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1583 request.method = "POST"; | 1611 request.method = "POST"; |
| 1584 request.url = GURL("http://www.google.com/"); | 1612 request.url = GURL("http://www.google.com/"); |
| 1585 request.end_stream_on_headers = false; | 1613 request.end_stream_on_headers = false; |
| 1586 request.priority = DEFAULT_PRIORITY; | 1614 request.priority = DEFAULT_PRIORITY; |
| 1587 | 1615 |
| 1588 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1616 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1589 std::unique_ptr<TestDelegateBase> delegate( | 1617 std::unique_ptr<TestDelegateBase> delegate( |
| 1590 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1618 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1591 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1619 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1592 ConfirmHandshake(); | 1620 ConfirmHandshake(); |
| 1593 delegate->WaitUntilNextCallback(); // OnStreamReady | 1621 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1594 | 1622 |
| 1595 // Server acks the request. | 1623 // Server acks the request. |
| 1596 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1624 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1597 | 1625 |
| 1598 // Server sends the response headers. | 1626 // Server sends the response headers. |
| 1599 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1627 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1600 | 1628 |
| 1601 size_t spdy_response_headers_frame_length; | 1629 size_t spdy_response_headers_frame_length; |
| 1602 QuicStreamOffset offset = 0; | 1630 QuicStreamOffset offset = 0; |
| 1603 ProcessPacket(ConstructResponseHeadersPacket( | 1631 ProcessPacket(ConstructResponseHeadersPacket( |
| 1604 2, !kFin, std::move(response_headers), | 1632 2, !kFin, std::move(response_headers), |
| 1605 &spdy_response_headers_frame_length, &offset)); | 1633 &spdy_response_headers_frame_length, &offset)); |
| 1606 | 1634 |
| 1607 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1635 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1608 TestCompletionCallback cb; | 1636 TestCompletionCallback cb; |
| 1609 int rv = delegate->ReadData(cb.callback()); | 1637 int rv = delegate->ReadData(cb.callback()); |
| 1610 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1638 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1611 session()->connection()->CloseConnection( | 1639 session()->connection()->CloseConnection( |
| 1612 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); | 1640 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |
| 1613 delegate->WaitUntilNextCallback(); // OnFailed | |
| 1614 EXPECT_TRUE(delegate->on_failed_called()); | 1641 EXPECT_TRUE(delegate->on_failed_called()); |
| 1615 | 1642 |
| 1616 // Try to send data after OnFailed(), should not get called back. | 1643 // Try to send data after OnFailed(), should not get called back. |
| 1617 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1644 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1618 delegate->SendData(buf, buf->size(), false); | 1645 delegate->SendData(buf, buf->size(), false); |
| 1619 base::RunLoop().RunUntilIdle(); | 1646 base::RunLoop().RunUntilIdle(); |
| 1620 | 1647 |
| 1621 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_UNEXPECTED)); | 1648 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_UNEXPECTED)); |
| 1622 EXPECT_THAT(delegate->error(), IsError(ERR_UNEXPECTED)); | 1649 EXPECT_THAT(delegate->error(), IsError(ERR_UNEXPECTED)); |
| 1623 EXPECT_EQ(0, delegate->on_data_read_count()); | 1650 EXPECT_EQ(0, delegate->on_data_read_count()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1640 request.priority = DEFAULT_PRIORITY; | 1667 request.priority = DEFAULT_PRIORITY; |
| 1641 | 1668 |
| 1642 ConfirmHandshake(); | 1669 ConfirmHandshake(); |
| 1643 session()->connection()->CloseConnection( | 1670 session()->connection()->CloseConnection( |
| 1644 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); | 1671 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |
| 1645 | 1672 |
| 1646 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1673 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1647 std::unique_ptr<TestDelegateBase> delegate( | 1674 std::unique_ptr<TestDelegateBase> delegate( |
| 1648 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1675 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1649 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1676 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1650 delegate->WaitUntilNextCallback(); // OnFailed | 1677 delegate->WaitUntilNextCallback(kOnFailed); |
| 1651 EXPECT_TRUE(delegate->on_failed_called()); | 1678 EXPECT_TRUE(delegate->on_failed_called()); |
| 1652 EXPECT_THAT(delegate->error(), IsError(ERR_CONNECTION_CLOSED)); | 1679 EXPECT_THAT(delegate->error(), IsError(ERR_CONNECTION_CLOSED)); |
| 1653 } | 1680 } |
| 1654 | 1681 |
| 1655 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeStartNotConfirmed) { | 1682 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeStartNotConfirmed) { |
| 1656 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1683 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1657 Initialize(); | 1684 Initialize(); |
| 1658 | 1685 |
| 1659 session()->connection()->CloseConnection( | 1686 session()->connection()->CloseConnection( |
| 1660 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); | 1687 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |
| 1661 | 1688 |
| 1662 BidirectionalStreamRequestInfo request; | 1689 BidirectionalStreamRequestInfo request; |
| 1663 request.method = "POST"; | 1690 request.method = "POST"; |
| 1664 request.url = GURL("http://www.google.com/"); | 1691 request.url = GURL("http://www.google.com/"); |
| 1665 request.end_stream_on_headers = false; | 1692 request.end_stream_on_headers = false; |
| 1666 request.priority = DEFAULT_PRIORITY; | 1693 request.priority = DEFAULT_PRIORITY; |
| 1667 | 1694 |
| 1668 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1695 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1669 std::unique_ptr<TestDelegateBase> delegate( | 1696 std::unique_ptr<TestDelegateBase> delegate( |
| 1670 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1697 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1671 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1698 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1672 delegate->WaitUntilNextCallback(); // OnFailed | 1699 delegate->WaitUntilNextCallback(kOnFailed); |
| 1673 EXPECT_TRUE(delegate->on_failed_called()); | 1700 EXPECT_TRUE(delegate->on_failed_called()); |
| 1674 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_HANDSHAKE_FAILED)); | 1701 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_HANDSHAKE_FAILED)); |
| 1675 } | 1702 } |
| 1676 | 1703 |
| 1677 TEST_P(BidirectionalStreamQuicImplTest, SessionCloseDuringOnStreamReady) { | 1704 TEST_P(BidirectionalStreamQuicImplTest, SessionCloseDuringOnStreamReady) { |
| 1678 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1705 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1679 QuicStreamOffset header_stream_offset = 0; | 1706 QuicStreamOffset header_stream_offset = 0; |
| 1680 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1707 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1681 AddWriteError(SYNCHRONOUS, ERR_CONNECTION_REFUSED); | 1708 AddWriteError(SYNCHRONOUS, ERR_CONNECTION_REFUSED); |
| 1682 | 1709 |
| 1683 Initialize(); | 1710 Initialize(); |
| 1684 | 1711 |
| 1685 BidirectionalStreamRequestInfo request; | 1712 BidirectionalStreamRequestInfo request; |
| 1686 request.method = "POST"; | 1713 request.method = "POST"; |
| 1687 request.url = GURL("http://www.google.com/"); | 1714 request.url = GURL("http://www.google.com/"); |
| 1688 request.end_stream_on_headers = false; | 1715 request.end_stream_on_headers = false; |
| 1689 request.priority = DEFAULT_PRIORITY; | 1716 request.priority = DEFAULT_PRIORITY; |
| 1690 | 1717 |
| 1691 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1718 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1692 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 1719 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( |
| 1693 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED)); | 1720 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED)); |
| 1694 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1721 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1695 ConfirmHandshake(); | 1722 ConfirmHandshake(); |
| 1696 delegate->WaitUntilNextCallback(); // OnStreamReady | 1723 delegate->WaitUntilNextCallback(kOnFailed); |
| 1697 | 1724 |
| 1698 EXPECT_EQ(0, delegate->on_data_read_count()); | 1725 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1699 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1726 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1700 } | 1727 } |
| 1701 | 1728 |
| 1702 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnStreamReady) { | 1729 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnStreamReady) { |
| 1703 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1730 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1704 size_t spdy_request_headers_frame_length; | 1731 size_t spdy_request_headers_frame_length; |
| 1705 QuicStreamOffset header_stream_offset = 0; | 1732 QuicStreamOffset header_stream_offset = 0; |
| 1706 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1733 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1707 AddWrite(ConstructRequestHeadersPacketInner( | 1734 AddWrite(ConstructRequestHeadersPacketInner( |
| 1708 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1735 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, |
| 1709 &spdy_request_headers_frame_length, &header_stream_offset)); | 1736 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1710 AddWrite(ConstructClientEarlyRstStreamPacket(3)); | 1737 AddWrite(ConstructClientEarlyRstStreamPacket(3)); |
| 1711 | 1738 |
| 1712 Initialize(); | 1739 Initialize(); |
| 1713 | 1740 |
| 1714 BidirectionalStreamRequestInfo request; | 1741 BidirectionalStreamRequestInfo request; |
| 1715 request.method = "POST"; | 1742 request.method = "POST"; |
| 1716 request.url = GURL("http://www.google.com/"); | 1743 request.url = GURL("http://www.google.com/"); |
| 1717 request.end_stream_on_headers = false; | 1744 request.end_stream_on_headers = false; |
| 1718 request.priority = DEFAULT_PRIORITY; | 1745 request.priority = DEFAULT_PRIORITY; |
| 1719 | 1746 |
| 1720 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1747 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1721 std::unique_ptr<DeleteStreamDelegate> delegate( | 1748 std::unique_ptr<DeleteStreamDelegate> delegate( |
| 1722 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, | 1749 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, |
| 1723 DeleteStreamDelegate::ON_STREAM_READY)); | 1750 DeleteStreamDelegate::ON_STREAM_READY)); |
| 1724 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1751 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1725 ConfirmHandshake(); | 1752 ConfirmHandshake(); |
| 1726 delegate->WaitUntilNextCallback(); // OnStreamReady | 1753 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1727 | 1754 |
| 1728 EXPECT_EQ(0, delegate->on_data_read_count()); | 1755 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1729 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1756 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1730 } | 1757 } |
| 1731 | 1758 |
| 1732 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { | 1759 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { |
| 1733 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1760 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1734 size_t spdy_request_headers_frame_length; | 1761 size_t spdy_request_headers_frame_length; |
| 1735 QuicStreamOffset header_stream_offset = 0; | 1762 QuicStreamOffset header_stream_offset = 0; |
| 1736 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1763 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1737 AddWrite(ConstructRequestHeadersPacketInner( | 1764 AddWrite(ConstructRequestHeadersPacketInner( |
| 1738 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 1765 2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, |
| 1739 &spdy_request_headers_frame_length, &header_stream_offset)); | 1766 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1740 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); | 1767 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); |
| 1741 | 1768 |
| 1742 Initialize(); | 1769 Initialize(); |
| 1743 | 1770 |
| 1744 BidirectionalStreamRequestInfo request; | 1771 BidirectionalStreamRequestInfo request; |
| 1745 request.method = "POST"; | 1772 request.method = "POST"; |
| 1746 request.url = GURL("http://www.google.com/"); | 1773 request.url = GURL("http://www.google.com/"); |
| 1747 request.end_stream_on_headers = false; | 1774 request.end_stream_on_headers = false; |
| 1748 request.priority = DEFAULT_PRIORITY; | 1775 request.priority = DEFAULT_PRIORITY; |
| 1749 | 1776 |
| 1750 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1777 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1751 std::unique_ptr<TestDelegateBase> delegate( | 1778 std::unique_ptr<TestDelegateBase> delegate( |
| 1752 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1779 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1753 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1780 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1754 ConfirmHandshake(); | 1781 ConfirmHandshake(); |
| 1755 delegate->WaitUntilNextCallback(); // OnStreamReady | 1782 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1756 | 1783 |
| 1757 // Server acks the request. | 1784 // Server acks the request. |
| 1758 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1785 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1759 | 1786 |
| 1760 // Server sends the response headers. | 1787 // Server sends the response headers. |
| 1761 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1788 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1762 size_t spdy_response_headers_frame_length; | 1789 size_t spdy_response_headers_frame_length; |
| 1763 ProcessPacket( | 1790 ProcessPacket( |
| 1764 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), | 1791 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), |
| 1765 &spdy_response_headers_frame_length, 0)); | 1792 &spdy_response_headers_frame_length, 0)); |
| 1766 | 1793 |
| 1767 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1794 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1768 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1795 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1769 | 1796 |
| 1770 // Cancel the stream after ReadData returns ERR_IO_PENDING. | 1797 // Cancel the stream after ReadData returns ERR_IO_PENDING. |
| 1771 TestCompletionCallback cb; | 1798 TestCompletionCallback cb; |
| 1772 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_IO_PENDING)); | 1799 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_IO_PENDING)); |
| 1773 delegate->DeleteStream(); | 1800 delegate->DeleteStream(); |
| 1774 | 1801 |
| 1775 base::RunLoop().RunUntilIdle(); | 1802 base::RunLoop().RunUntilIdle(); |
| 1776 | 1803 |
| 1777 EXPECT_EQ(0, delegate->on_data_read_count()); | 1804 EXPECT_EQ(0, delegate->on_data_read_count()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1800 request.url = GURL("http://www.google.com/"); | 1827 request.url = GURL("http://www.google.com/"); |
| 1801 request.end_stream_on_headers = false; | 1828 request.end_stream_on_headers = false; |
| 1802 request.priority = DEFAULT_PRIORITY; | 1829 request.priority = DEFAULT_PRIORITY; |
| 1803 | 1830 |
| 1804 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1831 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1805 std::unique_ptr<DeleteStreamDelegate> delegate( | 1832 std::unique_ptr<DeleteStreamDelegate> delegate( |
| 1806 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, | 1833 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, |
| 1807 DeleteStreamDelegate::ON_HEADERS_RECEIVED)); | 1834 DeleteStreamDelegate::ON_HEADERS_RECEIVED)); |
| 1808 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1835 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1809 ConfirmHandshake(); | 1836 ConfirmHandshake(); |
| 1810 delegate->WaitUntilNextCallback(); // OnStreamReady | 1837 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1811 | 1838 |
| 1812 // Server acks the request. | 1839 // Server acks the request. |
| 1813 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1840 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1814 | 1841 |
| 1815 // Server sends the response headers. | 1842 // Server sends the response headers. |
| 1816 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1843 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1817 | 1844 |
| 1818 size_t spdy_response_headers_frame_length; | 1845 size_t spdy_response_headers_frame_length; |
| 1819 ProcessPacket(ConstructResponseHeadersPacket( | 1846 ProcessPacket(ConstructResponseHeadersPacket( |
| 1820 2, !kFin, std::move(response_headers), | 1847 2, !kFin, std::move(response_headers), |
| 1821 &spdy_response_headers_frame_length, nullptr)); | 1848 &spdy_response_headers_frame_length, nullptr)); |
| 1822 | 1849 |
| 1823 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1850 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1824 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1851 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1825 | 1852 |
| 1826 base::RunLoop().RunUntilIdle(); | 1853 base::RunLoop().RunUntilIdle(); |
| 1827 | 1854 |
| 1828 EXPECT_EQ(0, delegate->on_data_read_count()); | 1855 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1829 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1856 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1830 } | 1857 } |
| 1831 | 1858 |
| 1832 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { | 1859 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { |
| 1833 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1860 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1846 request.method = "POST"; | 1873 request.method = "POST"; |
| 1847 request.url = GURL("http://www.google.com/"); | 1874 request.url = GURL("http://www.google.com/"); |
| 1848 request.end_stream_on_headers = false; | 1875 request.end_stream_on_headers = false; |
| 1849 request.priority = DEFAULT_PRIORITY; | 1876 request.priority = DEFAULT_PRIORITY; |
| 1850 | 1877 |
| 1851 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1878 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1852 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 1879 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( |
| 1853 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ)); | 1880 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ)); |
| 1854 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1881 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1855 ConfirmHandshake(); | 1882 ConfirmHandshake(); |
| 1856 delegate->WaitUntilNextCallback(); // OnStreamReady | 1883 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1857 | 1884 |
| 1858 // Server acks the request. | 1885 // Server acks the request. |
| 1859 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1886 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1860 | 1887 |
| 1861 // Server sends the response headers. | 1888 // Server sends the response headers. |
| 1862 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1889 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1863 | 1890 |
| 1864 size_t spdy_response_headers_frame_length; | 1891 size_t spdy_response_headers_frame_length; |
| 1865 ProcessPacket(ConstructResponseHeadersPacket( | 1892 ProcessPacket(ConstructResponseHeadersPacket( |
| 1866 2, !kFin, std::move(response_headers), | 1893 2, !kFin, std::move(response_headers), |
| 1867 &spdy_response_headers_frame_length, nullptr)); | 1894 &spdy_response_headers_frame_length, nullptr)); |
| 1868 | 1895 |
| 1869 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1896 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1870 | 1897 |
| 1871 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1898 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1872 | 1899 |
| 1873 TestCompletionCallback cb; | 1900 TestCompletionCallback cb; |
| 1874 int rv = delegate->ReadData(cb.callback()); | 1901 int rv = delegate->ReadData(cb.callback()); |
| 1875 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1902 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1876 const char kResponseBody[] = "Hello world!"; | 1903 const char kResponseBody[] = "Hello world!"; |
| 1877 // Server sends data. | 1904 // Server sends data. |
| 1878 ProcessPacket( | 1905 ProcessPacket( |
| 1879 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1906 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1905 request.url = GURL("http://www.google.com/"); | 1932 request.url = GURL("http://www.google.com/"); |
| 1906 request.end_stream_on_headers = false; | 1933 request.end_stream_on_headers = false; |
| 1907 request.priority = DEFAULT_PRIORITY; | 1934 request.priority = DEFAULT_PRIORITY; |
| 1908 | 1935 |
| 1909 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1936 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1910 std::unique_ptr<TestDelegateBase> delegate( | 1937 std::unique_ptr<TestDelegateBase> delegate( |
| 1911 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1938 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1912 | 1939 |
| 1913 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 1940 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1914 ConfirmHandshake(); | 1941 ConfirmHandshake(); |
| 1915 delegate->WaitUntilNextCallback(); // OnStreamReady | 1942 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1916 | 1943 |
| 1917 // Send a Data packet with fin set. | 1944 // Send a Data packet with fin set. |
| 1918 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody)); | 1945 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody)); |
| 1919 delegate->SendData(buf1, buf1->size(), /*fin*/ true); | 1946 delegate->SendData(buf1, buf1->size(), /*fin*/ true); |
| 1920 delegate->WaitUntilNextCallback(); // OnDataSent | 1947 delegate->WaitUntilNextCallback(kOnDataSent); |
| 1921 | 1948 |
| 1922 // Server acks the request. | 1949 // Server acks the request. |
| 1923 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1950 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1924 | 1951 |
| 1925 // Server sends the response headers. | 1952 // Server sends the response headers. |
| 1926 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1953 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1927 | 1954 |
| 1928 size_t spdy_response_headers_frame_length; | 1955 size_t spdy_response_headers_frame_length; |
| 1929 ProcessPacket(ConstructResponseHeadersPacket( | 1956 ProcessPacket(ConstructResponseHeadersPacket( |
| 1930 2, !kFin, std::move(response_headers), | 1957 2, !kFin, std::move(response_headers), |
| 1931 &spdy_response_headers_frame_length, nullptr)); | 1958 &spdy_response_headers_frame_length, nullptr)); |
| 1932 | 1959 |
| 1933 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1960 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1934 | 1961 |
| 1935 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1962 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1936 | 1963 |
| 1937 // Read the body, which will complete asynchronously. | 1964 // Read the body, which will complete asynchronously. |
| 1938 TestCompletionCallback cb; | 1965 TestCompletionCallback cb; |
| 1939 int rv = delegate->ReadData(cb.callback()); | 1966 int rv = delegate->ReadData(cb.callback()); |
| 1940 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1967 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1941 const char kResponseBody[] = "Hello world!"; | 1968 const char kResponseBody[] = "Hello world!"; |
| 1942 | 1969 |
| 1943 // Server sends data with the fin set, which should result in the stream | 1970 // Server sends data with the fin set, which should result in the stream |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1966 request.method = "GET"; | 1993 request.method = "GET"; |
| 1967 request.url = GURL("http://www.google.com/"); | 1994 request.url = GURL("http://www.google.com/"); |
| 1968 request.end_stream_on_headers = true; | 1995 request.end_stream_on_headers = true; |
| 1969 request.priority = DEFAULT_PRIORITY; | 1996 request.priority = DEFAULT_PRIORITY; |
| 1970 | 1997 |
| 1971 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1998 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1972 std::unique_ptr<DeleteStreamDelegate> delegate( | 1999 std::unique_ptr<DeleteStreamDelegate> delegate( |
| 1973 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, | 2000 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, |
| 1974 DeleteStreamDelegate::ON_TRAILERS_RECEIVED)); | 2001 DeleteStreamDelegate::ON_TRAILERS_RECEIVED)); |
| 1975 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 2002 delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |
| 1976 delegate->WaitUntilNextCallback(); // OnStreamReady | 2003 delegate->WaitUntilNextCallback(kOnStreamReady); |
| 1977 | 2004 |
| 1978 // Server acks the request. | 2005 // Server acks the request. |
| 1979 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 2006 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1980 | 2007 |
| 1981 // Server sends the response headers. | 2008 // Server sends the response headers. |
| 1982 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 2009 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1983 | 2010 |
| 1984 QuicStreamOffset offset = 0; | 2011 QuicStreamOffset offset = 0; |
| 1985 size_t spdy_response_headers_frame_length; | 2012 size_t spdy_response_headers_frame_length; |
| 1986 ProcessPacket(ConstructResponseHeadersPacket( | 2013 ProcessPacket(ConstructResponseHeadersPacket( |
| 1987 2, !kFin, std::move(response_headers), | 2014 2, !kFin, std::move(response_headers), |
| 1988 &spdy_response_headers_frame_length, &offset)); | 2015 &spdy_response_headers_frame_length, &offset)); |
| 1989 | 2016 |
| 1990 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 2017 delegate->WaitUntilNextCallback(kOnHeadersReceived); |
| 1991 | 2018 |
| 1992 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 2019 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1993 | 2020 |
| 1994 TestCompletionCallback cb; | 2021 TestCompletionCallback cb; |
| 1995 int rv = delegate->ReadData(cb.callback()); | 2022 int rv = delegate->ReadData(cb.callback()); |
| 1996 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 2023 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1997 const char kResponseBody[] = "Hello world!"; | 2024 const char kResponseBody[] = "Hello world!"; |
| 1998 // Server sends data. | 2025 // Server sends data. |
| 1999 ProcessPacket( | 2026 ProcessPacket( |
| 2000 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 2027 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 2001 | 2028 |
| 2002 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 2029 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 2003 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 2030 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 2004 | 2031 |
| 2005 size_t spdy_trailers_frame_length; | 2032 size_t spdy_trailers_frame_length; |
| 2006 SpdyHeaderBlock trailers; | 2033 SpdyHeaderBlock trailers; |
| 2007 trailers["foo"] = "bar"; | 2034 trailers["foo"] = "bar"; |
| 2008 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 2035 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 2009 // Server sends trailers. | 2036 // Server sends trailers. |
| 2010 ProcessPacket(ConstructResponseTrailersPacket( | 2037 ProcessPacket(ConstructResponseTrailersPacket( |
| 2011 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 2038 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 2012 | 2039 |
| 2013 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 2040 delegate->WaitUntilNextCallback(kOnTrailersReceived); |
| 2014 trailers.erase(kFinalOffsetHeaderKey); | 2041 trailers.erase(kFinalOffsetHeaderKey); |
| 2015 EXPECT_EQ(trailers, delegate->trailers()); | 2042 EXPECT_EQ(trailers, delegate->trailers()); |
| 2016 | 2043 |
| 2017 base::RunLoop().RunUntilIdle(); | 2044 base::RunLoop().RunUntilIdle(); |
| 2018 | 2045 |
| 2019 EXPECT_EQ(1, delegate->on_data_read_count()); | 2046 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 2020 EXPECT_EQ(0, delegate->on_data_sent_count()); | 2047 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 2021 } | 2048 } |
| 2022 | 2049 |
| 2023 } // namespace test | 2050 } // namespace test |
| 2024 | 2051 |
| 2025 } // namespace net | 2052 } // namespace net |
| OLD | NEW |