Treat HTTP/2 specific SETTING identifiers as errors in HTTP/3.
This is specified in https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-30#appendix-A.3
Protected by quic_reloadable_flag_quic_reject_spdy_settings.
PiperOrigin-RevId: 333116208
Change-Id: I946f35ec70c490efb8ca10dbfb1bf9799240daf8
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 7ce419a..b0e2c0c 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -2447,7 +2447,7 @@
GetNthClientInitiatedUnidirectionalStreamId(transport_version(), 3);
char type[] = {kControlStream};
SettingsFrame settings;
- settings.values[3] = 2;
+ settings.values[10] = 2;
settings.values[SETTINGS_MAX_FIELD_SECTION_SIZE] = 5;
std::string data = EncodeSettings(settings);
@@ -3104,6 +3104,25 @@
CompleteHandshake();
}
+TEST_P(QuicSpdySessionTestClient, ReceiveSpdySettingInHttp3) {
+ if (!VersionUsesHttp3(transport_version()) ||
+ !GetQuicReloadableFlag(quic_reject_spdy_settings)) {
+ return;
+ }
+
+ SettingsFrame frame;
+ frame.values[SETTINGS_MAX_FIELD_SECTION_SIZE] = 5;
+ // https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-30#appendix-A.3
+ // specifies the presence of HTTP/2 setting as error.
+ frame.values[spdy::SETTINGS_INITIAL_WINDOW_SIZE] = 100;
+
+ CompleteHandshake();
+
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_HTTP_RECEIVE_SPDY_SETTING, _, _));
+ session_.OnSettingsFrame(frame);
+}
+
} // namespace
} // namespace test
} // namespace quic