Do not increase max_packet_size in response to a peer advertising a higher value than we currently have.

This fixes a lot of broken tests in Chromium.

gfe-relnote: n/a (QUIC version not used in prod)
PiperOrigin-RevId: 290156638
Change-Id: I9831739d59df8bf38fff0ecb3026c5ef7c0649b8
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index ddb81f5..6ef2db8 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -473,7 +473,7 @@
   if (config.HasReceivedMaxPacketSize()) {
     peer_max_packet_size_ = config.ReceivedMaxPacketSize();
     packet_creator_.SetMaxPacketLength(
-        GetLimitedMaxPacketSize(peer_max_packet_size_));
+        GetLimitedMaxPacketSize(packet_creator_.max_packet_length()));
   }
 
   supports_release_time_ =
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 0817d57..8dd8f67 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -2396,6 +2396,19 @@
   EXPECT_EQ(kTestMaxPacketSize, connection_.max_packet_length());
 }
 
+TEST_P(QuicConnectionTest, PeerCannotRaiseMaxPacketSize) {
+  EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
+
+  // SetFromConfig is always called after construction from InitializeSession.
+  EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
+  constexpr uint32_t kTestMaxPacketSize = 1450u;
+  QuicConfig config;
+  QuicConfigPeer::SetReceivedMaxPacketSize(&config, kTestMaxPacketSize);
+  connection_.SetFromConfig(config);
+
+  EXPECT_EQ(kDefaultMaxPacketSize, connection_.max_packet_length());
+}
+
 TEST_P(QuicConnectionTest, SmallerServerMaxPacketSize) {
   TestConnection connection(TestConnectionId(), kPeerAddress, helper_.get(),
                             alarm_factory_.get(), writer_.get(),