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); |