| Index: net/tools/quic/quic_simple_server_stream.cc
|
| diff --git a/net/tools/quic/quic_simple_server_stream.cc b/net/tools/quic/quic_simple_server_stream.cc
|
| index b9dd897fcd349605144c3c8841175d6a46ada551..8b10b752f12515b3b6719cc4f5160ea3d7b1270b 100644
|
| --- a/net/tools/quic/quic_simple_server_stream.cc
|
| +++ b/net/tools/quic/quic_simple_server_stream.cc
|
| @@ -28,7 +28,9 @@ namespace net {
|
|
|
| QuicSimpleServerStream::QuicSimpleServerStream(QuicStreamId id,
|
| QuicSpdySession* session)
|
| - : QuicSpdyStream(id, session), content_length_(-1) {}
|
| + : QuicSpdyStream(id, session),
|
| + content_length_(-1),
|
| + response_started_(false) {}
|
|
|
| QuicSimpleServerStream::~QuicSimpleServerStream() {}
|
|
|
| @@ -103,21 +105,10 @@ void QuicSimpleServerStream::OnDataAvailable() {
|
| return;
|
| }
|
|
|
| - if (request_headers_.empty()) {
|
| - DVLOG(1) << "Request headers empty.";
|
| - SendErrorResponse();
|
| - return;
|
| - }
|
| -
|
| - if (content_length_ > 0 &&
|
| - static_cast<uint64_t>(content_length_) != body_.size()) {
|
| - DVLOG(1) << "Content length (" << content_length_ << ") != body size ("
|
| - << body_.size() << ").";
|
| - SendErrorResponse();
|
| - return;
|
| + // Subclass could have manually invoked SendResponse earlier.
|
| + if (!response_started_) {
|
| + SendResponse();
|
| }
|
| -
|
| - SendResponse();
|
| }
|
|
|
| void QuicSimpleServerStream::PushResponse(
|
| @@ -136,6 +127,23 @@ void QuicSimpleServerStream::PushResponse(
|
| }
|
|
|
| void QuicSimpleServerStream::SendResponse() {
|
| + DCHECK(!response_started_);
|
| + response_started_ = true;
|
| +
|
| + if (request_headers_.empty()) {
|
| + DVLOG(1) << "Request headers empty.";
|
| + SendErrorResponse();
|
| + return;
|
| + }
|
| +
|
| + if (content_length_ > 0 &&
|
| + static_cast<uint64_t>(content_length_) != body_.size()) {
|
| + DVLOG(1) << "Content length (" << content_length_ << ") != body size ("
|
| + << body_.size() << ").";
|
| + SendErrorResponse();
|
| + return;
|
| + }
|
| +
|
| if (!base::ContainsKey(request_headers_, ":authority") ||
|
| !base::ContainsKey(request_headers_, ":path")) {
|
| DVLOG(1) << "Request headers do not contain :authority or :path.";
|
|
|