Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: components/cronet/ios/cronet_bidirectional_stream.cc

Issue 2128633004: [Cronet] Don't send endOfStream if there is pending data to flush on iOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/cronet/ios/test/cronet_bidirectional_stream_test.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | components/cronet/ios/test/cronet_bidirectional_stream_test.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698