| 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 "components/cronet/ios/cronet_bidirectional_stream.h" | 5 #include "components/cronet/ios/cronet_bidirectional_stream.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 for (const scoped_refptr<net::IOBuffer>& buffer : | 213 for (const scoped_refptr<net::IOBuffer>& buffer : |
| 214 sending_write_data_->buffers()) { | 214 sending_write_data_->buffers()) { |
| 215 delegate_->OnDataSent(buffer->data()); | 215 delegate_->OnDataSent(buffer->data()); |
| 216 } | 216 } |
| 217 sending_write_data_->Clear(); | 217 sending_write_data_->Clear(); |
| 218 // Send data flushed while other data was sending. | 218 // Send data flushed while other data was sending. |
| 219 if (!flushing_write_data_->Empty()) { | 219 if (!flushing_write_data_->Empty()) { |
| 220 SendFlushingWriteData(); | 220 SendFlushingWriteData(); |
| 221 return; | 221 return; |
| 222 } | 222 } |
| 223 if (write_end_of_stream_ && pending_write_data_->Empty()) | 223 if (write_end_of_stream_ && pending_write_data_->Empty()) { |
| 224 write_state_ = WRITING_DONE; | 224 write_state_ = WRITING_DONE; |
| 225 MaybeOnSucceded(); | 225 MaybeOnSucceded(); |
| 226 } |
| 226 } | 227 } |
| 227 | 228 |
| 228 void CronetBidirectionalStream::OnTrailersReceived( | 229 void CronetBidirectionalStream::OnTrailersReceived( |
| 229 const net::SpdyHeaderBlock& response_trailers) { | 230 const net::SpdyHeaderBlock& response_trailers) { |
| 230 DCHECK(environment_->IsOnNetworkThread()); | 231 DCHECK(environment_->IsOnNetworkThread()); |
| 231 delegate_->OnTrailersReceived(response_trailers); | 232 delegate_->OnTrailersReceived(response_trailers); |
| 232 } | 233 } |
| 233 | 234 |
| 234 void CronetBidirectionalStream::OnFailed(int error) { | 235 void CronetBidirectionalStream::OnFailed(int error) { |
| 235 DCHECK(environment_->IsOnNetworkThread()); | 236 DCHECK(environment_->IsOnNetworkThread()); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 } | 327 } |
| 327 | 328 |
| 328 void CronetBidirectionalStream::SendFlushingWriteData() { | 329 void CronetBidirectionalStream::SendFlushingWriteData() { |
| 329 // If previous send is not done, or there is nothing to flush, then exit. | 330 // If previous send is not done, or there is nothing to flush, then exit. |
| 330 if (write_state_ == WRITING || flushing_write_data_->Empty()) | 331 if (write_state_ == WRITING || flushing_write_data_->Empty()) |
| 331 return; | 332 return; |
| 332 DCHECK(sending_write_data_->Empty()); | 333 DCHECK(sending_write_data_->Empty()); |
| 333 write_state_ = WRITING; | 334 write_state_ = WRITING; |
| 334 flushing_write_data_->MoveTo(sending_write_data_.get()); | 335 flushing_write_data_->MoveTo(sending_write_data_.get()); |
| 335 bidi_stream_->SendvData(sending_write_data_->buffers(), | 336 bidi_stream_->SendvData(sending_write_data_->buffers(), |
| 336 sending_write_data_->lengths(), write_end_of_stream_); | 337 sending_write_data_->lengths(), |
| 338 write_end_of_stream_ && pending_write_data_->Empty()); |
| 337 } | 339 } |
| 338 | 340 |
| 339 void CronetBidirectionalStream::CancelOnNetworkThread() { | 341 void CronetBidirectionalStream::CancelOnNetworkThread() { |
| 340 DCHECK(environment_->IsOnNetworkThread()); | 342 DCHECK(environment_->IsOnNetworkThread()); |
| 341 if (!bidi_stream_) | 343 if (!bidi_stream_) |
| 342 return; | 344 return; |
| 343 read_state_ = write_state_ = CANCELED; | 345 read_state_ = write_state_ = CANCELED; |
| 344 bidi_stream_.reset(); | 346 bidi_stream_.reset(); |
| 345 delegate_->OnCanceled(); | 347 delegate_->OnCanceled(); |
| 346 } | 348 } |
| 347 | 349 |
| 348 void CronetBidirectionalStream::DestroyOnNetworkThread() { | 350 void CronetBidirectionalStream::DestroyOnNetworkThread() { |
| 349 DCHECK(environment_->IsOnNetworkThread()); | 351 DCHECK(environment_->IsOnNetworkThread()); |
| 350 delete this; | 352 delete this; |
| 351 } | 353 } |
| 352 | 354 |
| 353 void CronetBidirectionalStream::MaybeOnSucceded() { | 355 void CronetBidirectionalStream::MaybeOnSucceded() { |
| 354 DCHECK(environment_->IsOnNetworkThread()); | 356 DCHECK(environment_->IsOnNetworkThread()); |
| 355 if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) { | 357 if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) { |
| 356 read_state_ = write_state_ = SUCCESS; | 358 read_state_ = write_state_ = SUCCESS; |
| 357 bidi_stream_.reset(); | 359 bidi_stream_.reset(); |
| 358 delegate_->OnSucceeded(); | 360 delegate_->OnSucceeded(); |
| 359 } | 361 } |
| 360 } | 362 } |
| 361 | 363 |
| 362 } // namespace cronet | 364 } // namespace cronet |
| OLD | NEW |