diff --git a/http2/hpack/decoder/hpack_block_decoder.cc b/http2/hpack/decoder/hpack_block_decoder.cc
index bb86597..04e4d29 100644
--- a/http2/hpack/decoder/hpack_block_decoder.cc
+++ b/http2/hpack/decoder/hpack_block_decoder.cc
@@ -8,6 +8,7 @@
 
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
@@ -49,10 +50,10 @@
 }
 
 std::string HpackBlockDecoder::DebugString() const {
-  return Http2StrCat("HpackBlockDecoder(", entry_decoder_.DebugString(),
-                     ", listener@",
-                     Http2Hex(reinterpret_cast<intptr_t>(listener_)),
-                     (before_entry_ ? ", between entries)" : ", in an entry)"));
+  return quiche::QuicheStrCat(
+      "HpackBlockDecoder(", entry_decoder_.DebugString(), ", listener@",
+      Http2Hex(reinterpret_cast<intptr_t>(listener_)),
+      (before_entry_ ? ", between entries)" : ", in an entry)"));
 }
 
 std::ostream& operator<<(std::ostream& out, const HpackBlockDecoder& v) {
diff --git a/http2/hpack/decoder/hpack_entry_type_decoder.cc b/http2/hpack/decoder/hpack_entry_type_decoder.cc
index ce91978..ebb5779 100644
--- a/http2/hpack/decoder/hpack_entry_type_decoder.cc
+++ b/http2/hpack/decoder/hpack_entry_type_decoder.cc
@@ -7,11 +7,12 @@
 #include "net/third_party/quiche/src/http2/platform/api/http2_bug_tracker.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
 std::string HpackEntryTypeDecoder::DebugString() const {
-  return Http2StrCat(
+  return quiche::QuicheStrCat(
       "HpackEntryTypeDecoder(varint_decoder=", varint_decoder_.DebugString(),
       ", entry_type=", entry_type_, ")");
 }
diff --git a/http2/hpack/decoder/hpack_string_decoder.cc b/http2/hpack/decoder/hpack_string_decoder.cc
index f74e536..ad5bb54 100644
--- a/http2/hpack/decoder/hpack_string_decoder.cc
+++ b/http2/hpack/decoder/hpack_string_decoder.cc
@@ -4,15 +4,15 @@
 
 #include "net/third_party/quiche/src/http2/hpack/decoder/hpack_string_decoder.h"
 
-#include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
 std::string HpackStringDecoder::DebugString() const {
-  return Http2StrCat("HpackStringDecoder(state=", StateToString(state_),
-                     ", length=", length_decoder_.DebugString(),
-                     ", remaining=", remaining_,
-                     ", huffman=", huffman_encoded_ ? "true)" : "false)");
+  return quiche::QuicheStrCat(
+      "HpackStringDecoder(state=", StateToString(state_),
+      ", length=", length_decoder_.DebugString(), ", remaining=", remaining_,
+      ", huffman=", huffman_encoded_ ? "true)" : "false)");
 }
 
 // static
@@ -25,7 +25,7 @@
     case kResumeDecodingLength:
       return "kResumeDecodingLength";
   }
-  return Http2StrCat("UNKNOWN_STATE(", static_cast<uint32_t>(v), ")");
+  return quiche::QuicheStrCat("UNKNOWN_STATE(", static_cast<uint32_t>(v), ")");
 }
 
 std::ostream& operator<<(std::ostream& out, const HpackStringDecoder& v) {
diff --git a/http2/hpack/hpack_string.cc b/http2/hpack/hpack_string.cc
index 77ae5a3..cb22f51 100644
--- a/http2/hpack/hpack_string.cc
+++ b/http2/hpack/hpack_string.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
-#include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
@@ -62,8 +62,8 @@
 }
 
 std::string HpackStringPair::DebugString() const {
-  return Http2StrCat("HpackStringPair(name=", name.ToString(),
-                     ", value=", value.ToString(), ")");
+  return quiche::QuicheStrCat("HpackStringPair(name=", name.ToString(),
+                              ", value=", value.ToString(), ")");
 }
 
 std::ostream& operator<<(std::ostream& os, const HpackStringPair& p) {
diff --git a/http2/hpack/http2_hpack_constants.cc b/http2/hpack/http2_hpack_constants.cc
index d697db0..4b121ac 100644
--- a/http2/hpack/http2_hpack_constants.cc
+++ b/http2/hpack/http2_hpack_constants.cc
@@ -4,7 +4,7 @@
 
 #include "net/third_party/quiche/src/http2/hpack/http2_hpack_constants.h"
 
-#include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
@@ -21,7 +21,8 @@
     case HpackEntryType::kNeverIndexedLiteralHeader:
       return "kNeverIndexedLiteralHeader";
   }
-  return Http2StrCat("UnknownHpackEntryType(", static_cast<int>(v), ")");
+  return quiche::QuicheStrCat("UnknownHpackEntryType(", static_cast<int>(v),
+                              ")");
 }
 
 std::ostream& operator<<(std::ostream& out, HpackEntryType v) {
diff --git a/http2/hpack/tools/hpack_example.cc b/http2/hpack/tools/hpack_example.cc
index 5e0e40c..31de86d 100644
--- a/http2/hpack/tools/hpack_example.cc
+++ b/http2/hpack/tools/hpack_example.cc
@@ -9,6 +9,7 @@
 #include "net/third_party/quiche/src/http2/platform/api/http2_bug_tracker.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 namespace test {
@@ -41,7 +42,7 @@
       continue;
     }
     HTTP2_BUG << "Can't parse byte " << static_cast<int>(c0)
-              << Http2StrCat(" (0x", Http2Hex(c0), ")")
+              << quiche::QuicheStrCat(" (0x", Http2Hex(c0), ")")
               << "\nExample: " << example;
   }
   CHECK_LT(0u, output->size()) << "Example is empty.";
diff --git a/http2/hpack/varint/hpack_varint_decoder.cc b/http2/hpack/varint/hpack_varint_decoder.cc
index e7e2c9c..e3fe745 100644
--- a/http2/hpack/varint/hpack_varint_decoder.cc
+++ b/http2/hpack/varint/hpack_varint_decoder.cc
@@ -5,6 +5,7 @@
 #include "net/third_party/quiche/src/http2/hpack/varint/hpack_varint_decoder.h"
 
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
@@ -121,8 +122,8 @@
 }
 
 std::string HpackVarintDecoder::DebugString() const {
-  return Http2StrCat("HpackVarintDecoder(value=", value_, ", offset=", offset_,
-                     ")");
+  return quiche::QuicheStrCat("HpackVarintDecoder(value=", value_,
+                              ", offset=", offset_, ")");
 }
 
 DecodeStatus HpackVarintDecoder::StartForTest(uint8_t prefix_value,
diff --git a/http2/hpack/varint/hpack_varint_round_trip_test.cc b/http2/hpack/varint/hpack_varint_round_trip_test.cc
index 58fc2c3..59473a7 100644
--- a/http2/hpack/varint/hpack_varint_round_trip_test.cc
+++ b/http2/hpack/varint/hpack_varint_round_trip_test.cc
@@ -18,6 +18,7 @@
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
 #include "net/third_party/quiche/src/http2/tools/random_decoder_test.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 
 using ::testing::AssertionFailure;
@@ -161,10 +162,10 @@
     for (const uint64_t value : values) {
       Encode(value, prefix_length);  // Sets buffer_.
 
-      std::string msg = Http2StrCat("value=", value, " (0x", Http2Hex(value),
-                                    "), prefix_length=", prefix_length,
-                                    ", expected_bytes=", expected_bytes, "\n",
-                                    Http2HexDump(buffer_));
+      std::string msg = quiche::QuicheStrCat(
+          "value=", value, " (0x", Http2Hex(value),
+          "), prefix_length=", prefix_length,
+          ", expected_bytes=", expected_bytes, "\n", Http2HexDump(buffer_));
 
       if (value == minimum) {
         HTTP2_LOG(INFO) << "Checking minimum; " << msg;
diff --git a/http2/http2_constants.cc b/http2/http2_constants.cc
index 37df919..daed778 100644
--- a/http2/http2_constants.cc
+++ b/http2/http2_constants.cc
@@ -6,6 +6,7 @@
 
 #include "net/third_party/quiche/src/http2/platform/api/http2_logging.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 
 namespace http2 {
@@ -35,7 +36,7 @@
     case Http2FrameType::ALTSVC:
       return "ALTSVC";
   }
-  return Http2StrCat("UnknownFrameType(", static_cast<int>(v), ")");
+  return quiche::QuicheStrCat("UnknownFrameType(", static_cast<int>(v), ")");
 }
 
 std::string Http2FrameTypeToString(uint8_t v) {
@@ -121,7 +122,7 @@
     case 0xd:
       return "HTTP_1_1_REQUIRED";
   }
-  return Http2StrCat("UnknownErrorCode(0x", Http2Hex(v), ")");
+  return quiche::QuicheStrCat("UnknownErrorCode(0x", Http2Hex(v), ")");
 }
 std::string Http2ErrorCodeToString(Http2ErrorCode v) {
   return Http2ErrorCodeToString(static_cast<uint32_t>(v));
@@ -142,7 +143,7 @@
     case 0x6:
       return "MAX_HEADER_LIST_SIZE";
   }
-  return Http2StrCat("UnknownSettingsParameter(0x", Http2Hex(v), ")");
+  return quiche::QuicheStrCat("UnknownSettingsParameter(0x", Http2Hex(v), ")");
 }
 std::string Http2SettingsParameterToString(Http2SettingsParameter v) {
   return Http2SettingsParameterToString(static_cast<uint32_t>(v));
diff --git a/http2/http2_structures.cc b/http2/http2_structures.cc
index 7b00db4..3558331 100644
--- a/http2/http2_structures.cc
+++ b/http2/http2_structures.cc
@@ -8,6 +8,7 @@
 #include <sstream>
 
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace http2 {
 
@@ -20,9 +21,9 @@
 }
 
 std::string Http2FrameHeader::ToString() const {
-  return Http2StrCat("length=", payload_length,
-                     ", type=", Http2FrameTypeToString(type),
-                     ", flags=", FlagsToString(), ", stream=", stream_id);
+  return quiche::QuicheStrCat(
+      "length=", payload_length, ", type=", Http2FrameTypeToString(type),
+      ", flags=", FlagsToString(), ", stream=", stream_id);
 }
 
 std::string Http2FrameHeader::FlagsToString() const {
diff --git a/http2/http2_structures_test.cc b/http2/http2_structures_test.cc
index 4903226..06ddc75 100644
--- a/http2/http2_structures_test.cc
+++ b/http2/http2_structures_test.cc
@@ -25,6 +25,7 @@
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_test_helpers.h"
 #include "net/third_party/quiche/src/http2/test_tools/http2_random.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 using ::testing::AssertionResult;
 using ::testing::AssertionSuccess;
@@ -440,7 +441,8 @@
 
   std::stringstream s;
   s << v;
-  EXPECT_EQ(Http2StrCat("promised_stream_id=", promised_stream_id), s.str());
+  EXPECT_EQ(quiche::QuicheStrCat("promised_stream_id=", promised_stream_id),
+            s.str());
 
   // High-bit is reserved, but not used, so we can set it.
   promised_stream_id |= 0x80000000;
@@ -497,8 +499,9 @@
 
   std::stringstream s;
   s << v;
-  EXPECT_EQ(Http2StrCat("window_size_increment=", window_size_increment),
-            s.str());
+  EXPECT_EQ(
+      quiche::QuicheStrCat("window_size_increment=", window_size_increment),
+      s.str());
 
   // High-bit is reserved, but not used, so we can set it.
   window_size_increment |= 0x80000000;
@@ -522,7 +525,7 @@
 
   std::stringstream s;
   s << v;
-  EXPECT_EQ(Http2StrCat("origin_length=", origin_length), s.str());
+  EXPECT_EQ(quiche::QuicheStrCat("origin_length=", origin_length), s.str());
 
   Http2AltSvcFields w{++origin_length};
   EXPECT_EQ(w, w);
diff --git a/http2/platform/api/http2_string_utils.h b/http2/platform/api/http2_string_utils.h
index 4a4e0b8..f14d93a 100644
--- a/http2/platform/api/http2_string_utils.h
+++ b/http2/platform/api/http2_string_utils.h
@@ -15,11 +15,6 @@
 namespace http2 {
 
 template <typename... Args>
-inline std::string Http2StrCat(const Args&... args) {
-  return Http2StrCatImpl(std::forward<const Args&>(args)...);
-}
-
-template <typename... Args>
 inline void Http2StrAppend(std::string* output, const Args&... args) {
   Http2StrAppendImpl(output, std::forward<const Args&>(args)...);
 }
diff --git a/http2/platform/api/http2_string_utils_test.cc b/http2/platform/api/http2_string_utils_test.cc
index 6f04c9c..bff55cc 100644
--- a/http2/platform/api/http2_string_utils_test.cc
+++ b/http2/platform/api/http2_string_utils_test.cc
@@ -7,69 +7,13 @@
 #include <cstdint>
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 
 namespace http2 {
 namespace test {
 namespace {
 
-TEST(Http2StringUtilsTest, Http2StrCat) {
-  // No arguments.
-  EXPECT_EQ("", Http2StrCat());
-
-  // Single string-like argument.
-  const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
-  const quiche::QuicheStringPiece stringpiece_foo(string_foo);
-  EXPECT_EQ("foo", Http2StrCat(kFoo));
-  EXPECT_EQ("foo", Http2StrCat(string_foo));
-  EXPECT_EQ("foo", Http2StrCat(stringpiece_foo));
-
-  // Two string-like arguments.
-  const char kBar[] = "bar";
-  const quiche::QuicheStringPiece stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
-  EXPECT_EQ("foobar", Http2StrCat(kFoo, kBar));
-  EXPECT_EQ("foobar", Http2StrCat(kFoo, string_bar));
-  EXPECT_EQ("foobar", Http2StrCat(kFoo, stringpiece_bar));
-  EXPECT_EQ("foobar", Http2StrCat(string_foo, kBar));
-  EXPECT_EQ("foobar", Http2StrCat(string_foo, string_bar));
-  EXPECT_EQ("foobar", Http2StrCat(string_foo, stringpiece_bar));
-  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, kBar));
-  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, string_bar));
-  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, stringpiece_bar));
-
-  // Many-many arguments.
-  EXPECT_EQ(
-      "foobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
-      Http2StrCat("foo", "bar", "baz", "qux", "quux", "quuz", "corge", "grault",
-                  "garply", "waldo", "fred", "plugh", "xyzzy", "thud"));
-
-  // Numerical arguments.
-  const int16_t i = 1;
-  const uint64_t u = 8;
-  const double d = 3.1415;
-
-  EXPECT_EQ("1 8", Http2StrCat(i, " ", u));
-  EXPECT_EQ("3.14151181", Http2StrCat(d, i, i, u, i));
-  EXPECT_EQ("i: 1, u: 8, d: 3.1415",
-            Http2StrCat("i: ", i, ", u: ", u, ", d: ", d));
-
-  // Boolean arguments.
-  const bool t = true;
-  const bool f = false;
-
-  EXPECT_EQ("1", Http2StrCat(t));
-  EXPECT_EQ("0", Http2StrCat(f));
-  EXPECT_EQ("0110", Http2StrCat(f, t, t, f));
-
-  // Mixed string-like, numerical, and Boolean arguments.
-  EXPECT_EQ("foo1foo081bar3.14151",
-            Http2StrCat(kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t));
-  EXPECT_EQ("3.141511bar18bar13.14150",
-            Http2StrCat(d, t, t, string_bar, i, u, kBar, t, d, f));
-}
-
 TEST(Http2StringUtilsTest, Http2StrAppend) {
   // No arguments on empty string.
   std::string output;
