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/spdy/spdy_http_stream.h" | 5 #include "net/spdy/spdy_http_stream.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <list> | 8 #include <list> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 return; | 446 return; |
447 } | 447 } |
448 | 448 |
449 // Read the data from the request body stream. | 449 // Read the data from the request body stream. |
450 const int rv = request_info_->upload_data_stream | 450 const int rv = request_info_->upload_data_stream |
451 ->Read(request_body_buf_.get(), | 451 ->Read(request_body_buf_.get(), |
452 request_body_buf_->size(), | 452 request_body_buf_->size(), |
453 base::Bind(&SpdyHttpStream::OnRequestBodyReadCompleted, | 453 base::Bind(&SpdyHttpStream::OnRequestBodyReadCompleted, |
454 weak_factory_.GetWeakPtr())); | 454 weak_factory_.GetWeakPtr())); |
455 | 455 |
456 if (rv != ERR_IO_PENDING) { | 456 if (rv != ERR_IO_PENDING) |
457 // ERR_IO_PENDING is the only possible error. | |
458 CHECK_GE(rv, 0); | |
459 OnRequestBodyReadCompleted(rv); | 457 OnRequestBodyReadCompleted(rv); |
460 } | 458 } |
| 459 |
| 460 void SpdyHttpStream::ResetStreamInternal() { |
| 461 spdy_session_->ResetStream(stream()->stream_id(), RST_STREAM_INTERNAL_ERROR, |
| 462 std::string()); |
461 } | 463 } |
462 | 464 |
463 void SpdyHttpStream::OnRequestBodyReadCompleted(int status) { | 465 void SpdyHttpStream::OnRequestBodyReadCompleted(int status) { |
| 466 if (status < 0) { |
| 467 DCHECK_NE(ERR_IO_PENDING, status); |
| 468 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 469 FROM_HERE, base::Bind(&SpdyHttpStream::ResetStreamInternal, |
| 470 weak_factory_.GetWeakPtr())); |
| 471 |
| 472 // Call the |request_callback| with received error. |
| 473 if (!request_callback_.is_null()) |
| 474 DoRequestCallback(status); |
| 475 return; |
| 476 } |
| 477 |
464 CHECK_GE(status, 0); | 478 CHECK_GE(status, 0); |
465 request_body_buf_size_ = status; | 479 request_body_buf_size_ = status; |
466 const bool eof = request_info_->upload_data_stream->IsEOF(); | 480 const bool eof = request_info_->upload_data_stream->IsEOF(); |
467 // Only the final frame may have a length of 0. | 481 // Only the final frame may have a length of 0. |
468 if (eof) { | 482 if (eof) { |
469 CHECK_GE(request_body_buf_size_, 0); | 483 CHECK_GE(request_body_buf_size_, 0); |
470 // Call the cb only after all data is sent. | 484 // Call the cb only after all data is sent. |
471 if (!request_callback_.is_null()) | 485 if (!request_callback_.is_null()) |
472 DoRequestCallback(OK); | 486 DoRequestCallback(OK); |
473 } else { | 487 } else { |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2; | 606 details->connection_info = HttpResponseInfo::CONNECTION_INFO_HTTP2; |
593 return; | 607 return; |
594 } | 608 } |
595 | 609 |
596 void SpdyHttpStream::SetPriority(RequestPriority priority) { | 610 void SpdyHttpStream::SetPriority(RequestPriority priority) { |
597 // TODO(akalin): Plumb this through to |stream_request_| and | 611 // TODO(akalin): Plumb this through to |stream_request_| and |
598 // |stream_|. | 612 // |stream_|. |
599 } | 613 } |
600 | 614 |
601 } // namespace net | 615 } // namespace net |
OLD | NEW |