Do not enforce push promise arrive in order in http3. client side only, not protected.
PiperOrigin-RevId: 323047790
Change-Id: Ie79628db689ab7b09898da79e23607981604699d
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc
index 9bd7695..46305a6 100644
--- a/quic/core/http/quic_spdy_client_session_base.cc
+++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -65,7 +65,10 @@
ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
return;
}
- if (promised_stream_id !=
+ // In HTTP3, push promises are received on individual streams, so they could
+ // be arrive out of order.
+ if (!VersionUsesHttp3(transport_version()) &&
+ promised_stream_id !=
QuicUtils::GetInvalidStreamId(transport_version()) &&
largest_promised_stream_id_ !=
QuicUtils::GetInvalidStreamId(transport_version()) &&
diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc
index 2500c97..1c0f868 100644
--- a/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -677,11 +677,13 @@
QuicHeaderList());
associated_stream_id_ +=
QuicUtils::StreamIdDelta(connection_->transport_version());
- EXPECT_CALL(*connection_,
- CloseConnection(QUIC_INVALID_STREAM_ID,
- "Received push stream id lesser or equal to the"
- " last accepted before",
- _));
+ if (!VersionUsesHttp3(session_->transport_version())) {
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_INVALID_STREAM_ID,
+ "Received push stream id lesser or equal to the"
+ " last accepted before",
+ _));
+ }
session_->OnPromiseHeaderList(associated_stream_id_, promised_stream_id_, 0,
QuicHeaderList());
}