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