Deprecate QUIC versions T050 and Draft27

This CL deprecates gfe2_reloadable_flag_quic_disable_version_t050 and gfe2_reloadable_flag_quic_disable_version_draft_27, and removes the associated versions. There will be a followup CL to remove code that was specific to these versions.

PiperOrigin-RevId: 345064178
Change-Id: I46661ba72cdfbeff734b5727a12c424825940896
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc
index 452b85e..27c8ba8 100644
--- a/quic/core/crypto/crypto_utils.cc
+++ b/quic/core/crypto/crypto_utils.cc
@@ -131,11 +131,6 @@
 
 namespace {
 
-// Salt from https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.2
-const uint8_t kDraft27InitialSalt[] = {0xc3, 0xee, 0xf7, 0x12, 0xc7, 0x2e, 0xbb,
-                                       0x5a, 0x11, 0xa7, 0xd2, 0x43, 0x2b, 0xb4,
-                                       0x63, 0x65, 0xbe, 0xf9, 0xf5, 0x02};
-
 // Salt from https://tools.ietf.org/html/draft-ietf-quic-tls-29#section-5.2
 const uint8_t kDraft29InitialSalt[] = {0xaf, 0xbf, 0xec, 0x28, 0x99, 0x93, 0xd2,
                                        0x4c, 0x9e, 0x97, 0x86, 0xf1, 0x9c, 0x61,
@@ -148,10 +143,6 @@
 const uint8_t kQ050Salt[] = {0x50, 0x45, 0x74, 0xef, 0xd0, 0x66, 0xfe,
                              0x2f, 0x9d, 0x94, 0x5c, 0xfc, 0xdb, 0xd3,
                              0xa7, 0xf0, 0xd3, 0xb5, 0x6b, 0x45};
-// Salt to use for initial obfuscators in version T050.
-const uint8_t kT050Salt[] = {0x7f, 0xf5, 0x79, 0xe5, 0xac, 0xd0, 0x72,
-                             0x91, 0x55, 0x80, 0x30, 0x4c, 0x43, 0xa2,
-                             0x36, 0x7c, 0x60, 0x48, 0x83, 0x10};
 // Salt to use for initial obfuscators in version T051.
 const uint8_t kT051Salt[] = {0x7a, 0x4e, 0xde, 0xf4, 0xe7, 0xcc, 0xee,
                              0x5f, 0xa4, 0x50, 0x6c, 0x19, 0x12, 0x4f,
@@ -164,20 +155,14 @@
 
 const uint8_t* InitialSaltForVersion(const ParsedQuicVersion& version,
                                      size_t* out_len) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync with initial encryption salts");
   if (version == ParsedQuicVersion::Draft29()) {
     *out_len = ABSL_ARRAYSIZE(kDraft29InitialSalt);
     return kDraft29InitialSalt;
-  } else if (version == ParsedQuicVersion::Draft27()) {
-    *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt);
-    return kDraft27InitialSalt;
   } else if (version == ParsedQuicVersion::T051()) {
     *out_len = ABSL_ARRAYSIZE(kT051Salt);
     return kT051Salt;
-  } else if (version == ParsedQuicVersion::T050()) {
-    *out_len = ABSL_ARRAYSIZE(kT050Salt);
-    return kT050Salt;
   } else if (version == ParsedQuicVersion::Q050()) {
     *out_len = ABSL_ARRAYSIZE(kQ050Salt);
     return kQ050Salt;
@@ -186,20 +171,13 @@
     return kReservedForNegotiationSalt;
   }
   QUIC_BUG << "No initial obfuscation salt for version " << version;
-  *out_len = ABSL_ARRAYSIZE(kDraft27InitialSalt);
-  return kDraft27InitialSalt;
+  *out_len = ABSL_ARRAYSIZE(kReservedForNegotiationSalt);
+  return kReservedForNegotiationSalt;
 }
 
 const char kPreSharedKeyLabel[] = "QUIC PSK";
 
 // Retry Integrity Protection Keys and Nonces.
-// https://tools.ietf.org/html/draft-ietf-quic-tls-27#section-5.8
-const uint8_t kDraft27RetryIntegrityKey[] = {0x4d, 0x32, 0xec, 0xdb, 0x2a, 0x21,
-                                             0x33, 0xc8, 0x41, 0xe4, 0x04, 0x3d,
-                                             0xf2, 0x7d, 0x44, 0x30};
-const uint8_t kDraft27RetryIntegrityNonce[] = {
-    0x4d, 0x16, 0x11, 0xd0, 0x55, 0x13, 0xa5, 0x52, 0xc5, 0x87, 0xd5, 0x75};
-
 // https://tools.ietf.org/html/draft-ietf-quic-tls-29#section-5.8
 const uint8_t kDraft29RetryIntegrityKey[] = {0xcc, 0xce, 0x18, 0x7e, 0xd0, 0x9a,
                                              0x09, 0xd0, 0x57, 0x28, 0x15, 0x5a,
@@ -209,9 +187,6 @@
 
 // Keys used by Google versions of QUIC. When introducing a new version,
 // generate a new key by running `openssl rand -hex 16`.
-const uint8_t kT050RetryIntegrityKey[] = {0xc9, 0x2d, 0x32, 0x3d, 0x9c, 0xe3,
-                                          0x0d, 0xa0, 0x88, 0xb9, 0xb7, 0xbb,
-                                          0xdc, 0xcd, 0x50, 0xc8};
 const uint8_t kT051RetryIntegrityKey[] = {0x2e, 0xb9, 0x61, 0xa6, 0x79, 0x56,
                                           0xf8, 0x79, 0x53, 0x14, 0xda, 0xfb,
                                           0x2e, 0xbc, 0x83, 0xd7};
@@ -221,8 +196,6 @@
     0x03, 0xe6, 0x7c, 0x7b, 0xd2, 0x44, 0xca, 0xd9};
 // Nonces used by Google versions of QUIC. When introducing a new version,
 // generate a new nonce by running `openssl rand -hex 12`.
-const uint8_t kT050RetryIntegrityNonce[] = {0x26, 0xe4, 0xd6, 0x23, 0x83, 0xd5,
-                                            0xc7, 0x60, 0xea, 0x02, 0xb4, 0x1f};
 const uint8_t kT051RetryIntegrityNonce[] = {0xb5, 0x0e, 0x4e, 0x53, 0x4c, 0xfc,
                                             0x0b, 0xbb, 0x85, 0xf2, 0xf9, 0xca};
 // Retry integrity nonce used by ParsedQuicVersion::ReservedForNegotiation().
@@ -232,7 +205,7 @@
 bool RetryIntegrityKeysForVersion(const ParsedQuicVersion& version,
                                   absl::string_view* key,
                                   absl::string_view* nonce) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync with retry integrity keys");
   if (!version.HasRetryIntegrityTag()) {
     QUIC_BUG << "Attempted to get retry integrity keys for invalid version "
@@ -246,14 +219,6 @@
         reinterpret_cast<const char*>(kDraft29RetryIntegrityNonce),
         ABSL_ARRAYSIZE(kDraft29RetryIntegrityNonce));
     return true;
-  } else if (version == ParsedQuicVersion::Draft27()) {
-    *key = absl::string_view(
-        reinterpret_cast<const char*>(kDraft27RetryIntegrityKey),
-        ABSL_ARRAYSIZE(kDraft27RetryIntegrityKey));
-    *nonce = absl::string_view(
-        reinterpret_cast<const char*>(kDraft27RetryIntegrityNonce),
-        ABSL_ARRAYSIZE(kDraft27RetryIntegrityNonce));
-    return true;
   } else if (version == ParsedQuicVersion::T051()) {
     *key =
         absl::string_view(reinterpret_cast<const char*>(kT051RetryIntegrityKey),
@@ -262,14 +227,6 @@
         reinterpret_cast<const char*>(kT051RetryIntegrityNonce),
         ABSL_ARRAYSIZE(kT051RetryIntegrityNonce));
     return true;
-  } else if (version == ParsedQuicVersion::T050()) {
-    *key =
-        absl::string_view(reinterpret_cast<const char*>(kT050RetryIntegrityKey),
-                          ABSL_ARRAYSIZE(kT050RetryIntegrityKey));
-    *nonce = absl::string_view(
-        reinterpret_cast<const char*>(kT050RetryIntegrityNonce),
-        ABSL_ARRAYSIZE(kT050RetryIntegrityNonce));
-    return true;
   } else if (version == ParsedQuicVersion::ReservedForNegotiation()) {
     *key = absl::string_view(
         reinterpret_cast<const char*>(kReservedForNegotiationRetryIntegrityKey),
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 2d73601..783913e 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -9874,10 +9874,6 @@
   }
 
   // These values come from draft-ietf-quic-tls Appendix A.4.
-  char retry_packet27[] = {
-      0xff, 0xff, 0x00, 0x00, 0x1b, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
-      0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0xa5, 0x23, 0xcb, 0x5b,
-      0xa5, 0x24, 0x69, 0x5f, 0x65, 0x69, 0xf2, 0x93, 0xa1, 0x35, 0x9d, 0x8e};
   char retry_packet29[] = {
       0xff, 0xff, 0x00, 0x00, 0x1d, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
       0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0xd1, 0x69, 0x26, 0xd8,
@@ -9888,9 +9884,6 @@
   if (version() == ParsedQuicVersion::Draft29()) {
     retry_packet = retry_packet29;
     retry_packet_length = ABSL_ARRAYSIZE(retry_packet29);
-  } else if (version() == ParsedQuicVersion::Draft27()) {
-    retry_packet = retry_packet27;
-    retry_packet_length = ABSL_ARRAYSIZE(retry_packet27);
   } else {
     // TODO(dschinazi) generate retry packets for all versions once we have
     // server-side support for generating these programmatically.
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index 9f692a8..a8d4068 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -1149,6 +1149,23 @@
 }
 
 TEST_P(QuicDispatcherTestOneVersion,
+       RejectDeprecatedVersionDraft27WithVersionNegotiation) {
+  QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
+  CreateTimeWaitListManager();
+  char packet[kMinPacketSizeForVersionNegotiation] = {
+      0xC0, 0xFF, 0x00, 0x00, 27, /*destination connection ID length*/ 0x08};
+  QuicReceivedPacket received_packet(packet, ABSL_ARRAYSIZE(packet),
+                                     QuicTime::Zero());
+  EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0);
+  EXPECT_CALL(
+      *time_wait_list_manager_,
+      SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true,
+                                   /*use_length_prefix=*/true, _, _, _, _))
+      .Times(1);
+  dispatcher_->ProcessPacket(server_address_, client_address, received_packet);
+}
+
+TEST_P(QuicDispatcherTestOneVersion,
        RejectDeprecatedVersionDraft25WithVersionNegotiation) {
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
   CreateTimeWaitListManager();
@@ -1166,6 +1183,23 @@
 }
 
 TEST_P(QuicDispatcherTestOneVersion,
+       RejectDeprecatedVersionT050WithVersionNegotiation) {
+  QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
+  CreateTimeWaitListManager();
+  char packet[kMinPacketSizeForVersionNegotiation] = {
+      0xC0, 'T', '0', '5', '0', /*destination connection ID length*/ 0x08};
+  QuicReceivedPacket received_packet(packet, ABSL_ARRAYSIZE(packet),
+                                     QuicTime::Zero());
+  EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0);
+  EXPECT_CALL(
+      *time_wait_list_manager_,
+      SendVersionNegotiationPacket(_, _, /*ietf_quic=*/true,
+                                   /*use_length_prefix=*/true, _, _, _, _))
+      .Times(1);
+  dispatcher_->ProcessPacket(server_address_, client_address, received_packet);
+}
+
+TEST_P(QuicDispatcherTestOneVersion,
        RejectDeprecatedVersionQ049WithVersionNegotiation) {
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
   CreateTimeWaitListManager();
@@ -1251,7 +1285,7 @@
                              received_packet44);
 }
 
-static_assert(quic::SupportedVersions().size() == 7u,
+static_assert(quic::SupportedVersions().size() == 5u,
               "Please add new RejectDeprecatedVersion tests above this assert "
               "when deprecating versions");
 
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 6ff53dc..69b6bc3 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -24,12 +24,10 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_delay_initial_ack, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_deprecate_http2_priority_experiment, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_server_blackhole_detection, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_27, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_29, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q043, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q046, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_q050, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_t050, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_t051, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_do_not_clip_received_error_code, true)
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 7f49eba..946e152 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -17,15 +17,12 @@
     ParsedQuicVersionVector supported_versions)
     : disable_version_draft_29_(
           GetQuicReloadableFlag(quic_disable_version_draft_29)),
-      disable_version_draft_27_(
-          GetQuicReloadableFlag(quic_disable_version_draft_27)),
       disable_version_t051_(GetQuicReloadableFlag(quic_disable_version_t051)),
-      disable_version_t050_(GetQuicReloadableFlag(quic_disable_version_t050)),
       disable_version_q050_(GetQuicReloadableFlag(quic_disable_version_q050)),
       disable_version_q046_(GetQuicReloadableFlag(quic_disable_version_q046)),
       disable_version_q043_(GetQuicReloadableFlag(quic_disable_version_q043)),
       allowed_supported_versions_(std::move(supported_versions)) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   RefilterSupportedVersions();
 }
@@ -49,16 +46,12 @@
 }
 
 void QuicVersionManager::MaybeRefilterSupportedVersions() {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   if (disable_version_draft_29_ !=
           GetQuicReloadableFlag(quic_disable_version_draft_29) ||
-      disable_version_draft_27_ !=
-          GetQuicReloadableFlag(quic_disable_version_draft_27) ||
       disable_version_t051_ !=
           GetQuicReloadableFlag(quic_disable_version_t051) ||
-      disable_version_t050_ !=
-          GetQuicReloadableFlag(quic_disable_version_t050) ||
       disable_version_q050_ !=
           GetQuicReloadableFlag(quic_disable_version_q050) ||
       disable_version_q046_ !=
@@ -67,10 +60,7 @@
           GetQuicReloadableFlag(quic_disable_version_q043)) {
     disable_version_draft_29_ =
         GetQuicReloadableFlag(quic_disable_version_draft_29);
-    disable_version_draft_27_ =
-        GetQuicReloadableFlag(quic_disable_version_draft_27);
     disable_version_t051_ = GetQuicReloadableFlag(quic_disable_version_t051);
-    disable_version_t050_ = GetQuicReloadableFlag(quic_disable_version_t050);
     disable_version_q050_ = GetQuicReloadableFlag(quic_disable_version_q050);
     disable_version_q046_ = GetQuicReloadableFlag(quic_disable_version_q046);
     disable_version_q043_ = GetQuicReloadableFlag(quic_disable_version_q043);
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h
index d3e62e4..d38019c 100644
--- a/quic/core/quic_version_manager.h
+++ b/quic/core/quic_version_manager.h
@@ -52,12 +52,8 @@
   // Cached value of reloadable flags.
   // quic_disable_version_draft_29 flag
   bool disable_version_draft_29_;
-  // quic_disable_version_draft_27 flag
-  bool disable_version_draft_27_;
   // quic_disable_version_t051 flag
   bool disable_version_t051_;
-  // quic_disable_version_t050 flag
-  bool disable_version_t050_;
   // quic_disable_version_q050 flag
   bool disable_version_q050_;
   // quic_disable_version_q046 flag
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index 487471f..b1a67ee 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -18,18 +18,16 @@
 class QuicVersionManagerTest : public QuicTest {};
 
 TEST_F(QuicVersionManagerTest, QuicVersionManager) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   for (const ParsedQuicVersion& version : AllSupportedVersions()) {
     QuicEnableVersion(version);
   }
   QuicDisableVersion(ParsedQuicVersion::Draft29());
-  QuicDisableVersion(ParsedQuicVersion::Draft27());
+  QuicDisableVersion(ParsedQuicVersion::T051());
   QuicVersionManager manager(AllSupportedVersions());
 
   ParsedQuicVersionVector expected_parsed_versions;
-  expected_parsed_versions.push_back(ParsedQuicVersion::T051());
-  expected_parsed_versions.push_back(ParsedQuicVersion::T050());
   expected_parsed_versions.push_back(ParsedQuicVersion::Q050());
   expected_parsed_versions.push_back(ParsedQuicVersion::Q046());
   expected_parsed_versions.push_back(ParsedQuicVersion::Q043());
@@ -40,39 +38,36 @@
             manager.GetSupportedVersions());
   EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
             manager.GetSupportedVersionsWithQuicCrypto());
-  EXPECT_THAT(
-      manager.GetSupportedAlpns(),
-      ElementsAre("h3-T051", "h3-T050", "h3-Q050", "h3-Q046", "h3-Q043"));
+  EXPECT_THAT(manager.GetSupportedAlpns(),
+              ElementsAre("h3-Q050", "h3-Q046", "h3-Q043"));
 
   int offset = 0;
   QuicEnableVersion(ParsedQuicVersion::Draft29());
   expected_parsed_versions.insert(expected_parsed_versions.begin() + offset,
                                   ParsedQuicVersion::Draft29());
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
-  EXPECT_EQ(expected_parsed_versions.size() - 3 - offset,
+  EXPECT_EQ(expected_parsed_versions.size() - 1 - offset,
             manager.GetSupportedVersionsWithQuicCrypto().size());
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
   EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
             manager.GetSupportedVersionsWithQuicCrypto());
   EXPECT_THAT(manager.GetSupportedAlpns(),
-              ElementsAre("h3-29", "h3-T051", "h3-T050", "h3-Q050", "h3-Q046",
-                          "h3-Q043"));
+              ElementsAre("h3-29", "h3-Q050", "h3-Q046", "h3-Q043"));
 
   offset++;
-  QuicEnableVersion(ParsedQuicVersion::Draft27());
+  QuicEnableVersion(ParsedQuicVersion::T051());
   expected_parsed_versions.insert(expected_parsed_versions.begin() + offset,
-                                  ParsedQuicVersion::Draft27());
+                                  ParsedQuicVersion::T051());
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
-  EXPECT_EQ(expected_parsed_versions.size() - 3 - offset,
+  EXPECT_EQ(expected_parsed_versions.size() - 1 - offset,
             manager.GetSupportedVersionsWithQuicCrypto().size());
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
   EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
             manager.GetSupportedVersionsWithQuicCrypto());
   EXPECT_THAT(manager.GetSupportedAlpns(),
-              ElementsAre("h3-29", "h3-27", "h3-T051", "h3-T050", "h3-Q050",
-                          "h3-Q046", "h3-Q043"));
+              ElementsAre("h3-29", "h3-T051", "h3-Q050", "h3-Q046", "h3-Q043"));
 }
 
 }  // namespace
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 6bda82b..05b9918 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -42,18 +42,14 @@
 }
 
 void SetVersionFlag(const ParsedQuicVersion& version, bool should_enable) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   const bool enable = should_enable;
   const bool disable = !should_enable;
   if (version == ParsedQuicVersion::Draft29()) {
     SetQuicReloadableFlag(quic_disable_version_draft_29, disable);
-  } else if (version == ParsedQuicVersion::Draft27()) {
-    SetQuicReloadableFlag(quic_disable_version_draft_27, disable);
   } else if (version == ParsedQuicVersion::T051()) {
     SetQuicReloadableFlag(quic_disable_version_t051, disable);
-  } else if (version == ParsedQuicVersion::T050()) {
-    SetQuicReloadableFlag(quic_disable_version_t050, disable);
   } else if (version == ParsedQuicVersion::Q050()) {
     SetQuicReloadableFlag(quic_disable_version_q050, disable);
   } else if (version == ParsedQuicVersion::Q046()) {
@@ -180,22 +176,21 @@
 bool ParsedQuicVersion::HasHandshakeDone() const {
   DCHECK(IsKnown());
   // HANDSHAKE_DONE is supported in T051 and all IETF drafts since draft-25.
-  return UsesTls() && transport_version > QUIC_VERSION_50;
+  return UsesTls();
 }
 
 bool ParsedQuicVersion::HasVarIntTransportParams() const {
   DCHECK(IsKnown());
   // Variable-length integer transport parameters are supported in T051 and
   // all IETF drafts since draft-27.
-  return UsesTls() && transport_version > QUIC_VERSION_50;
+  return UsesTls();
 }
 
 bool ParsedQuicVersion::AuthenticatesHandshakeConnectionIds() const {
   DCHECK(IsKnown());
   // Authentication of handshake connection IDs is supported in T051 and
   // all IETF drafts since draft-28.
-  return UsesTls() && transport_version > QUIC_VERSION_50 &&
-         transport_version != QUIC_VERSION_IETF_DRAFT_27;
+  return UsesTls();
 }
 
 bool ParsedQuicVersion::UsesTls() const {
@@ -239,16 +234,12 @@
 }
 
 QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   if (parsed_version == ParsedQuicVersion::Draft29()) {
     return MakeVersionLabel(0xff, 0x00, 0x00, 29);
-  } else if (parsed_version == ParsedQuicVersion::Draft27()) {
-    return MakeVersionLabel(0xff, 0x00, 0x00, 27);
   } else if (parsed_version == ParsedQuicVersion::T051()) {
     return MakeVersionLabel('T', '0', '5', '1');
-  } else if (parsed_version == ParsedQuicVersion::T050()) {
-    return MakeVersionLabel('T', '0', '5', '0');
   } else if (parsed_version == ParsedQuicVersion::Q050()) {
     return MakeVersionLabel('Q', '0', '5', '0');
   } else if (parsed_version == ParsedQuicVersion::Q046()) {
@@ -417,18 +408,10 @@
       if (!GetQuicReloadableFlag(quic_disable_version_draft_29)) {
         filtered_versions.push_back(version);
       }
-    } else if (version == ParsedQuicVersion::Draft27()) {
-      if (!GetQuicReloadableFlag(quic_disable_version_draft_27)) {
-        filtered_versions.push_back(version);
-      }
     } else if (version == ParsedQuicVersion::T051()) {
       if (!GetQuicReloadableFlag(quic_disable_version_t051)) {
         filtered_versions.push_back(version);
       }
-    } else if (version == ParsedQuicVersion::T050()) {
-      if (!GetQuicReloadableFlag(quic_disable_version_t050)) {
-        filtered_versions.push_back(version);
-      }
     } else if (version == ParsedQuicVersion::Q050()) {
       if (!GetQuicReloadableFlag(quic_disable_version_q050)) {
         filtered_versions.push_back(version);
@@ -529,14 +512,13 @@
     return #x
 
 std::string QuicVersionToString(QuicTransportVersion transport_version) {
-  static_assert(SupportedTransportVersions().size() == 6u,
+  static_assert(SupportedTransportVersions().size() == 5u,
                 "Supported versions out of sync");
   switch (transport_version) {
     RETURN_STRING_LITERAL(QUIC_VERSION_43);
     RETURN_STRING_LITERAL(QUIC_VERSION_46);
     RETURN_STRING_LITERAL(QUIC_VERSION_50);
     RETURN_STRING_LITERAL(QUIC_VERSION_51);
-    RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_27);
     RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_29);
     RETURN_STRING_LITERAL(QUIC_VERSION_UNSUPPORTED);
     RETURN_STRING_LITERAL(QUIC_VERSION_RESERVED_FOR_NEGOTIATION);
@@ -556,7 +538,7 @@
 }
 
 std::string ParsedQuicVersionToString(ParsedQuicVersion version) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   if (version == UnsupportedQuicVersion()) {
     return "0";
@@ -564,9 +546,6 @@
   if (version == ParsedQuicVersion::Draft29()) {
     DCHECK(version.UsesHttp3());
     return "draft29";
-  } else if (version == ParsedQuicVersion::Draft27()) {
-    DCHECK(version.UsesHttp3());
-    return "draft27";
   }
 
   return QuicVersionLabelToString(CreateQuicVersionLabel(version));
@@ -655,8 +634,6 @@
 std::string AlpnForVersion(ParsedQuicVersion parsed_version) {
   if (parsed_version == ParsedQuicVersion::Draft29()) {
     return "h3-29";
-  } else if (parsed_version == ParsedQuicVersion::Draft27()) {
-    return "h3-27";
   }
   return "h3-" + ParsedQuicVersionToString(parsed_version);
 }
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index c8f6718..60d50bf 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -119,7 +119,7 @@
   QUIC_VERSION_50 = 50,  // Header protection and initial obfuscators.
   QUIC_VERSION_51 = 51,  // draft-29 features but with GoogleQUIC frames.
   // Number 70 used to represent draft-ietf-quic-transport-25.
-  QUIC_VERSION_IETF_DRAFT_27 = 71,  // draft-ietf-quic-transport-27.
+  // Number 71 used to represent draft-ietf-quic-transport-27.
   // Number 72 used to represent draft-ietf-quic-transport-28.
   QUIC_VERSION_IETF_DRAFT_29 = 73,  // draft-ietf-quic-transport-29.
   // Version 99 was a dumping ground for IETF QUIC changes which were not yet
@@ -136,9 +136,8 @@
 
 // This array contains QUIC transport versions which we currently support.
 // DEPRECATED. Use SupportedVersions() instead.
-constexpr std::array<QuicTransportVersion, 6> SupportedTransportVersions() {
+constexpr std::array<QuicTransportVersion, 5> SupportedTransportVersions() {
   return {QUIC_VERSION_IETF_DRAFT_29,
-          QUIC_VERSION_IETF_DRAFT_27,
           QUIC_VERSION_51,
           QUIC_VERSION_50,
           QUIC_VERSION_46,
@@ -202,10 +201,10 @@
       return transport_version != QUIC_VERSION_UNSUPPORTED &&
              transport_version != QUIC_VERSION_RESERVED_FOR_NEGOTIATION &&
              transport_version != QUIC_VERSION_51 &&
-             transport_version != QUIC_VERSION_IETF_DRAFT_27 &&
              transport_version != QUIC_VERSION_IETF_DRAFT_29;
     case PROTOCOL_TLS1_3:
       return transport_version != QUIC_VERSION_UNSUPPORTED &&
+             transport_version != QUIC_VERSION_50 &&
              QuicVersionUsesCryptoFrames(transport_version);
   }
   return false;
@@ -255,18 +254,10 @@
     return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_29);
   }
 
-  static constexpr ParsedQuicVersion Draft27() {
-    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27);
-  }
-
   static constexpr ParsedQuicVersion T051() {
     return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_51);
   }
 
-  static constexpr ParsedQuicVersion T050() {
-    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50);
-  }
-
   static constexpr ParsedQuicVersion Q050() {
     return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50);
   }
@@ -419,10 +410,9 @@
   return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO};
 }
 
-constexpr std::array<ParsedQuicVersion, 7> SupportedVersions() {
+constexpr std::array<ParsedQuicVersion, 5> SupportedVersions() {
   return {
-      ParsedQuicVersion::Draft29(), ParsedQuicVersion::Draft27(),
-      ParsedQuicVersion::T051(),    ParsedQuicVersion::T050(),
+      ParsedQuicVersion::Draft29(), ParsedQuicVersion::T051(),
       ParsedQuicVersion::Q050(),    ParsedQuicVersion::Q046(),
       ParsedQuicVersion::Q043(),
   };
@@ -495,7 +485,7 @@
 QUIC_EXPORT_PRIVATE ParsedQuicVersion
 ParseQuicVersionLabel(QuicVersionLabel version_label);
 
-// Parses a QUIC version string such as "Q043" or "T050". Also supports parsing
+// Parses a QUIC version string such as "Q043" or "T051". Also supports parsing
 // ALPN such as "h3-29" or "h3-Q050". For PROTOCOL_QUIC_CRYPTO versions, also
 // supports parsing numbers such as "46".
 QUIC_EXPORT_PRIVATE ParsedQuicVersion
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index 452f3f8..fe4e227 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -74,7 +74,7 @@
   // Check that invalid combinations are not valid.
   EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, QUIC_VERSION_43));
   EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO,
-                                        QUIC_VERSION_IETF_DRAFT_27));
+                                        QUIC_VERSION_IETF_DRAFT_29));
   // Check that deprecated versions are not valid.
   EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO,
                                         static_cast<QuicTransportVersion>(33)));
@@ -86,7 +86,7 @@
 
 TEST_F(QuicVersionsTest, Features) {
   ParsedQuicVersion parsed_version_q043 = ParsedQuicVersion::Q043();
-  ParsedQuicVersion parsed_version_draft_27 = ParsedQuicVersion::Draft27();
+  ParsedQuicVersion parsed_version_draft_29 = ParsedQuicVersion::Draft29();
 
   EXPECT_TRUE(parsed_version_q043.IsKnown());
   EXPECT_FALSE(parsed_version_q043.KnowsWhichDecrypterToUse());
@@ -111,34 +111,36 @@
   EXPECT_FALSE(parsed_version_q043.HasIetfQuicFrames());
   EXPECT_FALSE(parsed_version_q043.HasHandshakeDone());
   EXPECT_FALSE(parsed_version_q043.HasVarIntTransportParams());
+  EXPECT_FALSE(parsed_version_q043.AuthenticatesHandshakeConnectionIds());
   EXPECT_FALSE(parsed_version_q043.UsesTls());
   EXPECT_TRUE(parsed_version_q043.UsesQuicCrypto());
 
-  EXPECT_TRUE(parsed_version_draft_27.IsKnown());
-  EXPECT_TRUE(parsed_version_draft_27.KnowsWhichDecrypterToUse());
-  EXPECT_TRUE(parsed_version_draft_27.UsesInitialObfuscators());
-  EXPECT_TRUE(parsed_version_draft_27.AllowsLowFlowControlLimits());
-  EXPECT_TRUE(parsed_version_draft_27.HasHeaderProtection());
-  EXPECT_TRUE(parsed_version_draft_27.SupportsRetry());
-  EXPECT_TRUE(parsed_version_draft_27.HasRetryIntegrityTag());
+  EXPECT_TRUE(parsed_version_draft_29.IsKnown());
+  EXPECT_TRUE(parsed_version_draft_29.KnowsWhichDecrypterToUse());
+  EXPECT_TRUE(parsed_version_draft_29.UsesInitialObfuscators());
+  EXPECT_TRUE(parsed_version_draft_29.AllowsLowFlowControlLimits());
+  EXPECT_TRUE(parsed_version_draft_29.HasHeaderProtection());
+  EXPECT_TRUE(parsed_version_draft_29.SupportsRetry());
+  EXPECT_TRUE(parsed_version_draft_29.HasRetryIntegrityTag());
   EXPECT_TRUE(
-      parsed_version_draft_27.SendsVariableLengthPacketNumberInLongHeader());
-  EXPECT_TRUE(parsed_version_draft_27.AllowsVariableLengthConnectionIds());
-  EXPECT_TRUE(parsed_version_draft_27.SupportsClientConnectionIds());
-  EXPECT_TRUE(parsed_version_draft_27.HasLengthPrefixedConnectionIds());
-  EXPECT_TRUE(parsed_version_draft_27.SupportsAntiAmplificationLimit());
-  EXPECT_TRUE(parsed_version_draft_27.CanSendCoalescedPackets());
-  EXPECT_FALSE(parsed_version_draft_27.SupportsGoogleAltSvcFormat());
-  EXPECT_TRUE(parsed_version_draft_27.HasIetfInvariantHeader());
-  EXPECT_TRUE(parsed_version_draft_27.SupportsMessageFrames());
-  EXPECT_TRUE(parsed_version_draft_27.UsesHttp3());
-  EXPECT_TRUE(parsed_version_draft_27.HasLongHeaderLengths());
-  EXPECT_TRUE(parsed_version_draft_27.UsesCryptoFrames());
-  EXPECT_TRUE(parsed_version_draft_27.HasIetfQuicFrames());
-  EXPECT_TRUE(parsed_version_draft_27.HasHandshakeDone());
-  EXPECT_TRUE(parsed_version_draft_27.HasVarIntTransportParams());
-  EXPECT_TRUE(parsed_version_draft_27.UsesTls());
-  EXPECT_FALSE(parsed_version_draft_27.UsesQuicCrypto());
+      parsed_version_draft_29.SendsVariableLengthPacketNumberInLongHeader());
+  EXPECT_TRUE(parsed_version_draft_29.AllowsVariableLengthConnectionIds());
+  EXPECT_TRUE(parsed_version_draft_29.SupportsClientConnectionIds());
+  EXPECT_TRUE(parsed_version_draft_29.HasLengthPrefixedConnectionIds());
+  EXPECT_TRUE(parsed_version_draft_29.SupportsAntiAmplificationLimit());
+  EXPECT_TRUE(parsed_version_draft_29.CanSendCoalescedPackets());
+  EXPECT_FALSE(parsed_version_draft_29.SupportsGoogleAltSvcFormat());
+  EXPECT_TRUE(parsed_version_draft_29.HasIetfInvariantHeader());
+  EXPECT_TRUE(parsed_version_draft_29.SupportsMessageFrames());
+  EXPECT_TRUE(parsed_version_draft_29.UsesHttp3());
+  EXPECT_TRUE(parsed_version_draft_29.HasLongHeaderLengths());
+  EXPECT_TRUE(parsed_version_draft_29.UsesCryptoFrames());
+  EXPECT_TRUE(parsed_version_draft_29.HasIetfQuicFrames());
+  EXPECT_TRUE(parsed_version_draft_29.HasHandshakeDone());
+  EXPECT_TRUE(parsed_version_draft_29.HasVarIntTransportParams());
+  EXPECT_TRUE(parsed_version_draft_29.AuthenticatesHandshakeConnectionIds());
+  EXPECT_TRUE(parsed_version_draft_29.UsesTls());
+  EXPECT_FALSE(parsed_version_draft_29.UsesQuicCrypto());
 }
 
 TEST_F(QuicVersionsTest, QuicVersionLabelToQuicTransportVersion) {
@@ -192,18 +194,10 @@
   log.StartCapturingLogs();
 
   for (const ParsedQuicVersion& version : AllSupportedVersions()) {
-    if (version.handshake_protocol != PROTOCOL_QUIC_CRYPTO) {
-      continue;
-    }
-    QuicVersionLabel version_label =
-        QuicVersionToQuicVersionLabel(version.transport_version);
-    EXPECT_EQ(PROTOCOL_QUIC_CRYPTO,
+    QuicVersionLabel version_label = CreateQuicVersionLabel(version);
+    EXPECT_EQ(version.handshake_protocol,
               QuicVersionLabelToHandshakeProtocol(version_label));
   }
-
-  // Test a TLS version:
-  QuicTag tls_tag = MakeQuicTag('0', '5', '0', 'T');
-  EXPECT_EQ(PROTOCOL_TLS1_3, QuicVersionLabelToHandshakeProtocol(tls_tag));
 }
 
 TEST_F(QuicVersionsTest, ParseQuicVersionLabel) {
@@ -213,8 +207,10 @@
             ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '6')));
   EXPECT_EQ(ParsedQuicVersion::Q050(),
             ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '5', '0')));
-  EXPECT_EQ(ParsedQuicVersion::T050(),
-            ParseQuicVersionLabel(MakeVersionLabel('T', '0', '5', '0')));
+  EXPECT_EQ(ParsedQuicVersion::T051(),
+            ParseQuicVersionLabel(MakeVersionLabel('T', '0', '5', '1')));
+  EXPECT_EQ(ParsedQuicVersion::Draft29(),
+            ParseQuicVersionLabel(MakeVersionLabel(0xff, 0x00, 0x00, 0x1d)));
 }
 
 TEST_F(QuicVersionsTest, ParseQuicVersionString) {
@@ -226,6 +222,8 @@
   EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("Q050"));
   EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("50"));
   EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionString("h3-Q050"));
+  EXPECT_EQ(ParsedQuicVersion::T051(), ParseQuicVersionString("T051"));
+  EXPECT_EQ(ParsedQuicVersion::T051(), ParseQuicVersionString("h3-T051"));
 
   EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString(""));
   EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("Q 46"));
@@ -233,14 +231,9 @@
   EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("99"));
   EXPECT_EQ(UnsupportedQuicVersion(), ParseQuicVersionString("70"));
 
-  EXPECT_EQ(ParsedQuicVersion::T050(), ParseQuicVersionString("T050"));
-  EXPECT_EQ(ParsedQuicVersion::T050(), ParseQuicVersionString("h3-T050"));
   EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("ff00001d"));
   EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("draft29"));
   EXPECT_EQ(ParsedQuicVersion::Draft29(), ParseQuicVersionString("h3-29"));
-  EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("ff00001b"));
-  EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("draft27"));
-  EXPECT_EQ(ParsedQuicVersion::Draft27(), ParseQuicVersionString("h3-27"));
 
   for (const ParsedQuicVersion& version : AllSupportedVersions()) {
     EXPECT_EQ(version,
@@ -249,11 +242,9 @@
 }
 
 TEST_F(QuicVersionsTest, ParseQuicVersionVectorString) {
-  ParsedQuicVersion version_q046(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46);
-  ParsedQuicVersion version_q050(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50);
-  ParsedQuicVersion version_t050(PROTOCOL_TLS1_3, QUIC_VERSION_50);
-  ParsedQuicVersion version_draft_27(PROTOCOL_TLS1_3,
-                                     QUIC_VERSION_IETF_DRAFT_27);
+  ParsedQuicVersion version_q046 = ParsedQuicVersion::Q046();
+  ParsedQuicVersion version_q050 = ParsedQuicVersion::Q050();
+  ParsedQuicVersion version_t051 = ParsedQuicVersion::T051();
   ParsedQuicVersion version_draft_29 = ParsedQuicVersion::Draft29();
 
   EXPECT_THAT(ParseQuicVersionVectorString(""), IsEmpty());
@@ -262,35 +253,35 @@
               ElementsAre(version_q050));
   EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050"),
               ElementsAre(version_q050));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-T050"),
-              ElementsAre(version_t050));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051"),
+              ElementsAre(version_t051));
 
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-27, h3-29"),
-              ElementsAre(version_draft_27, version_draft_29));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27,h3-29"),
-              ElementsAre(version_draft_29, version_draft_27));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27, h3-29"),
-              ElementsAre(version_draft_29, version_draft_27));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-27,h3-29"),
-              ElementsAre(version_draft_27, version_draft_29));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-27"),
-              ElementsAre(version_draft_29, version_draft_27));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-29"),
+              ElementsAre(version_t051, version_draft_29));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051,h3-29"),
+              ElementsAre(version_draft_29, version_t051));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051, h3-29"),
+              ElementsAre(version_draft_29, version_t051));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,h3-29"),
+              ElementsAre(version_t051, version_draft_29));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-29,h3-T051"),
+              ElementsAre(version_draft_29, version_t051));
 
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-27,50"),
-              ElementsAre(version_draft_27, version_q050));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,50"),
+              ElementsAre(version_t051, version_q050));
 
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-T050"),
-              ElementsAre(version_q050, version_t050));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, h3-Q050"),
-              ElementsAre(version_t050, version_q050));
-  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,h3-T050"),
-              ElementsAre(version_q050, version_t050));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-T050,QUIC_VERSION_50"),
-              ElementsAre(version_t050, version_q050));
-  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T050"),
-              ElementsAre(version_q050, version_t050));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, QUIC_VERSION_50"),
-              ElementsAre(version_t050, version_q050));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-T051"),
+              ElementsAre(version_q050, version_t051));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-Q050"),
+              ElementsAre(version_t051, version_q050));
+  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,h3-T051"),
+              ElementsAre(version_q050, version_t051));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051,QUIC_VERSION_50"),
+              ElementsAre(version_t051, version_q050));
+  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T051"),
+              ElementsAre(version_q050, version_t051));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, QUIC_VERSION_50"),
+              ElementsAre(version_t051, version_q050));
 
   EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50,QUIC_VERSION_46"),
               ElementsAre(version_q050, version_q046));
@@ -302,15 +293,15 @@
               ElementsAre(version_q050));
   EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, h3-Q050"),
               ElementsAre(version_q050));
-  EXPECT_THAT(ParseQuicVersionVectorString("h3-T050, h3-T050"),
-              ElementsAre(version_t050));
+  EXPECT_THAT(ParseQuicVersionVectorString("h3-T051, h3-T051"),
+              ElementsAre(version_t051));
   EXPECT_THAT(ParseQuicVersionVectorString("h3-Q050, QUIC_VERSION_50"),
               ElementsAre(version_q050));
   EXPECT_THAT(ParseQuicVersionVectorString(
                   "QUIC_VERSION_50, h3-Q050, QUIC_VERSION_50, h3-Q050"),
               ElementsAre(version_q050));
-  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T050, h3-Q050"),
-              ElementsAre(version_q050, version_t050));
+  EXPECT_THAT(ParseQuicVersionVectorString("QUIC_VERSION_50, h3-T051, h3-Q050"),
+              ElementsAre(version_q050, version_t051));
 
   EXPECT_THAT(ParseQuicVersionVectorString("99"), IsEmpty());
   EXPECT_THAT(ParseQuicVersionVectorString("70"), IsEmpty());
@@ -328,8 +319,8 @@
             CreateQuicVersionLabel(ParsedQuicVersion::Q050()));
 
   // Test a TLS version:
-  EXPECT_EQ(MakeVersionLabel('T', '0', '5', '0'),
-            CreateQuicVersionLabel(ParsedQuicVersion::T050()));
+  EXPECT_EQ(MakeVersionLabel('T', '0', '5', '1'),
+            CreateQuicVersionLabel(ParsedQuicVersion::T051()));
 
   // Make sure the negotiation reserved version is in the IETF reserved space.
   EXPECT_EQ(
@@ -402,8 +393,7 @@
   EXPECT_EQ("Q043", ParsedQuicVersionToString(ParsedQuicVersion::Q043()));
   EXPECT_EQ("Q046", ParsedQuicVersionToString(ParsedQuicVersion::Q046()));
   EXPECT_EQ("Q050", ParsedQuicVersionToString(ParsedQuicVersion::Q050()));
-  EXPECT_EQ("T050", ParsedQuicVersionToString(ParsedQuicVersion::T050()));
-  EXPECT_EQ("draft27", ParsedQuicVersionToString(ParsedQuicVersion::Draft27()));
+  EXPECT_EQ("T051", ParsedQuicVersionToString(ParsedQuicVersion::T051()));
   EXPECT_EQ("draft29", ParsedQuicVersionToString(ParsedQuicVersion::Draft29()));
 
   ParsedQuicVersionVector versions_vector = {ParsedQuicVersion::Q043()};
@@ -494,25 +484,22 @@
 // yet a typo was made in doing the #defines and it was caught
 // only in some test far removed from here... Better safe than sorry.
 TEST_F(QuicVersionsTest, CheckTransportVersionNumbersForTypos) {
-  static_assert(SupportedTransportVersions().size() == 6u,
+  static_assert(SupportedTransportVersions().size() == 5u,
                 "Supported versions out of sync");
   EXPECT_EQ(QUIC_VERSION_43, 43);
   EXPECT_EQ(QUIC_VERSION_46, 46);
   EXPECT_EQ(QUIC_VERSION_50, 50);
   EXPECT_EQ(QUIC_VERSION_51, 51);
-  EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_27, 71);
   EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_29, 73);
 }
 
 TEST_F(QuicVersionsTest, AlpnForVersion) {
-  static_assert(SupportedVersions().size() == 7u,
+  static_assert(SupportedVersions().size() == 5u,
                 "Supported versions out of sync");
   EXPECT_EQ("h3-Q043", AlpnForVersion(ParsedQuicVersion::Q043()));
   EXPECT_EQ("h3-Q046", AlpnForVersion(ParsedQuicVersion::Q046()));
   EXPECT_EQ("h3-Q050", AlpnForVersion(ParsedQuicVersion::Q050()));
-  EXPECT_EQ("h3-T050", AlpnForVersion(ParsedQuicVersion::T050()));
   EXPECT_EQ("h3-T051", AlpnForVersion(ParsedQuicVersion::T051()));
-  EXPECT_EQ("h3-27", AlpnForVersion(ParsedQuicVersion::Draft27()));
   EXPECT_EQ("h3-29", AlpnForVersion(ParsedQuicVersion::Draft29()));
 }