| 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/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 EXPECT_EQ(send_request_headers_automatically_, request_headers_sent); | 83 EXPECT_EQ(send_request_headers_automatically_, request_headers_sent); |
| 84 CHECK(!not_expect_callback_); | 84 CHECK(!not_expect_callback_); |
| 85 is_ready_ = true; | 85 is_ready_ = true; |
| 86 loop_->Quit(); | 86 loop_->Quit(); |
| 87 } | 87 } |
| 88 | 88 |
| 89 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { | 89 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { |
| 90 CHECK(!on_failed_called_); | 90 CHECK(!on_failed_called_); |
| 91 CHECK(!not_expect_callback_); | 91 CHECK(!not_expect_callback_); |
| 92 | 92 |
| 93 response_headers_ = response_headers; | 93 response_headers_ = response_headers.Clone(); |
| 94 loop_->Quit(); | 94 loop_->Quit(); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void OnDataRead(int bytes_read) override { | 97 void OnDataRead(int bytes_read) override { |
| 98 CHECK(!on_failed_called_); | 98 CHECK(!on_failed_called_); |
| 99 CHECK(!not_expect_callback_); | 99 CHECK(!not_expect_callback_); |
| 100 CHECK(!callback_.is_null()); | 100 CHECK(!callback_.is_null()); |
| 101 | 101 |
| 102 ++on_data_read_count_; | 102 ++on_data_read_count_; |
| 103 CHECK_GE(bytes_read, OK); | 103 CHECK_GE(bytes_read, OK); |
| 104 data_received_.append(read_buf_->data(), bytes_read); | 104 data_received_.append(read_buf_->data(), bytes_read); |
| 105 base::ResetAndReturn(&callback_).Run(bytes_read); | 105 base::ResetAndReturn(&callback_).Run(bytes_read); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void OnDataSent() override { | 108 void OnDataSent() override { |
| 109 CHECK(!on_failed_called_); | 109 CHECK(!on_failed_called_); |
| 110 CHECK(!not_expect_callback_); | 110 CHECK(!not_expect_callback_); |
| 111 | 111 |
| 112 ++on_data_sent_count_; | 112 ++on_data_sent_count_; |
| 113 loop_->Quit(); | 113 loop_->Quit(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 void OnTrailersReceived(const SpdyHeaderBlock& trailers) override { | 116 void OnTrailersReceived(const SpdyHeaderBlock& trailers) override { |
| 117 CHECK(!on_failed_called_); | 117 CHECK(!on_failed_called_); |
| 118 CHECK(!not_expect_callback_); | 118 CHECK(!not_expect_callback_); |
| 119 | 119 |
| 120 trailers_ = trailers; | 120 trailers_ = trailers.Clone(); |
| 121 loop_->Quit(); | 121 loop_->Quit(); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void OnFailed(int error) override { | 124 void OnFailed(int error) override { |
| 125 CHECK(!on_failed_called_); | 125 CHECK(!on_failed_called_); |
| 126 CHECK(!not_expect_callback_); | 126 CHECK(!not_expect_callback_); |
| 127 CHECK_EQ(OK, error_); | 127 CHECK_EQ(OK, error_); |
| 128 CHECK_NE(OK, error); | 128 CHECK_NE(OK, error); |
| 129 | 129 |
| 130 on_failed_called_ = true; | 130 on_failed_called_ = true; |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 size_t* spdy_headers_frame_length, | 486 size_t* spdy_headers_frame_length, |
| 487 QuicStreamOffset* offset) { | 487 QuicStreamOffset* offset) { |
| 488 return server_maker_.MakeResponseHeadersPacket( | 488 return server_maker_.MakeResponseHeadersPacket( |
| 489 packet_number, stream_id_, !kIncludeVersion, fin, | 489 packet_number, stream_id_, !kIncludeVersion, fin, |
| 490 std::move(response_headers), spdy_headers_frame_length, offset); | 490 std::move(response_headers), spdy_headers_frame_length, offset); |
| 491 } | 491 } |
| 492 | 492 |
| 493 std::unique_ptr<QuicReceivedPacket> ConstructResponseTrailersPacket( | 493 std::unique_ptr<QuicReceivedPacket> ConstructResponseTrailersPacket( |
| 494 QuicPacketNumber packet_number, | 494 QuicPacketNumber packet_number, |
| 495 bool fin, | 495 bool fin, |
| 496 const SpdyHeaderBlock& trailers, | 496 SpdyHeaderBlock trailers, |
| 497 size_t* spdy_headers_frame_length, | 497 size_t* spdy_headers_frame_length, |
| 498 QuicStreamOffset* offset) { | 498 QuicStreamOffset* offset) { |
| 499 return server_maker_.MakeResponseHeadersPacket( | 499 return server_maker_.MakeResponseHeadersPacket( |
| 500 packet_number, stream_id_, !kIncludeVersion, fin, trailers, | 500 packet_number, stream_id_, !kIncludeVersion, fin, std::move(trailers), |
| 501 spdy_headers_frame_length, offset); | 501 spdy_headers_frame_length, offset); |
| 502 } | 502 } |
| 503 | 503 |
| 504 std::unique_ptr<QuicReceivedPacket> ConstructClientRstStreamPacket( | 504 std::unique_ptr<QuicReceivedPacket> ConstructClientRstStreamPacket( |
| 505 QuicPacketNumber packet_number) { | 505 QuicPacketNumber packet_number) { |
| 506 return ConstructRstStreamCancelledPacket(packet_number, 0, &client_maker_); | 506 return ConstructRstStreamCancelledPacket(packet_number, 0, &client_maker_); |
| 507 } | 507 } |
| 508 | 508 |
| 509 std::unique_ptr<QuicReceivedPacket> ConstructServerRstStreamPacket( | 509 std::unique_ptr<QuicReceivedPacket> ConstructServerRstStreamPacket( |
| 510 QuicPacketNumber packet_number) { | 510 QuicPacketNumber packet_number) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 652 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 653 TestCompletionCallback cb2; | 653 TestCompletionCallback cb2; |
| 654 EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData(cb2.callback())); | 654 EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData(cb2.callback())); |
| 655 | 655 |
| 656 SpdyHeaderBlock trailers; | 656 SpdyHeaderBlock trailers; |
| 657 size_t spdy_trailers_frame_length; | 657 size_t spdy_trailers_frame_length; |
| 658 trailers["foo"] = "bar"; | 658 trailers["foo"] = "bar"; |
| 659 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 659 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 660 // Server sends trailers. | 660 // Server sends trailers. |
| 661 ProcessPacket(ConstructResponseTrailersPacket( | 661 ProcessPacket(ConstructResponseTrailersPacket( |
| 662 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 662 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 663 | 663 |
| 664 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 664 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 665 EXPECT_EQ(OK, cb2.WaitForResult()); | 665 EXPECT_EQ(OK, cb2.WaitForResult()); |
| 666 trailers.erase(kFinalOffsetHeaderKey); | 666 trailers.erase(kFinalOffsetHeaderKey); |
| 667 EXPECT_EQ(trailers, delegate->trailers()); | 667 EXPECT_EQ(trailers, delegate->trailers()); |
| 668 | 668 |
| 669 EXPECT_EQ(OK, delegate->ReadData(cb2.callback())); | 669 EXPECT_EQ(OK, delegate->ReadData(cb2.callback())); |
| 670 base::RunLoop().RunUntilIdle(); | 670 base::RunLoop().RunUntilIdle(); |
| 671 | 671 |
| 672 EXPECT_EQ(2, delegate->on_data_read_count()); | 672 EXPECT_EQ(2, delegate->on_data_read_count()); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 delegate->SendvData({buf3, buf4, buf5}, | 776 delegate->SendvData({buf3, buf4, buf5}, |
| 777 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 777 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 778 delegate->WaitUntilNextCallback(); // OnDataSent | 778 delegate->WaitUntilNextCallback(); // OnDataSent |
| 779 | 779 |
| 780 size_t spdy_trailers_frame_length; | 780 size_t spdy_trailers_frame_length; |
| 781 SpdyHeaderBlock trailers; | 781 SpdyHeaderBlock trailers; |
| 782 trailers["foo"] = "bar"; | 782 trailers["foo"] = "bar"; |
| 783 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 783 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 784 // Server sends trailers. | 784 // Server sends trailers. |
| 785 ProcessPacket(ConstructResponseTrailersPacket( | 785 ProcessPacket(ConstructResponseTrailersPacket( |
| 786 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 786 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 787 | 787 |
| 788 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 788 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 789 trailers.erase(kFinalOffsetHeaderKey); | 789 trailers.erase(kFinalOffsetHeaderKey); |
| 790 EXPECT_EQ(trailers, delegate->trailers()); | 790 EXPECT_EQ(trailers, delegate->trailers()); |
| 791 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 791 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 792 | 792 |
| 793 EXPECT_EQ(1, delegate->on_data_read_count()); | 793 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 794 EXPECT_EQ(2, delegate->on_data_sent_count()); | 794 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 795 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 795 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 796 EXPECT_EQ( | 796 EXPECT_EQ( |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 | 872 |
| 873 delegate->SendData(buf2, buf2->size(), true); | 873 delegate->SendData(buf2, buf2->size(), true); |
| 874 delegate->WaitUntilNextCallback(); // OnDataSent | 874 delegate->WaitUntilNextCallback(); // OnDataSent |
| 875 | 875 |
| 876 size_t spdy_trailers_frame_length; | 876 size_t spdy_trailers_frame_length; |
| 877 SpdyHeaderBlock trailers; | 877 SpdyHeaderBlock trailers; |
| 878 trailers["foo"] = "bar"; | 878 trailers["foo"] = "bar"; |
| 879 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 879 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 880 // Server sends trailers. | 880 // Server sends trailers. |
| 881 ProcessPacket(ConstructResponseTrailersPacket( | 881 ProcessPacket(ConstructResponseTrailersPacket( |
| 882 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 882 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 883 | 883 |
| 884 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 884 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 885 trailers.erase(kFinalOffsetHeaderKey); | 885 trailers.erase(kFinalOffsetHeaderKey); |
| 886 EXPECT_EQ(trailers, delegate->trailers()); | 886 EXPECT_EQ(trailers, delegate->trailers()); |
| 887 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 887 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 888 | 888 |
| 889 EXPECT_EQ(1, delegate->on_data_read_count()); | 889 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 890 EXPECT_EQ(2, delegate->on_data_sent_count()); | 890 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 891 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 891 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 892 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 892 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 975 delegate->SendvData({buf3, buf4, buf5}, | 975 delegate->SendvData({buf3, buf4, buf5}, |
| 976 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 976 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 977 delegate->WaitUntilNextCallback(); // OnDataSent | 977 delegate->WaitUntilNextCallback(); // OnDataSent |
| 978 | 978 |
| 979 size_t spdy_trailers_frame_length; | 979 size_t spdy_trailers_frame_length; |
| 980 SpdyHeaderBlock trailers; | 980 SpdyHeaderBlock trailers; |
| 981 trailers["foo"] = "bar"; | 981 trailers["foo"] = "bar"; |
| 982 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 982 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 983 // Server sends trailers. | 983 // Server sends trailers. |
| 984 ProcessPacket(ConstructResponseTrailersPacket( | 984 ProcessPacket(ConstructResponseTrailersPacket( |
| 985 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 985 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 986 | 986 |
| 987 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 987 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 988 trailers.erase(kFinalOffsetHeaderKey); | 988 trailers.erase(kFinalOffsetHeaderKey); |
| 989 EXPECT_EQ(trailers, delegate->trailers()); | 989 EXPECT_EQ(trailers, delegate->trailers()); |
| 990 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 990 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 991 | 991 |
| 992 EXPECT_EQ(1, delegate->on_data_read_count()); | 992 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 993 EXPECT_EQ(2, delegate->on_data_sent_count()); | 993 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 994 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 994 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 995 EXPECT_EQ( | 995 EXPECT_EQ( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1055 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1056 | 1056 |
| 1057 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1057 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1058 | 1058 |
| 1059 size_t spdy_trailers_frame_length; | 1059 size_t spdy_trailers_frame_length; |
| 1060 SpdyHeaderBlock trailers; | 1060 SpdyHeaderBlock trailers; |
| 1061 trailers["foo"] = "bar"; | 1061 trailers["foo"] = "bar"; |
| 1062 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1062 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1063 // Server sends trailers. | 1063 // Server sends trailers. |
| 1064 ProcessPacket(ConstructResponseTrailersPacket( | 1064 ProcessPacket(ConstructResponseTrailersPacket( |
| 1065 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 1065 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1066 | 1066 |
| 1067 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1067 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1068 trailers.erase(kFinalOffsetHeaderKey); | 1068 trailers.erase(kFinalOffsetHeaderKey); |
| 1069 EXPECT_EQ(trailers, delegate->trailers()); | 1069 EXPECT_EQ(trailers, delegate->trailers()); |
| 1070 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 1070 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 1071 | 1071 |
| 1072 EXPECT_EQ(1, delegate->on_data_read_count()); | 1072 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1073 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1073 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1074 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1074 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1075 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1075 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1132 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1133 | 1133 |
| 1134 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1134 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1135 | 1135 |
| 1136 size_t spdy_trailers_frame_length; | 1136 size_t spdy_trailers_frame_length; |
| 1137 SpdyHeaderBlock trailers; | 1137 SpdyHeaderBlock trailers; |
| 1138 trailers["foo"] = "bar"; | 1138 trailers["foo"] = "bar"; |
| 1139 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1139 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1140 // Server sends trailers. | 1140 // Server sends trailers. |
| 1141 ProcessPacket(ConstructResponseTrailersPacket( | 1141 ProcessPacket(ConstructResponseTrailersPacket( |
| 1142 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 1142 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1143 | 1143 |
| 1144 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1144 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1145 trailers.erase(kFinalOffsetHeaderKey); | 1145 trailers.erase(kFinalOffsetHeaderKey); |
| 1146 EXPECT_EQ(trailers, delegate->trailers()); | 1146 EXPECT_EQ(trailers, delegate->trailers()); |
| 1147 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 1147 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 1148 | 1148 |
| 1149 EXPECT_EQ(1, delegate->on_data_read_count()); | 1149 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1150 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1150 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1151 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1151 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1152 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1152 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1651 | 1651 |
| 1652 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 1652 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1653 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 1653 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 1654 | 1654 |
| 1655 size_t spdy_trailers_frame_length; | 1655 size_t spdy_trailers_frame_length; |
| 1656 SpdyHeaderBlock trailers; | 1656 SpdyHeaderBlock trailers; |
| 1657 trailers["foo"] = "bar"; | 1657 trailers["foo"] = "bar"; |
| 1658 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1658 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1659 // Server sends trailers. | 1659 // Server sends trailers. |
| 1660 ProcessPacket(ConstructResponseTrailersPacket( | 1660 ProcessPacket(ConstructResponseTrailersPacket( |
| 1661 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); | 1661 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1662 | 1662 |
| 1663 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1663 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1664 trailers.erase(kFinalOffsetHeaderKey); | 1664 trailers.erase(kFinalOffsetHeaderKey); |
| 1665 EXPECT_EQ(trailers, delegate->trailers()); | 1665 EXPECT_EQ(trailers, delegate->trailers()); |
| 1666 | 1666 |
| 1667 base::RunLoop().RunUntilIdle(); | 1667 base::RunLoop().RunUntilIdle(); |
| 1668 | 1668 |
| 1669 EXPECT_EQ(1, delegate->on_data_read_count()); | 1669 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1670 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1670 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1671 } | 1671 } |
| 1672 | 1672 |
| 1673 } // namespace test | 1673 } // namespace test |
| 1674 | 1674 |
| 1675 } // namespace net | 1675 } // namespace net |
| OLD | NEW |