Make ALPN an array in QuicBufferedPacketStore

This is required to support QUIC+TLS where
ALPN is encoded as a list instead of a
single value.

gfe-relnote: refactor, no behavior change, not flag protected
PiperOrigin-RevId: 307922725
Change-Id: I08bbb0dc6db9264d17a64f569cf459ca590787c9
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 105d23d..0a014be 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -50,6 +50,11 @@
   return filtered_supported_versions_with_quic_crypto_;
 }
 
+const std::vector<std::string>& QuicVersionManager::GetSupportedAlpns() {
+  MaybeRefilterSupportedVersions();
+  return filtered_supported_alpns_;
+}
+
 void QuicVersionManager::MaybeRefilterSupportedVersions() {
   static_assert(SupportedVersions().size() == 8u,
                 "Supported versions out of sync");
@@ -89,7 +94,8 @@
       FilterSupportedVersions(allowed_supported_versions_);
   filtered_supported_versions_with_quic_crypto_.clear();
   filtered_transport_versions_.clear();
-  for (ParsedQuicVersion version : filtered_supported_versions_) {
+  filtered_supported_alpns_.clear();
+  for (const ParsedQuicVersion& version : filtered_supported_versions_) {
     auto transport_version = version.transport_version;
     if (std::find(filtered_transport_versions_.begin(),
                   filtered_transport_versions_.end(),
@@ -99,7 +105,12 @@
     if (version.handshake_protocol == PROTOCOL_QUIC_CRYPTO) {
       filtered_supported_versions_with_quic_crypto_.push_back(version);
     }
+    filtered_supported_alpns_.emplace_back(AlpnForVersion(version));
   }
 }
 
+void QuicVersionManager::AddCustomAlpn(const std::string& alpn) {
+  filtered_supported_alpns_.push_back(alpn);
+}
+
 }  // namespace quic