Connect up IETF QUIC Max ACK Delay transport parameter

This CL sets the QuicSentPacketManager's ACK Delay from the
MAX ACK Delay transport parameter.

gfe-relnote: N/A done only if IETF QUIC enabled & negotiated.
PiperOrigin-RevId: 260502360
Change-Id: Idd8a9d0fe36e7ab0794aa7532d608489866248eb
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index cbfb84d..c78fab4 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -605,6 +605,35 @@
   EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
 }
 
+// Simple transaction, but set a non-default ack delay at the client
+// and ensure it gets to the server.
+TEST_P(EndToEndTest, SimpleRequestResponseWithAckDelayChange) {
+  // Force the ACK delay to be something other than the default.
+  // Note that it is sent only if doing IETF QUIC.
+  client_config_.SetMaxAckDelayToSendMs(kDefaultDelayedAckTimeMs + 100u);
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
+  int expected_num_client_hellos = 2;
+  if (ServerSendsVersionNegotiation()) {
+    ++expected_num_client_hellos;
+  }
+  EXPECT_EQ(expected_num_client_hellos,
+            client_->client()->GetNumSentClientHellos());
+  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
+    EXPECT_EQ(kDefaultDelayedAckTimeMs + 100u,
+              GetSentPacketManagerFromFirstServerSession()
+                  ->peer_max_ack_delay()
+                  .ToMilliseconds());
+  } else {
+    EXPECT_EQ(kDefaultDelayedAckTimeMs,
+              GetSentPacketManagerFromFirstServerSession()
+                  ->peer_max_ack_delay()
+                  .ToMilliseconds());
+  }
+}
+
 TEST_P(EndToEndTest, SimpleRequestResponseForcedVersionNegotiation) {
   client_supported_versions_.insert(client_supported_versions_.begin(),
                                     QuicVersionReservedForNegotiation());