| Index: net/quic/core/quic_stream.cc
|
| diff --git a/net/quic/core/quic_stream.cc b/net/quic/core/quic_stream.cc
|
| index 4e8d7a65835736b7d700319e634732dc099e6aab..e8583b62c043d0d8102a3b5797026167452e67b7 100644
|
| --- a/net/quic/core/quic_stream.cc
|
| +++ b/net/quic/core/quic_stream.cc
|
| @@ -77,7 +77,8 @@ QuicStream::QuicStream(QuicStreamId id, QuicSession* session)
|
| stream_contributes_to_connection_flow_control_(true),
|
| busy_counter_(0),
|
| add_random_padding_after_fin_(false),
|
| - ack_listener_(nullptr) {
|
| + ack_listener_(nullptr),
|
| + send_buffer_(session->connection()->helper()->GetBufferAllocator()) {
|
| SetFromConfig();
|
| }
|
|
|
| @@ -532,6 +533,9 @@ void QuicStream::OnStreamFrameDiscarded(const QuicStreamFrame& frame) {
|
| if (frame.fin) {
|
| fin_outstanding_ = false;
|
| }
|
| + if (session_->streams_own_data() && frame.data_length > 0) {
|
| + send_buffer_.RemoveStreamFrame(frame.offset, frame.data_length);
|
| + }
|
| if (!IsWaitingForAcks()) {
|
| session_->OnStreamDoneWaitingForAcks(id_);
|
| }
|
| @@ -541,4 +545,19 @@ bool QuicStream::IsWaitingForAcks() const {
|
| return stream_bytes_outstanding_ || fin_outstanding_;
|
| }
|
|
|
| +void QuicStream::SaveStreamData(QuicIOVector iov,
|
| + size_t iov_offset,
|
| + QuicStreamOffset offset,
|
| + QuicByteCount data_length) {
|
| + DCHECK_LT(0u, data_length);
|
| + send_buffer_.SaveStreamData(iov, iov_offset, offset, data_length);
|
| +}
|
| +
|
| +bool QuicStream::WriteStreamData(QuicStreamOffset offset,
|
| + QuicByteCount data_length,
|
| + QuicDataWriter* writer) {
|
| + DCHECK_LT(0u, data_length);
|
| + return send_buffer_.WriteStreamData(offset, data_length, writer);
|
| +}
|
| +
|
| } // namespace net
|
|
|