Deprecate quic_use_parse_public_header

gfe-relnote: deprecate gfe2_reloadable_flag_quic_use_parse_public_header

NO_BUG=GFE flag deprecation

fayang: please review /gfe/gfe2/e2e
PiperOrigin-RevId: 273374559
Change-Id: I654fd8ee3222cf46806da3e35f979de1ff4c6eef
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 2d0fa34..be5c5ee 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -726,7 +726,6 @@
 }
 
 TEST_P(EndToEndTest, SimpleRequestResponseForcedVersionNegotiation) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   client_supported_versions_.insert(client_supported_versions_.begin(),
                                     QuicVersionReservedForNegotiation());
   ASSERT_TRUE(Initialize());
@@ -739,7 +738,6 @@
 }
 
 TEST_P(EndToEndTestWithTls, ForcedVersionNegotiation) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   client_supported_versions_.insert(client_supported_versions_.begin(),
                                     QuicVersionReservedForNegotiation());
   ASSERT_TRUE(Initialize());
@@ -846,7 +844,6 @@
     ASSERT_TRUE(Initialize());
     return;
   }
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   client_supported_versions_.insert(client_supported_versions_.begin(),
                                     QuicVersionReservedForNegotiation());
   override_client_connection_id_length_ = kQuicDefaultConnectionIdLength;
@@ -867,7 +864,6 @@
     ASSERT_TRUE(Initialize());
     return;
   }
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   client_supported_versions_.insert(client_supported_versions_.begin(),
                                     QuicVersionReservedForNegotiation());
   override_server_connection_id_length_ = 9;
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index b130fe9..eec468a 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -266,34 +266,21 @@
                        QuicStringPiece(packet.data(), packet.length()));
   ReceivedPacketInfo packet_info(self_address, peer_address, packet);
   std::string detailed_error;
-  QuicErrorCode error;
-  if (!GetQuicReloadableFlag(quic_use_parse_public_header)) {
-    error = QuicFramer::ProcessPacketDispatcher(
-        packet, expected_server_connection_id_length_, &packet_info.form,
-        &packet_info.version_flag, &packet_info.version_label,
-        &packet_info.destination_connection_id,
-        &packet_info.source_connection_id, &detailed_error);
-  } else {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_use_parse_public_header);
-    bool retry_token_present;
-    QuicStringPiece retry_token;
-    error = QuicFramer::ParsePublicHeaderDispatcher(
-        packet, expected_server_connection_id_length_, &packet_info.form,
-        &packet_info.long_packet_type, &packet_info.version_flag,
-        &packet_info.use_length_prefix, &packet_info.version_label,
-        &packet_info.version, &packet_info.destination_connection_id,
-        &packet_info.source_connection_id, &retry_token_present, &retry_token,
-        &detailed_error);
-  }
+  bool retry_token_present;
+  QuicStringPiece retry_token;
+  const QuicErrorCode error = QuicFramer::ParsePublicHeaderDispatcher(
+      packet, expected_server_connection_id_length_, &packet_info.form,
+      &packet_info.long_packet_type, &packet_info.version_flag,
+      &packet_info.use_length_prefix, &packet_info.version_label,
+      &packet_info.version, &packet_info.destination_connection_id,
+      &packet_info.source_connection_id, &retry_token_present, &retry_token,
+      &detailed_error);
   if (error != QUIC_NO_ERROR) {
     // Packet has framing error.
     SetLastError(error);
     QUIC_DLOG(ERROR) << detailed_error;
     return;
   }
-  if (!GetQuicReloadableFlag(quic_use_parse_public_header)) {
-    packet_info.version = ParseQuicVersionLabel(packet_info.version_label);
-  }
   if (packet_info.destination_connection_id.length() !=
           expected_server_connection_id_length_ &&
       !should_update_expected_server_connection_id_length_ &&
@@ -477,8 +464,7 @@
       return true;
     }
 
-    if (GetQuicReloadableFlag(quic_use_parse_public_header) &&
-        GetQuicReloadableFlag(quic_donot_process_small_initial_packets) &&
+    if (GetQuicReloadableFlag(quic_donot_process_small_initial_packets) &&
         crypto_config()->validate_chlo_size() &&
         packet_info.form == IETF_QUIC_LONG_HEADER_PACKET &&
         packet_info.long_packet_type == INITIAL &&
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index 2c757a4..48a1aa6 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -529,7 +529,6 @@
 }
 
 TEST_F(QuicDispatcherTest, StatelessVersionNegotiation) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   CreateTimeWaitListManager();
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
 
@@ -548,7 +547,6 @@
 }
 
 TEST_F(QuicDispatcherTest, StatelessVersionNegotiationWithClientConnectionId) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   CreateTimeWaitListManager();
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
 
@@ -589,7 +587,6 @@
 // Disabling CHLO size validation allows the dispatcher to send version
 // negotiation packets in response to a CHLO that is otherwise too small.
 TEST_F(QuicDispatcherTest, VersionNegotiationWithoutChloSizeValidation) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   crypto_config_.set_validate_chlo_size(false);
 
   CreateTimeWaitListManager();
@@ -933,7 +930,6 @@
 }
 
 TEST_F(QuicDispatcherTest, SupportedTransportVersionsChangeInFlight) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 7u,
                 "Supported versions out of sync");
   SetQuicReloadableFlag(quic_disable_version_39, false);
@@ -1048,7 +1044,6 @@
 
 TEST_F(QuicDispatcherTest, VersionNegotiationProbe) {
   SetQuicFlag(FLAGS_quic_prober_uses_length_prefixed_connection_ids, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   SetQuicReloadableFlag(quic_use_length_prefix_from_packet_info, true);
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
   CreateTimeWaitListManager();
@@ -1148,7 +1143,6 @@
 
 TEST_F(QuicDispatcherTest, VersionNegotiationProbeEndToEnd) {
   SetQuicFlag(FLAGS_quic_prober_uses_length_prefixed_connection_ids, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   SetQuicReloadableFlag(quic_use_length_prefix_from_packet_info, true);
 
   SavingWriter* saving_writer = new SavingWriter();
@@ -1344,7 +1338,6 @@
 
 TEST_F(QuicDispatcherTest, DoNotProcessSmallPacket) {
   SetQuicReloadableFlag(quic_donot_process_small_initial_packets, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   CreateTimeWaitListManager();
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
 
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index 6b55cfc..f792273 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -6234,87 +6234,6 @@
 }
 
 // static
-QuicErrorCode QuicFramer::ProcessPacketDispatcher(
-    const QuicEncryptedPacket& packet,
-    uint8_t expected_destination_connection_id_length,
-    PacketHeaderFormat* format,
-    bool* version_flag,
-    QuicVersionLabel* version_label,
-    QuicConnectionId* destination_connection_id,
-    QuicConnectionId* source_connection_id,
-    std::string* detailed_error) {
-  DCHECK(!GetQuicReloadableFlag(quic_use_parse_public_header));
-  QuicDataReader reader(packet.data(), packet.length());
-
-  *source_connection_id = EmptyQuicConnectionId();
-  uint8_t first_byte;
-  if (!reader.ReadBytes(&first_byte, 1)) {
-    *detailed_error = "Unable to read first byte.";
-    return QUIC_INVALID_PACKET_HEADER;
-  }
-  uint8_t destination_connection_id_length = 0, source_connection_id_length = 0;
-  if (!QuicUtils::IsIetfPacketHeader(first_byte)) {
-    *format = GOOGLE_QUIC_PACKET;
-    *version_flag = (first_byte & PACKET_PUBLIC_FLAGS_VERSION) != 0;
-    destination_connection_id_length =
-        first_byte & PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID;
-    if (destination_connection_id_length == 0 ||
-        !reader.ReadConnectionId(destination_connection_id,
-                                 destination_connection_id_length)) {
-      *detailed_error = "Unable to read ConnectionId.";
-      return QUIC_INVALID_PACKET_HEADER;
-    }
-    if (*version_flag && !ProcessVersionLabel(&reader, version_label)) {
-      *detailed_error = "Unable to read protocol version.";
-      return QUIC_INVALID_PACKET_HEADER;
-    }
-    return QUIC_NO_ERROR;
-  }
-
-  *format = GetIetfPacketHeaderFormat(first_byte);
-  QUIC_DVLOG(1) << "Dispatcher: Processing IETF QUIC packet, format: "
-                << *format;
-  *version_flag = *format == IETF_QUIC_LONG_HEADER_PACKET;
-  if (*format == IETF_QUIC_LONG_HEADER_PACKET) {
-    if (!ProcessVersionLabel(&reader, version_label)) {
-      *detailed_error = "Unable to read protocol version.";
-      return QUIC_INVALID_PACKET_HEADER;
-    }
-    // Set should_update_expected_server_connection_id_length to true to bypass
-    // connection ID lengths validation.
-    uint8_t unused_expected_server_connection_id_length = 0;
-    if (!ProcessAndValidateIetfConnectionIdLength(
-            &reader, ParseQuicVersionLabel(*version_label),
-            Perspective::IS_SERVER,
-            /*should_update_expected_server_connection_id_length=*/true,
-            &unused_expected_server_connection_id_length,
-            &destination_connection_id_length, &source_connection_id_length,
-            detailed_error)) {
-      return QUIC_INVALID_PACKET_HEADER;
-    }
-  } else {
-    // For short header packets, expected_destination_connection_id_length
-    // is used to determine the destination_connection_id_length.
-    destination_connection_id_length =
-        expected_destination_connection_id_length;
-    DCHECK_EQ(0, source_connection_id_length);
-  }
-  // Read destination connection ID.
-  if (!reader.ReadConnectionId(destination_connection_id,
-                               destination_connection_id_length)) {
-    *detailed_error = "Unable to read destination connection ID.";
-    return QUIC_INVALID_PACKET_HEADER;
-  }
-  // Read source connection ID.
-  if (!reader.ReadConnectionId(source_connection_id,
-                               source_connection_id_length)) {
-    *detailed_error = "Unable to read source connection ID.";
-    return QUIC_INVALID_PACKET_HEADER;
-  }
-  return QUIC_NO_ERROR;
-}
-
-// static
 QuicErrorCode QuicFramer::ParsePublicHeaderDispatcher(
     const QuicEncryptedPacket& packet,
     uint8_t expected_destination_connection_id_length,
diff --git a/quic/core/quic_framer.h b/quic/core/quic_framer.h
index 3d4c063..8421c10 100644
--- a/quic/core/quic_framer.h
+++ b/quic/core/quic_framer.h
@@ -380,21 +380,6 @@
       uint64_t retry_token_length,
       QuicVariableLengthIntegerLength length_length);
 
-  // Lightweight parsing of |packet| and populates |format|, |version_flag|,
-  // |version_label|, |destination_connection_id|, |source_connection_id| and
-  // |detailed_error|. Please note, |expected_destination_connection_id_length|
-  // is only used to determine IETF short header packet's destination
-  // connection ID length.
-  static QuicErrorCode ProcessPacketDispatcher(
-      const QuicEncryptedPacket& packet,
-      uint8_t expected_destination_connection_id_length,
-      PacketHeaderFormat* format,
-      bool* version_flag,
-      QuicVersionLabel* version_label,
-      QuicConnectionId* destination_connection_id,
-      QuicConnectionId* source_connection_id,
-      std::string* detailed_error);
-
   // Parses the unencryoted fields in a QUIC header using |reader| as input,
   // stores the result in the other parameters.
   // |expected_destination_connection_id_length| is only used for short headers.
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index e15633f..646e9ee 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -1021,24 +1021,16 @@
   QuicConnectionId destination_connection_id, source_connection_id;
   QuicVersionLabel version_label;
   std::string detailed_error;
-  QuicErrorCode error_code;
-  if (!GetQuicReloadableFlag(quic_use_parse_public_header)) {
-    error_code = QuicFramer::ProcessPacketDispatcher(
-        *encrypted, kQuicDefaultConnectionIdLength, &format, &version_flag,
-        &version_label, &destination_connection_id, &source_connection_id,
-        &detailed_error);
-  } else {
-    bool retry_token_present, use_length_prefix;
-    QuicStringPiece retry_token;
-    ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
-    error_code = QuicFramer::ParsePublicHeaderDispatcher(
-        *encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
-        &version_flag, &use_length_prefix, &version_label, &parsed_version,
-        &destination_connection_id, &source_connection_id, &retry_token_present,
-        &retry_token, &detailed_error);
-    EXPECT_FALSE(retry_token_present);
-    EXPECT_FALSE(use_length_prefix);
-  }
+  bool retry_token_present, use_length_prefix;
+  QuicStringPiece retry_token;
+  ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
+  const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
+      *encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
+      &version_flag, &use_length_prefix, &version_label, &parsed_version,
+      &destination_connection_id, &source_connection_id, &retry_token_present,
+      &retry_token, &detailed_error);
+  EXPECT_FALSE(retry_token_present);
+  EXPECT_FALSE(use_length_prefix);
   EXPECT_EQ(QUIC_NO_ERROR, error_code);
   EXPECT_EQ(GOOGLE_QUIC_PACKET, format);
   EXPECT_FALSE(version_flag);
@@ -1050,9 +1042,9 @@
 TEST_P(QuicFramerTest, LongPacketHeader) {
   // clang-format off
   PacketFragments packet46 = {
-    // type (long header with packet type INITIAL)
+    // type (long header with packet type ZERO_RTT)
     {"Unable to read first byte.",
-     {0xC3}},
+     {0xD3}},
     // version tag
     {"Unable to read protocol version.",
      {QUIC_VERSION_BYTES}},
@@ -1073,6 +1065,7 @@
     return;
   }
 
+  SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet46));
 
@@ -1093,24 +1086,18 @@
   QuicConnectionId destination_connection_id, source_connection_id;
   QuicVersionLabel version_label;
   std::string detailed_error;
-  QuicErrorCode error_code;
-  if (!GetQuicReloadableFlag(quic_use_parse_public_header)) {
-    error_code = QuicFramer::ProcessPacketDispatcher(
-        *encrypted, kQuicDefaultConnectionIdLength, &format, &version_flag,
-        &version_label, &destination_connection_id, &source_connection_id,
-        &detailed_error);
-  } else {
-    bool retry_token_present, use_length_prefix;
-    QuicStringPiece retry_token;
-    ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
-    error_code = QuicFramer::ParsePublicHeaderDispatcher(
-        *encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
-        &version_flag, &use_length_prefix, &version_label, &parsed_version,
-        &destination_connection_id, &source_connection_id, &retry_token_present,
-        &retry_token, &detailed_error);
-    EXPECT_EQ(retry_token_present, framer_.version().SupportsRetry());
-    EXPECT_FALSE(use_length_prefix);
-  }
+  bool retry_token_present, use_length_prefix;
+  QuicStringPiece retry_token;
+  ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
+  const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
+      *encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
+      &version_flag, &use_length_prefix, &version_label, &parsed_version,
+      &destination_connection_id, &source_connection_id, &retry_token_present,
+      &retry_token, &detailed_error);
+  EXPECT_EQ(QUIC_NO_ERROR, error_code);
+  EXPECT_EQ("", detailed_error);
+  EXPECT_FALSE(retry_token_present);
+  EXPECT_FALSE(use_length_prefix);
   EXPECT_EQ(IETF_QUIC_LONG_HEADER_PACKET, format);
   EXPECT_TRUE(version_flag);
   EXPECT_EQ(kQuicDefaultConnectionIdLength, destination_connection_id.length());
@@ -1123,7 +1110,6 @@
     // This test requires an IETF long header.
     return;
   }
-  SetQuicReloadableFlag(quic_use_parse_public_header, false);
   SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
   // clang-format off
   unsigned char packet[] = {
@@ -1138,6 +1124,25 @@
     0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
     // source connection ID
     0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x11,
+    // packet number
+    0x12, 0x34, 0x56, 0x00,
+    // padding frame
+    0x00,
+  };
+  unsigned char packet49[] = {
+    // public flags (long header with packet type ZERO_RTT_PROTECTED and
+    // 4-byte packet number)
+    0xD3,
+    // version
+    QUIC_VERSION_BYTES,
+    // destination connection ID length
+    0x08,
+    // destination connection ID
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // source connection ID length
+    0x08,
+    // source connection ID
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x11,
     // long header packet length
     0x05,
     // packet number
@@ -1147,31 +1152,32 @@
   };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(AsChars(packet), QUIC_ARRAYSIZE(packet), false);
+  unsigned char* p = packet;
+  size_t p_length = QUIC_ARRAYSIZE(packet);
+  if (framer_.transport_version() >= QUIC_VERSION_49) {
+    p = packet49;
+    p_length = QUIC_ARRAYSIZE(packet49);
+  }
+
+  QuicEncryptedPacket encrypted(AsChars(p), p_length, false);
   PacketHeaderFormat format = GOOGLE_QUIC_PACKET;
   QuicLongHeaderType long_packet_type = INVALID_PACKET_TYPE;
   bool version_flag = false;
   QuicConnectionId destination_connection_id, source_connection_id;
   QuicVersionLabel version_label = 0;
   std::string detailed_error = "";
-  QuicErrorCode error_code;
-  if (!GetQuicReloadableFlag(quic_use_parse_public_header)) {
-    error_code = QuicFramer::ProcessPacketDispatcher(
-        encrypted, kQuicDefaultConnectionIdLength, &format, &version_flag,
-        &version_label, &destination_connection_id, &source_connection_id,
-        &detailed_error);
-  } else {
-    bool retry_token_present, use_length_prefix;
-    QuicStringPiece retry_token;
-    ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
-    error_code = QuicFramer::ParsePublicHeaderDispatcher(
-        encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
-        &version_flag, &use_length_prefix, &version_label, &parsed_version,
-        &destination_connection_id, &source_connection_id, &retry_token_present,
-        &retry_token, &detailed_error);
-    EXPECT_FALSE(retry_token_present);
-    EXPECT_FALSE(use_length_prefix);
-  }
+  bool retry_token_present, use_length_prefix;
+  QuicStringPiece retry_token;
+  ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
+  const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
+      encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
+      &version_flag, &use_length_prefix, &version_label, &parsed_version,
+      &destination_connection_id, &source_connection_id, &retry_token_present,
+      &retry_token, &detailed_error);
+  EXPECT_EQ(QUIC_NO_ERROR, error_code);
+  EXPECT_FALSE(retry_token_present);
+  EXPECT_EQ(framer_.version().HasLengthPrefixedConnectionIds(),
+            use_length_prefix);
   EXPECT_EQ("", detailed_error);
   EXPECT_EQ(IETF_QUIC_LONG_HEADER_PACKET, format);
   EXPECT_TRUE(version_flag);
diff --git a/quic/core/quic_packets.h b/quic/core/quic_packets.h
index 7faa741..82647c6 100644
--- a/quic/core/quic_packets.h
+++ b/quic/core/quic_packets.h
@@ -435,7 +435,6 @@
   const QuicSocketAddress& peer_address;
   const QuicReceivedPacket& packet;
 
-  // Fields below are populated by QuicFramer::ProcessPacketDispatcher.
   PacketHeaderFormat form;
   // This is only used if the form is IETF_QUIC_LONG_HEADER_PACKET.
   QuicLongHeaderType long_packet_type;
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index c8e4807..b73b729 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -48,7 +48,6 @@
             manager.GetSupportedTransportVersions());
 
   SetQuicReloadableFlag(quic_enable_version_49, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_49, QUIC_VERSION_48,
                                         QUIC_VERSION_47, QUIC_VERSION_46,
                                         QUIC_VERSION_43, QUIC_VERSION_39}),
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 223780b..1247eaf 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -265,13 +265,11 @@
       continue;
     }
     if (version.transport_version == QUIC_VERSION_99) {
-      if (GetQuicReloadableFlag(quic_enable_version_99) &&
-          GetQuicReloadableFlag(quic_use_parse_public_header)) {
+      if (GetQuicReloadableFlag(quic_enable_version_99)) {
         filtered_versions.push_back(version);
       }
     } else if (version.transport_version == QUIC_VERSION_49) {
-      if (GetQuicReloadableFlag(quic_enable_version_49) &&
-          GetQuicReloadableFlag(quic_use_parse_public_header)) {
+      if (GetQuicReloadableFlag(quic_enable_version_49)) {
         filtered_versions.push_back(version);
       }
     } else if (version.transport_version == QUIC_VERSION_48) {
@@ -474,7 +472,6 @@
   // Enable necessary flags.
   SetQuicReloadableFlag(quic_supports_tls_handshake, true);
   SetQuicReloadableFlag(quic_simplify_stop_waiting, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   SetQuicRestartFlag(quic_use_hashed_stateless_reset_tokens, true);
 }
 
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index a037639..1ab12e5 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -300,7 +300,6 @@
   SetQuicReloadableFlag(quic_enable_version_48_2, true);
   SetQuicReloadableFlag(quic_enable_version_49, true);
   SetQuicReloadableFlag(quic_enable_version_99, true);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   ParsedQuicVersionVector parsed_versions;
   for (QuicTransportVersion version : all_versions) {
     parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
@@ -327,7 +326,6 @@
   SetQuicReloadableFlag(quic_enable_version_48_2, true);
   SetQuicReloadableFlag(quic_enable_version_49, true);
   SetQuicReloadableFlag(quic_enable_version_99, false);
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   ParsedQuicVersionVector parsed_versions;
   for (QuicTransportVersion version : all_versions) {
     parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc
index 2902b19..cb197a2 100644
--- a/quic/qbone/qbone_client_test.cc
+++ b/quic/qbone/qbone_client_test.cc
@@ -206,7 +206,6 @@
 };
 
 TEST(QboneClientTest, SendDataFromClient) {
-  SetQuicReloadableFlag(quic_use_parse_public_header, true);
   auto server = new QboneTestServer(crypto_test_utils::ProofSourceForTesting());
   QuicSocketAddress server_address(TestLoopback(),
                                    QuicPickServerPortForTestsOrDie());