Control client-side MinAckDelay option with AFIA connection option.

PiperOrigin-RevId: 778564306
diff --git a/quiche/quic/core/crypto/crypto_protocol.h b/quiche/quic/core/crypto/crypto_protocol.h
index 9d1dbe2..c8dd332 100644
--- a/quiche/quic/core/crypto/crypto_protocol.h
+++ b/quiche/quic/core/crypto/crypto_protocol.h
@@ -217,6 +217,8 @@
                                // AckFrequencyFrame.
 DEFINE_STATIC_QUIC_TAG(AFF2);  // Send AckFrequencyFrame upon
                                // handshake completion.
+DEFINE_STATIC_QUIC_TAG(AFIA);  // Send MinAckDelay transport parameter to allow
+                               // receipt of ACK_FREQUENCY and IMMEDIATE_ACK
 DEFINE_STATIC_QUIC_TAG(SSLR);  // Slow Start Large Reduction.
 DEFINE_STATIC_QUIC_TAG(NPRR);  // Pace at unity instead of PRR
 DEFINE_STATIC_QUIC_TAG(5RTO);  // Close connection on 5 RTOs
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index be6aa0a..17743e5 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -179,6 +179,10 @@
     } else if (config_.HasClientSentConnectionOption(kCHP2, perspective_)) {
       config_.SetDiscardLengthToSend(kDefaultMaxPacketSize * 2);
     }
+    if (config_.HasClientRequestedIndependentOption(kAFIA, perspective_) &&
+        connection_->version().HasIetfQuicFrames()) {
+      config_.SetMinAckDelayDraft10Ms(kDefaultMinAckDelayTimeMs);
+    }
   } else if (GetQuicReloadableFlag(quic_receive_ack_frequency) &&
              connection_->version().HasIetfQuicFrames()) {
     config_.SetMinAckDelayDraft10Ms(kDefaultMinAckDelayTimeMs);
diff --git a/quiche/quic/core/quic_session_test.cc b/quiche/quic/core/quic_session_test.cc
index 3ae99ee..30480eb 100644
--- a/quiche/quic/core/quic_session_test.cc
+++ b/quiche/quic/core/quic_session_test.cc
@@ -2453,6 +2453,17 @@
   EXPECT_TRUE(session_.CanOpenNextOutgoingBidirectionalStream());
 }
 
+TEST_P(QuicSessionTestClient, MinAckDelaySet) {
+  // IETF QUIC only feature.
+  if (!VersionHasIetfQuicFrames(transport_version())) {
+    return;
+  }
+  session_.config()->SetClientConnectionOptions({kAFIA});
+  session_.Initialize();
+  EXPECT_EQ(session_.config()->GetMinAckDelayDraft10ToSendMs(),
+            kDefaultMinAckDelayTimeMs);
+}
+
 TEST_P(QuicSessionTestServer, ZombieStreams) {
   CompleteHandshake();
   TestStream* stream2 = session_.CreateOutgoingBidirectionalStream();