Index: net/quic/chromium/quic_chromium_client_session.cc |
diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc |
index 081aff1e1b7d3d8cf89b5a08b38c72331d6dfb15..72fab95b2afcbfa5ccf40224efec042b2cd9cff1 100644 |
--- a/net/quic/chromium/quic_chromium_client_session.cc |
+++ b/net/quic/chromium/quic_chromium_client_session.cc |
@@ -1434,6 +1434,26 @@ void QuicChromiumClientSession::OnPushStreamTimedOut(QuicStreamId stream_id) { |
bytes_pushed_and_unclaimed_count_ += stream->stream_bytes_read(); |
} |
+void QuicChromiumClientSession::CancelPush(const GURL& url) { |
+ QuicClientPromisedInfo* promised_info = |
+ QuicClientSessionBase::GetPromisedByUrl(url.spec()); |
+ if (!promised_info) { |
+ // Push stream has already been claimed. |
+ return; |
+ } |
+ |
+ QuicStreamId stream_id = promised_info->id(); |
+ |
+ // Collect data on the cancelled push stream. |
+ QuicSpdyStream* stream = GetPromisedStream(stream_id); |
+ if (stream != nullptr) |
+ bytes_pushed_and_unclaimed_count_ += stream->stream_bytes_read(); |
+ |
+ // Send the reset and remove the promised info from the promise index. |
+ QuicClientSessionBase::ResetPromised(stream_id, QUIC_STREAM_CANCELLED); |
+ DeletePromised(promised_info); |
+} |
+ |
const LoadTimingInfo::ConnectTiming& |
QuicChromiumClientSession::GetConnectTiming() { |
connect_timing_.ssl_start = connect_timing_.connect_start; |