| Index: net/spdy/spdy_session.cc
|
| diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
|
| index 9b10d2afc45b5d624a3e6e9253b5b4ed4c22775a..56c4fde12715692496bb1cf3af02789a9c0a69b1 100644
|
| --- a/net/spdy/spdy_session.cc
|
| +++ b/net/spdy/spdy_session.cc
|
| @@ -1599,11 +1599,15 @@ void SpdySession::OnSynStreamCompressed(
|
| }
|
|
|
|
|
| -bool SpdySession::Respond(const SpdyHeaderBlock& headers, SpdyStream* stream) {
|
| +bool SpdySession::Respond(const SpdyHeaderBlock& response_headers,
|
| + base::Time response_time,
|
| + base::TimeTicks recv_first_byte_time,
|
| + SpdyStream* stream) {
|
| int rv = OK;
|
| SpdyStreamId stream_id = stream->stream_id();
|
| // May invalidate |stream|.
|
| - rv = stream->OnResponseHeadersReceived(headers);
|
| + rv = stream->OnInitialResponseHeadersReceived(
|
| + response_headers, response_time, recv_first_byte_time);
|
| if (rv < 0) {
|
| DCHECK_NE(rv, ERR_IO_PENDING);
|
| CloseActiveStream(stream_id, rv);
|
| @@ -1619,6 +1623,9 @@ void SpdySession::OnSynStream(SpdyStreamId stream_id,
|
| bool fin,
|
| bool unidirectional,
|
| const SpdyHeaderBlock& headers) {
|
| + base::Time response_time = base::Time::Now();
|
| + base::TimeTicks recv_first_byte_time = base::TimeTicks::Now();
|
| +
|
| if (net_log_.IsLoggingAllEvents()) {
|
| net_log_.AddEvent(
|
| NetLog::TYPE_SPDY_SESSION_PUSHED_SYN_STREAM,
|
| @@ -1715,7 +1722,6 @@ void SpdySession::OnSynStream(SpdyStreamId stream_id,
|
| unclaimed_pushed_streams_[url] =
|
| std::pair<SpdyStream*, base::TimeTicks>(stream.get(), time_func_());
|
|
|
| - stream->set_response_received();
|
| InsertActivatedStream(stream.Pass());
|
|
|
| ActiveStreamMap::iterator it = active_streams_.find(stream_id);
|
| @@ -1725,7 +1731,7 @@ void SpdySession::OnSynStream(SpdyStreamId stream_id,
|
| }
|
|
|
| // Parse the headers.
|
| - if (!Respond(headers, it->second))
|
| + if (!Respond(headers, response_time, recv_first_byte_time, it->second))
|
| return;
|
|
|
| base::StatsCounter push_requests("spdy.pushed_streams");
|
| @@ -1768,6 +1774,9 @@ void SpdySession::DeleteExpiredPushedStreams() {
|
| void SpdySession::OnSynReply(SpdyStreamId stream_id,
|
| bool fin,
|
| const SpdyHeaderBlock& headers) {
|
| + base::Time response_time = base::Time::Now();
|
| + base::TimeTicks recv_first_byte_time = base::TimeTicks::Now();
|
| +
|
| if (net_log().IsLoggingAllEvents()) {
|
| net_log().AddEvent(
|
| NetLog::TYPE_SPDY_SESSION_SYN_REPLY,
|
| @@ -1785,16 +1794,15 @@ void SpdySession::OnSynReply(SpdyStreamId stream_id,
|
| SpdyStream* stream = it->second;
|
| CHECK_EQ(stream->stream_id(), stream_id);
|
|
|
| - if (stream->response_received()) {
|
| + if (stream->ReceivedInitialResponseHeaders()) {
|
| stream->LogStreamError(ERR_SYN_REPLY_NOT_RECEIVED,
|
| "Received duplicate SYN_REPLY for stream.");
|
| RecordProtocolErrorHistogram(PROTOCOL_ERROR_SYN_REPLY_NOT_RECEIVED);
|
| CloseActiveStream(stream->stream_id(), ERR_SPDY_PROTOCOL_ERROR);
|
| return;
|
| }
|
| - stream->set_response_received();
|
|
|
| - Respond(headers, stream);
|
| + Respond(headers, response_time, recv_first_byte_time, stream);
|
| }
|
|
|
| void SpdySession::OnHeaders(SpdyStreamId stream_id,
|
| @@ -1817,7 +1825,7 @@ void SpdySession::OnHeaders(SpdyStreamId stream_id,
|
|
|
| CHECK_EQ(it->second->stream_id(), stream_id);
|
|
|
| - int rv = it->second->OnHeaders(headers);
|
| + int rv = it->second->OnAdditionalResponseHeadersReceived(headers);
|
| if (rv < 0) {
|
| DCHECK_NE(rv, ERR_IO_PENDING);
|
| CloseActiveStream(stream_id, rv);
|
|
|