gfe-relnote: Disable IETF QUIC on Cloud VIPs. Protected by gfe2_restart_flag_quic_disable_ietf_quic_on_cloud_vips.

PiperOrigin-RevId: 304627752
Change-Id: I494b166b7f5879bc19ad74a553ddd65083987bd6
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index c160ced..b6b1f63 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -975,6 +975,11 @@
   return version_manager_->GetSupportedVersions();
 }
 
+const ParsedQuicVersionVector&
+QuicDispatcher::GetSupportedVersionsWithQuicCrypto() {
+  return version_manager_->GetSupportedVersionsWithQuicCrypto();
+}
+
 void QuicDispatcher::DeliverPacketsToSession(
     const std::list<BufferedPacket>& packets,
     QuicSession* session) {
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index 71cbb57..1c1229a 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -210,6 +210,8 @@
 
   const ParsedQuicVersionVector& GetSupportedVersions();
 
+  const ParsedQuicVersionVector& GetSupportedVersionsWithQuicCrypto();
+
   const QuicConfig& config() const { return *config_; }
 
   const QuicCryptoServerConfig* crypto_config() const { return crypto_config_; }
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 1dda888..60d97c9 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -44,6 +44,12 @@
   return filtered_supported_versions_;
 }
 
+const ParsedQuicVersionVector&
+QuicVersionManager::GetSupportedVersionsWithQuicCrypto() {
+  MaybeRefilterSupportedVersions();
+  return filtered_supported_versions_with_quic_crypto_;
+}
+
 void QuicVersionManager::MaybeRefilterSupportedVersions() {
   static_assert(SupportedVersions().size() == 8u,
                 "Supported versions out of sync");
@@ -80,6 +86,7 @@
 void QuicVersionManager::RefilterSupportedVersions() {
   filtered_supported_versions_ =
       FilterSupportedVersions(allowed_supported_versions_);
+  filtered_supported_versions_with_quic_crypto_.clear();
   filtered_transport_versions_.clear();
   for (ParsedQuicVersion version : filtered_supported_versions_) {
     auto transport_version = version.transport_version;
@@ -88,6 +95,9 @@
                   transport_version) == filtered_transport_versions_.end()) {
       filtered_transport_versions_.push_back(transport_version);
     }
+    if (version.handshake_protocol == PROTOCOL_QUIC_CRYPTO) {
+      filtered_supported_versions_with_quic_crypto_.push_back(version);
+    }
   }
 }
 
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h
index 4d68374..1673c16 100644
--- a/quic/core/quic_version_manager.h
+++ b/quic/core/quic_version_manager.h
@@ -26,6 +26,9 @@
   // as the versions passed to the constructor.
   const ParsedQuicVersionVector& GetSupportedVersions();
 
+  // Returns currently supported versions using QUIC crypto.
+  const ParsedQuicVersionVector& GetSupportedVersionsWithQuicCrypto();
+
  protected:
   // If the value of any reloadable flag is different from the cached value,
   // re-filter |filtered_supported_versions_| and update the cached flag values.
@@ -63,6 +66,8 @@
   // This vector contains QUIC versions which are currently supported based on
   // flags.
   ParsedQuicVersionVector filtered_supported_versions_;
+  // Currently supported versions using QUIC crypto.
+  ParsedQuicVersionVector filtered_supported_versions_with_quic_crypto_;
   // This vector contains the transport versions from
   // |filtered_supported_versions_|. No guarantees are made that the same
   // transport version isn't repeated.
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index 98dc4a3..b8415b3 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -41,30 +41,44 @@
       ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43));
 
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
+  EXPECT_EQ(expected_parsed_versions,
+            manager.GetSupportedVersionsWithQuicCrypto());
 
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
+  EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
+            manager.GetSupportedVersionsWithQuicCrypto());
 
   SetQuicReloadableFlag(quic_enable_version_draft_27, true);
   expected_parsed_versions.push_back(
       ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27));
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
+  EXPECT_EQ(expected_parsed_versions.size() - 1,
+            manager.GetSupportedVersionsWithQuicCrypto().size());
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
+  EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
+            manager.GetSupportedVersionsWithQuicCrypto());
 
   SetQuicReloadableFlag(quic_enable_version_draft_25_v3, true);
   expected_parsed_versions.push_back(
       ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
-  EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
-            manager.GetSupportedVersions());
+  EXPECT_EQ(expected_parsed_versions.size() - 2,
+            manager.GetSupportedVersionsWithQuicCrypto().size());
+  EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
+            manager.GetSupportedVersionsWithQuicCrypto());
 
   SetQuicReloadableFlag(quic_enable_version_t050, true);
   expected_parsed_versions.push_back(
       ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
   EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
+  EXPECT_EQ(expected_parsed_versions.size() - 3,
+            manager.GetSupportedVersionsWithQuicCrypto().size());
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
+  EXPECT_EQ(CurrentSupportedVersionsWithQuicCrypto(),
+            manager.GetSupportedVersionsWithQuicCrypto());
 }
 
 }  // namespace