Use QuicPacketWriter::SupportsEcn interface to abandon ECN attempts. Protected by quic_reloadable_flag_quic_send_ect1. PiperOrigin-RevId: 534606960
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc index f139005..8737453 100644 --- a/quiche/quic/core/quic_connection.cc +++ b/quiche/quic/core/quic_connection.cc
@@ -7359,6 +7359,9 @@ packet_writer_params_.ecn_codepoint = ecn_codepoint; return true; } + if (!writer_->SupportsEcn()) { + return false; + } switch (ecn_codepoint) { case ECN_NOT_ECT: QUICHE_DCHECK(false);
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc index 58bb93a..46f1615 100644 --- a/quiche/quic/core/quic_connection_test.cc +++ b/quiche/quic/core/quic_connection_test.cc
@@ -17285,6 +17285,15 @@ EXPECT_EQ(writer_->last_ecn_sent(), ECN_ECT1); } +TEST_P(QuicConnectionTest, RejectEcnIfWriterDoesNotSupport) { + SetQuicReloadableFlag(quic_send_ect1, true); + MockPacketWriter mock_writer; + QuicConnectionPeer::SetWriter(&connection_, &mock_writer, false); + EXPECT_CALL(mock_writer, SupportsEcn()).WillOnce(Return(false)); + EXPECT_FALSE(connection_.set_ecn_codepoint(ECN_ECT1)); + EXPECT_EQ(connection_.ecn_codepoint(), ECN_NOT_ECT); +} + } // namespace } // namespace test } // namespace quic