Commit 87305fa7 authored by rjshade's avatar rjshade Committed by Commit bot

Fix bug where QUIC_VERSION_21 would stall after sending too many headers.

Merge of internal change 74954339

BUG=412306

Review URL: https://codereview.chromium.org/555143002

Cr-Commit-Position: refs/heads/master@{#293994}
parent 68fb0260
......@@ -272,7 +272,7 @@ void QuicSession::OnWindowUpdateFrames(
continue;
}
if (connection_->version() <= QUIC_VERSION_21 &&
if (connection_->version() < QUIC_VERSION_21 &&
(stream_id == kCryptoStreamId || stream_id == kHeadersStreamId)) {
DLOG(DFATAL) << "WindowUpdate for stream " << stream_id << " in version "
<< QuicVersionToString(connection_->version());
......
......@@ -905,6 +905,29 @@ TEST_P(QuicSessionTest, VersionNegotiationDisablesFlowControl) {
EXPECT_FALSE(stream->flow_controller()->IsEnabled());
}
TEST_P(QuicSessionTest, WindowUpdateUnblocksHeadersStream) {
// Test that a flow control blocked headers stream gets unblocked on recipt of
// a WINDOW_UPDATE frame. Regression test for b/17413860.
if (version() < QUIC_VERSION_21) {
return;
}
// Set the headers stream to be flow control blocked.
QuicHeadersStream* headers_stream =
QuicSessionPeer::GetHeadersStream(&session_);
QuicFlowControllerPeer::SetSendWindowOffset(headers_stream->flow_controller(),
0);
EXPECT_TRUE(headers_stream->flow_controller()->IsBlocked());
// Unblock the headers stream by supplying a WINDOW_UPDATE.
QuicWindowUpdateFrame window_update_frame(headers_stream->id(),
2 * kDefaultFlowControlSendWindow);
vector<QuicWindowUpdateFrame> frames;
frames.push_back(window_update_frame);
session_.OnWindowUpdateFrames(frames);
EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
}
TEST_P(QuicSessionTest, TooManyUnfinishedStreamsCauseConnectionClose) {
if (version() < QUIC_VERSION_18) {
return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment