| Index: net/http/bidirectional_stream.cc
|
| diff --git a/net/http/bidirectional_stream.cc b/net/http/bidirectional_stream.cc
|
| index 9b588f18459b236636c32c1f59f1be430a2ddd44..602349fd50b6275b79c01b5b55c6deeb28215139 100644
|
| --- a/net/http/bidirectional_stream.cc
|
| +++ b/net/http/bidirectional_stream.cc
|
| @@ -28,29 +28,34 @@ namespace net {
|
|
|
| BidirectionalStream::Delegate::Delegate() {}
|
|
|
| +void BidirectionalStream::Delegate::OnStreamReady() {}
|
| +
|
| BidirectionalStream::Delegate::~Delegate() {}
|
|
|
| BidirectionalStream::BidirectionalStream(
|
| std::unique_ptr<BidirectionalStreamRequestInfo> request_info,
|
| HttpNetworkSession* session,
|
| + bool disable_auto_flush,
|
| Delegate* delegate)
|
| : BidirectionalStream(std::move(request_info),
|
| session,
|
| + disable_auto_flush,
|
| delegate,
|
| base::WrapUnique(new base::Timer(false, false))) {}
|
|
|
| BidirectionalStream::BidirectionalStream(
|
| std::unique_ptr<BidirectionalStreamRequestInfo> request_info,
|
| HttpNetworkSession* session,
|
| + bool disable_auto_flush,
|
| Delegate* delegate,
|
| std::unique_ptr<base::Timer> timer)
|
| : request_info_(std::move(request_info)),
|
| net_log_(BoundNetLog::Make(session->net_log(),
|
| NetLog::SOURCE_BIDIRECTIONAL_STREAM)),
|
| session_(session),
|
| + disable_auto_flush_(disable_auto_flush),
|
| delegate_(delegate),
|
| - timer_(std::move(timer)),
|
| - write_buffer_len_(0) {
|
| + timer_(std::move(timer)) {
|
| DCHECK(delegate_);
|
| DCHECK(request_info_);
|
|
|
| @@ -104,10 +109,27 @@ void BidirectionalStream::SendData(IOBuffer* data,
|
| int length,
|
| bool end_stream) {
|
| DCHECK(stream_impl_);
|
| + DCHECK(write_buffer_list_.empty());
|
| + DCHECK(write_buffer_len_list_.empty());
|
|
|
| stream_impl_->SendData(data, length, end_stream);
|
| - write_buffer_ = data;
|
| - write_buffer_len_ = length;
|
| + write_buffer_list_.push_back(data);
|
| + write_buffer_len_list_.push_back(length);
|
| +}
|
| +
|
| +void BidirectionalStream::SendvData(const std::vector<IOBuffer*>& buffers,
|
| + const std::vector<int>& lengths,
|
| + bool end_stream) {
|
| + DCHECK(stream_impl_);
|
| + DCHECK_EQ(buffers.size(), lengths.size());
|
| + DCHECK(write_buffer_list_.empty());
|
| + DCHECK(write_buffer_len_list_.empty());
|
| +
|
| + stream_impl_->SendvData(buffers, lengths, end_stream);
|
| + for (size_t i = 0; i < buffers.size(); ++i) {
|
| + write_buffer_list_.push_back(buffers[i]);
|
| + write_buffer_len_list_.push_back(lengths[i]);
|
| + }
|
| }
|
|
|
| void BidirectionalStream::Cancel() {
|
| @@ -139,8 +161,8 @@ int64_t BidirectionalStream::GetTotalSentBytes() const {
|
| return stream_impl_->GetTotalSentBytes();
|
| }
|
|
|
| -void BidirectionalStream::OnHeadersSent() {
|
| - delegate_->OnHeadersSent();
|
| +void BidirectionalStream::OnStreamReady() {
|
| + delegate_->OnStreamReady();
|
| }
|
|
|
| void BidirectionalStream::OnHeadersReceived(
|
| @@ -169,12 +191,16 @@ void BidirectionalStream::OnDataRead(int bytes_read) {
|
| }
|
|
|
| void BidirectionalStream::OnDataSent() {
|
| - DCHECK(write_buffer_);
|
| + DCHECK(!write_buffer_list_.empty());
|
| + DCHECK_EQ(write_buffer_list_.size(), write_buffer_len_list_.size());
|
|
|
| - net_log_.AddByteTransferEvent(NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT,
|
| - write_buffer_len_, write_buffer_->data());
|
| - write_buffer_ = nullptr;
|
| - write_buffer_len_ = 0;
|
| + for (size_t i = 0; i < write_buffer_list_.size(); ++i) {
|
| + net_log_.AddByteTransferEvent(NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT,
|
| + write_buffer_len_list_[i],
|
| + write_buffer_list_[i]->data());
|
| + }
|
| + write_buffer_list_.clear();
|
| + write_buffer_len_list_.clear();
|
| delegate_->OnDataSent();
|
| }
|
|
|
| @@ -200,7 +226,8 @@ void BidirectionalStream::OnBidirectionalStreamImplReady(
|
|
|
| stream_request_.reset();
|
| stream_impl_.reset(stream);
|
| - stream_impl_->Start(request_info_.get(), net_log_, this, std::move(timer_));
|
| + stream_impl_->Start(request_info_.get(), net_log_, disable_auto_flush_, this,
|
| + std::move(timer_));
|
| }
|
|
|
| void BidirectionalStream::OnWebSocketHandshakeStreamReady(
|
|
|