OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/quic_http_stream.h" | 5 #include "net/quic/quic_http_stream.h" |
6 | 6 |
7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 raw_request_body_buf_.get(), raw_request_body_buf_->size(), | 464 raw_request_body_buf_.get(), raw_request_body_buf_->size(), |
465 base::Bind(&QuicHttpStream::OnIOComplete, weak_factory_.GetWeakPtr())); | 465 base::Bind(&QuicHttpStream::OnIOComplete, weak_factory_.GetWeakPtr())); |
466 } | 466 } |
467 | 467 |
468 int QuicHttpStream::DoReadRequestBodyComplete(int rv) { | 468 int QuicHttpStream::DoReadRequestBodyComplete(int rv) { |
469 // |rv| is the result of read from the request body from the last call to | 469 // |rv| is the result of read from the request body from the last call to |
470 // DoSendBody(). | 470 // DoSendBody(). |
471 if (rv < 0) | 471 if (rv < 0) |
472 return rv; | 472 return rv; |
473 | 473 |
| 474 // If the stream is already closed, don't continue. |
| 475 if (!stream_) |
| 476 return response_status_; |
| 477 |
474 request_body_buf_ = new DrainableIOBuffer(raw_request_body_buf_.get(), rv); | 478 request_body_buf_ = new DrainableIOBuffer(raw_request_body_buf_.get(), rv); |
475 if (rv == 0) { // Reached the end. | 479 if (rv == 0) { // Reached the end. |
476 DCHECK(request_body_stream_->IsEOF()); | 480 DCHECK(request_body_stream_->IsEOF()); |
477 } | 481 } |
478 | 482 |
479 next_state_ = STATE_SEND_BODY; | 483 next_state_ = STATE_SEND_BODY; |
480 return OK; | 484 return OK; |
481 } | 485 } |
482 | 486 |
483 int QuicHttpStream::DoSendBody() { | 487 int QuicHttpStream::DoSendBody() { |
(...skipping 13 matching lines...) Expand all Loading... |
497 } | 501 } |
498 | 502 |
499 next_state_ = STATE_OPEN; | 503 next_state_ = STATE_OPEN; |
500 return OK; | 504 return OK; |
501 } | 505 } |
502 | 506 |
503 int QuicHttpStream::DoSendBodyComplete(int rv) { | 507 int QuicHttpStream::DoSendBodyComplete(int rv) { |
504 if (rv < 0) | 508 if (rv < 0) |
505 return rv; | 509 return rv; |
506 | 510 |
| 511 // If the stream is already closed, don't continue. |
| 512 if (!stream_) |
| 513 return response_status_; |
| 514 |
507 request_body_buf_->DidConsume(request_body_buf_->BytesRemaining()); | 515 request_body_buf_->DidConsume(request_body_buf_->BytesRemaining()); |
508 | 516 |
509 if (!request_body_stream_->IsEOF()) { | 517 if (!request_body_stream_->IsEOF()) { |
510 next_state_ = STATE_READ_REQUEST_BODY; | 518 next_state_ = STATE_READ_REQUEST_BODY; |
511 return OK; | 519 return OK; |
512 } | 520 } |
513 | 521 |
514 next_state_ = STATE_OPEN; | 522 next_state_ = STATE_OPEN; |
515 return OK; | 523 return OK; |
516 } | 524 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 closed_stream_sent_bytes_ = stream_->stream_bytes_written(); | 567 closed_stream_sent_bytes_ = stream_->stream_bytes_written(); |
560 stream_ = nullptr; | 568 stream_ = nullptr; |
561 | 569 |
562 // If |request_body_stream_| is non-NULL, Reset it, to abort any in progress | 570 // If |request_body_stream_| is non-NULL, Reset it, to abort any in progress |
563 // read. | 571 // read. |
564 if (request_body_stream_) | 572 if (request_body_stream_) |
565 request_body_stream_->Reset(); | 573 request_body_stream_->Reset(); |
566 } | 574 } |
567 | 575 |
568 } // namespace net | 576 } // namespace net |
OLD | NEW |