Use string literal for HTTP/3 setting identifiers.

gfe-relnote: protected by disabled v99 flag.
PiperOrigin-RevId: 270737244
Change-Id: I961d82227863f6c1422d19e43473eb52ceedb86b
diff --git a/quic/core/http/http_frames.h b/quic/core/http/http_frames.h
index ced2032..dde8b1e 100644
--- a/quic/core/http/http_frames.h
+++ b/quic/core/http/http_frames.h
@@ -9,6 +9,7 @@
 #include <map>
 #include <ostream>
 
+#include "net/third_party/quiche/src/quic/core/http/spdy_utils.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_str_cat.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
@@ -128,8 +129,10 @@
   std::string ToString() const {
     std::string s;
     for (auto it : values) {
-      std::string setting =
-          QuicStrCat("[id->", it.first, " | value->", it.second, "] ");
+      std::string setting = QuicStrCat(
+          SpdyUtils::H3SettingsToString(
+              static_cast<Http3AndQpackSettingsIdentifiers>(it.first)),
+          " = ", it.second, "; ");
       QuicStrAppend(&s, setting);
     }
     return s;
diff --git a/quic/core/http/spdy_utils.cc b/quic/core/http/spdy_utils.cc
index d72a18d..546b7a8 100644
--- a/quic/core/http/spdy_utils.cc
+++ b/quic/core/http/spdy_utils.cc
@@ -12,6 +12,7 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_str_cat.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_text_utils.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
@@ -149,4 +150,21 @@
   return true;
 }
 
+#define RETURN_STRING_LITERAL(x) \
+  case x:                        \
+    return #x;
+
+// static
+std::string SpdyUtils::H3SettingsToString(
+    Http3AndQpackSettingsIdentifiers identifier) {
+  switch (identifier) {
+    RETURN_STRING_LITERAL(SETTINGS_QPACK_MAX_TABLE_CAPACITY);
+    RETURN_STRING_LITERAL(SETTINGS_MAX_HEADER_LIST_SIZE);
+    RETURN_STRING_LITERAL(SETTINGS_QPACK_BLOCKED_STREAMS);
+    RETURN_STRING_LITERAL(SETTINGS_NUM_PLACEHOLDERS);
+  }
+  return QuicStrCat("UNSUPPORTED_SETTINGS_TYPE(", identifier, ")");
+}
+
+#undef RETURN_STRING_LITERAL  // undef for jumbo builds
 }  // namespace quic
diff --git a/quic/core/http/spdy_utils.h b/quic/core/http/spdy_utils.h
index 4b962c2..43bca5e 100644
--- a/quic/core/http/spdy_utils.h
+++ b/quic/core/http/spdy_utils.h
@@ -9,6 +9,7 @@
 #include <cstdint>
 #include <string>
 
+#include "net/third_party/quiche/src/quic/core/http/http_constants.h"
 #include "net/third_party/quiche/src/quic/core/http/quic_header_list.h"
 #include "net/third_party/quiche/src/quic/core/quic_packets.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
@@ -50,6 +51,10 @@
   // which must be fully-qualified.
   static bool PopulateHeaderBlockFromUrl(const std::string url,
                                          spdy::SpdyHeaderBlock* headers);
+
+  // Returns HTTP/3 SETTINGS identifier as a string.
+  static std::string H3SettingsToString(
+      Http3AndQpackSettingsIdentifiers identifier);
 };
 
 }  // namespace quic