Redirect WindowUpdate frame to pending streams if they are present, and closes connection when a WindowUpdate frame is received on a READ_UNIDIRECTIONAL stream.
We determined that at least in the foreseeable future, pending streams will only be READ_UNIDIRECTIONAL, so they will close connection when receives WindowUpdate frame.
gfe-relnote: protected by gfe2_reloadable_flag_quic_no_window_update_on_read_only_stream.
PiperOrigin-RevId: 256041719
Change-Id: Ie7caf100a890f770bb1863d6479d66a5e0820e2a
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index b0699d4..8ef4717 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -737,6 +737,15 @@
}
void QuicStream::OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) {
+ if (GetQuicReloadableFlag(quic_no_window_update_on_read_only_stream) &&
+ type_ == READ_UNIDIRECTIONAL) {
+ QUIC_RELOADABLE_FLAG_COUNT(quic_no_window_update_on_read_only_stream);
+ CloseConnectionWithDetails(
+ QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM,
+ "WindowUpdateFrame received on READ_UNIDIRECTIONAL stream.");
+ return;
+ }
+
if (flow_controller_->UpdateSendWindowOffset(frame.byte_offset)) {
// Let session unblock this stream.
session_->MarkConnectionLevelWriteBlocked(id_);