diff --git a/quic/core/crypto/certificate_view.cc b/quic/core/crypto/certificate_view.cc
index 6042b9e..e609b96 100644
--- a/quic/core/crypto/certificate_view.cc
+++ b/quic/core/crypto/certificate_view.cc
@@ -11,6 +11,7 @@
 
 #include "absl/strings/escaping.h"
 #include "absl/strings/match.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/str_join.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
@@ -29,7 +30,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_ip_address.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_time_utils.h"
 #include "net/third_party/quiche/src/common/quiche_data_reader.h"
@@ -123,7 +123,7 @@
 
   bssl::UniquePtr<char> oid_representation(CBS_asn1_oid_to_text(&oid_cbs));
   if (oid_representation == nullptr) {
-    return quiche::QuicheStrCat("(", absl::BytesToHexString(oid), ")");
+    return absl::StrCat("(", absl::BytesToHexString(oid), ")");
   }
   return std::string(oid_representation.get());
 }
@@ -139,8 +139,8 @@
   }
   // Note that this does not process encoding of |input| in any way.  This works
   // fine for the most cases.
-  return quiche::QuicheStrCat(AttributeNameToString(name), "=",
-                              absl::CHexEscape(CbsToStringPiece(value)));
+  return absl::StrCat(AttributeNameToString(name), "=",
+                      absl::CHexEscape(CbsToStringPiece(value)));
 }
 
 namespace {
@@ -227,7 +227,7 @@
       result.type = std::string(
           line.substr(kPemBegin.size(),
                       line.size() - kPemDashes.size() - kPemBegin.size()));
-      expected_end = quiche::QuicheStrCat(kPemEnd, result.type, kPemDashes);
+      expected_end = absl::StrCat(kPemEnd, result.type, kPemDashes);
       pending_message = true;
       continue;
     }
diff --git a/quic/core/crypto/crypto_framer.cc b/quic/core/crypto/crypto_framer.cc
index 2a3f795..7f94089 100644
--- a/quic/core/crypto/crypto_framer.cc
+++ b/quic/core/crypto/crypto_framer.cc
@@ -8,13 +8,13 @@
 #include <utility>
 
 #include "absl/base/attributes.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
 #include "net/third_party/quiche/src/quic/core/quic_data_reader.h"
 #include "net/third_party/quiche/src/quic/core/quic_data_writer.h"
 #include "net/third_party/quiche/src/quic/core/quic_packets.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
 namespace quic {
@@ -265,7 +265,7 @@
       }
       reader.ReadUInt16(&num_entries_);
       if (num_entries_ > kMaxEntries) {
-        error_detail_ = quiche::QuicheStrCat(num_entries_, " entries");
+        error_detail_ = absl::StrCat(num_entries_, " entries");
         return QUIC_CRYPTO_TOO_MANY_ENTRIES;
       }
       uint16_t padding;
@@ -287,10 +287,10 @@
         reader.ReadTag(&tag);
         if (i > 0 && tag <= tags_and_lengths_[i - 1].first) {
           if (tag == tags_and_lengths_[i - 1].first) {
-            error_detail_ = quiche::QuicheStrCat("Duplicate tag:", tag);
+            error_detail_ = absl::StrCat("Duplicate tag:", tag);
             return QUIC_CRYPTO_DUPLICATE_TAG;
           }
-          error_detail_ = quiche::QuicheStrCat("Tag ", tag, " out of order");
+          error_detail_ = absl::StrCat("Tag ", tag, " out of order");
           return QUIC_CRYPTO_TAGS_OUT_OF_ORDER;
         }
 
@@ -298,8 +298,8 @@
         reader.ReadUInt32(&end_offset);
 
         if (end_offset < last_end_offset) {
-          error_detail_ = quiche::QuicheStrCat("End offset: ", end_offset,
-                                               " vs ", last_end_offset);
+          error_detail_ =
+              absl::StrCat("End offset: ", end_offset, " vs ", last_end_offset);
           return QUIC_CRYPTO_TAGS_OUT_OF_ORDER;
         }
         tags_and_lengths_.push_back(std::make_pair(
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc
index 27c8ba8..5c0c851 100644
--- a/quic/core/crypto/crypto_utils.cc
+++ b/quic/core/crypto/crypto_utils.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "absl/base/macros.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/bytestring.h"
 #include "third_party/boringssl/src/include/openssl/hkdf.h"
@@ -34,7 +35,6 @@
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
 namespace quic {
@@ -584,7 +584,7 @@
     // reports that there was a version negotiation during the handshake.
     // Ensure that these two lists are identical.
     if (mismatch) {
-      *error_details = quiche::QuicheStrCat(
+      *error_details = absl::StrCat(
           "Downgrade attack detected: ServerVersions(", server_versions.size(),
           ")[", QuicVersionLabelVectorToString(server_versions, ",", 30),
           "] NegotiatedVersions(", negotiated_versions.size(), ")[",
@@ -630,7 +630,7 @@
     // downgrade attack.
     for (size_t i = 0; i < supported_versions.size(); ++i) {
       if (client_version == CreateQuicVersionLabel(supported_versions[i])) {
-        *error_details = quiche::QuicheStrCat(
+        *error_details = absl::StrCat(
             "Downgrade attack detected: ClientVersion[",
             QuicVersionLabelToString(client_version), "] ConnectionVersion[",
             ParsedQuicVersionToString(connection_version),
diff --git a/quic/core/crypto/proof_source_x509.cc b/quic/core/crypto/proof_source_x509.cc
index 530f9d5..f228a0c 100644
--- a/quic/core/crypto/proof_source_x509.cc
+++ b/quic/core/crypto/proof_source_x509.cc
@@ -6,13 +6,13 @@
 
 #include <memory>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/ssl.h"
 #include "net/third_party/quiche/src/quic/core/crypto/certificate_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
 #include "net/third_party/quiche/src/quic/core/quic_data_writer.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 
 namespace quic {
@@ -123,7 +123,7 @@
   }
   auto dot_pos = hostname.find('.');
   if (dot_pos != std::string::npos) {
-    std::string wildcard = quiche::QuicheStrCat("*", hostname.substr(dot_pos));
+    std::string wildcard = absl::StrCat("*", hostname.substr(dot_pos));
     it = certificate_map_.find(wildcard);
     if (it != certificate_map_.end()) {
       return it->second;
diff --git a/quic/core/crypto/transport_parameters.cc b/quic/core/crypto/transport_parameters.cc
index c047e0f..a3a3d0e 100644
--- a/quic/core/crypto/transport_parameters.cc
+++ b/quic/core/crypto/transport_parameters.cc
@@ -11,6 +11,7 @@
 #include <utility>
 
 #include "absl/strings/escaping.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "third_party/boringssl/src/include/openssl/digest.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
@@ -21,7 +22,6 @@
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_bug_tracker.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -336,8 +336,8 @@
   }
   if (!reader->IsDoneReading()) {
     *error_details =
-        quiche::QuicheStrCat("Received unexpected ", reader->BytesRemaining(),
-                             " bytes after parsing ", this->ToString(false));
+        absl::StrCat("Received unexpected ", reader->BytesRemaining(),
+                     " bytes after parsing ", this->ToString(false));
     return false;
   }
   return true;
@@ -489,8 +489,8 @@
       rv += absl::BytesToHexString(kv.second);
     } else {
       absl::string_view truncated(kv.second.data(), kMaxPrintableLength);
-      rv += quiche::QuicheStrCat(absl::BytesToHexString(truncated),
-                                 "...(length ", kv.second.length(), ")");
+      rv += absl::StrCat(absl::BytesToHexString(truncated), "...(length ",
+                         kv.second.length(), ")");
     }
   }
   rv += "]";
@@ -643,8 +643,8 @@
   }
   if (!stateless_reset_token.empty() &&
       stateless_reset_token.size() != kStatelessResetTokenLength) {
-    *error_details = quiche::QuicheStrCat(
-        "Stateless reset token has bad length ", stateless_reset_token.size());
+    *error_details = absl::StrCat("Stateless reset token has bad length ",
+                                  stateless_reset_token.size());
     return false;
   }
   if (perspective == Perspective::IS_CLIENT && preferred_address) {
@@ -653,9 +653,9 @@
   }
   if (preferred_address && preferred_address->stateless_reset_token.size() !=
                                kStatelessResetTokenLength) {
-    *error_details = quiche::QuicheStrCat(
-        "Preferred address stateless reset token has bad length ",
-        preferred_address->stateless_reset_token.size());
+    *error_details =
+        absl::StrCat("Preferred address stateless reset token has bad length ",
+                     preferred_address->stateless_reset_token.size());
     return false;
   }
   if (preferred_address &&
@@ -672,9 +672,9 @@
   }
   for (const auto& kv : custom_parameters) {
     if (TransportParameterIdIsKnown(kv.first)) {
-      *error_details = quiche::QuicheStrCat(
-          "Using custom_parameters with known ID ",
-          TransportParameterIdToString(kv.first), " is not allowed");
+      *error_details = absl::StrCat("Using custom_parameters with known ID ",
+                                    TransportParameterIdToString(kv.first),
+                                    " is not allowed");
       return false;
     }
   }
@@ -1127,8 +1127,8 @@
     }
     if (full_length != reader.BytesRemaining()) {
       *error_details =
-          quiche::QuicheStrCat("Invalid transport parameter full length ",
-                               full_length, " != ", reader.BytesRemaining());
+          absl::StrCat("Invalid transport parameter full length ", full_length,
+                       " != ", reader.BytesRemaining());
       return false;
     }
   }
@@ -1158,7 +1158,7 @@
         const size_t connection_id_length = value_reader.BytesRemaining();
         if (!QuicUtils::IsConnectionIdLengthValidForVersion(
                 connection_id_length, version.transport_version)) {
-          *error_details = quiche::QuicheStrCat(
+          *error_details = absl::StrCat(
               "Received original_destination_connection_id of invalid length ",
               connection_id_length);
           return false;
@@ -1184,9 +1184,9 @@
         absl::string_view stateless_reset_token =
             value_reader.ReadRemainingPayload();
         if (stateless_reset_token.length() != kStatelessResetTokenLength) {
-          *error_details = quiche::QuicheStrCat(
-              "Received stateless_reset_token of invalid length ",
-              stateless_reset_token.length());
+          *error_details =
+              absl::StrCat("Received stateless_reset_token of invalid length ",
+                           stateless_reset_token.length());
           return false;
         }
         out->stateless_reset_token.assign(
@@ -1285,7 +1285,7 @@
         const size_t connection_id_length = value_reader.BytesRemaining();
         if (!QuicUtils::IsConnectionIdLengthValidForVersion(
                 connection_id_length, version.transport_version)) {
-          *error_details = quiche::QuicheStrCat(
+          *error_details = absl::StrCat(
               "Received initial_source_connection_id of invalid length ",
               connection_id_length);
           return false;
@@ -1306,7 +1306,7 @@
         const size_t connection_id_length = value_reader.BytesRemaining();
         if (!QuicUtils::IsConnectionIdLengthValidForVersion(
                 connection_id_length, version.transport_version)) {
-          *error_details = quiche::QuicheStrCat(
+          *error_details = absl::StrCat(
               "Received retry_source_connection_id of invalid length ",
               connection_id_length);
           return false;
@@ -1405,7 +1405,7 @@
       return false;
     }
     if (!value_reader.IsDoneReading()) {
-      *error_details = quiche::QuicheStrCat(
+      *error_details = absl::StrCat(
           "Received unexpected ", value_reader.BytesRemaining(),
           " bytes after parsing ", TransportParameterIdToString(param_id));
       return false;
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index e16afe6..4ca2a50 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -7,6 +7,7 @@
 #include <string>
 #include <utility>
 
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_epoll.h"
@@ -18,7 +19,6 @@
 #include "net/third_party/quiche/src/quic/tools/fake_proof_verifier.h"
 #include "net/third_party/quiche/src/quic/tools/quic_client.h"
 #include "net/third_party/quiche/src/quic/tools/quic_url.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 DEFINE_QUIC_COMMAND_LINE_FLAG(std::string,
                               host,
@@ -382,14 +382,13 @@
   QuicEnableVersion(version);
 
   // Build the client, and try to connect.
-  QuicSocketAddress addr =
-      tools::LookupAddress(dns_host, quiche::QuicheStrCat(port));
+  QuicSocketAddress addr = tools::LookupAddress(dns_host, absl::StrCat(port));
   if (!addr.IsInitialized()) {
     QUIC_LOG(ERROR) << "Failed to resolve " << dns_host;
     return std::set<Feature>();
   }
   QuicServerId server_id(url_host, port, false);
-  std::string authority = quiche::QuicheStrCat(url_host, ":", port);
+  std::string authority = absl::StrCat(url_host, ":", port);
 
   QuicClientInteropRunner runner;
 
diff --git a/quic/tools/quic_client_test.cc b/quic/tools/quic_client_test.cc
index 034c4dd..454efa3 100644
--- a/quic/tools/quic_client_test.cc
+++ b/quic/tools/quic_client_test.cc
@@ -46,7 +46,7 @@
       continue;
     }
 
-    std::string fd_path = ReadLink(quiche::QuicheStrCat(kPathToFds, "/", name));
+    std::string fd_path = ReadLink(absl::StrCat(kPathToFds, "/", name));
     if (absl::StartsWith(fd_path, "socket:")) {
       socket_count++;
     }
diff --git a/quic/tools/quic_epoll_client_factory.cc b/quic/tools/quic_epoll_client_factory.cc
index b7dbb07..a7a2385 100644
--- a/quic/tools/quic_epoll_client_factory.cc
+++ b/quic/tools/quic_epoll_client_factory.cc
@@ -10,10 +10,10 @@
 
 #include <utility>
 
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/quic/core/quic_server_id.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
 #include "net/third_party/quiche/src/quic/tools/quic_client.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace quic {
 
@@ -26,7 +26,7 @@
     const QuicConfig& config,
     std::unique_ptr<ProofVerifier> verifier) {
   QuicSocketAddress addr = tools::LookupAddress(
-      address_family_for_lookup, host_for_lookup, quiche::QuicheStrCat(port));
+      address_family_for_lookup, host_for_lookup, absl::StrCat(port));
   if (!addr.IsInitialized()) {
     QUIC_LOG(ERROR) << "Unable to resolve address: " << host_for_lookup;
     return nullptr;
diff --git a/quic/tools/quic_memory_cache_backend_test.cc b/quic/tools/quic_memory_cache_backend_test.cc
index 5940baa..c3b93ab 100644
--- a/quic/tools/quic_memory_cache_backend_test.cc
+++ b/quic/tools/quic_memory_cache_backend_test.cc
@@ -5,11 +5,11 @@
 #include "net/third_party/quiche/src/quic/tools/quic_memory_cache_backend.h"
 
 #include "absl/strings/match.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_file_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/tools/quic_backend_response.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -189,7 +189,7 @@
     std::string url = scheme + "://" + request_host + path;
     QuicUrl resource_url(url);
     std::string body =
-        quiche::QuicheStrCat("This is server push response body for ", path);
+        absl::StrCat("This is server push response body for ", path);
     spdy::Http2HeaderBlock response_headers;
     response_headers[":status"] = "200";
     response_headers["content-length"] =
diff --git a/quic/tools/quic_url.cc b/quic/tools/quic_url.cc
index 9f9e98a..e9265f0 100644
--- a/quic/tools/quic_url.cc
+++ b/quic/tools/quic_url.cc
@@ -4,8 +4,8 @@
 
 #include "net/third_party/quiche/src/quic/tools/quic_url.h"
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
 namespace quic {
 
@@ -19,7 +19,7 @@
     return;
   }
 
-  url_ = GURL(quiche::QuicheStrCat(default_scheme, "://", url));
+  url_ = GURL(absl::StrCat(default_scheme, "://", url));
 }
 
 std::string QuicUrl::ToString() const {
@@ -51,7 +51,7 @@
   if (port == url::PORT_UNSPECIFIED) {
     return host;
   }
-  return quiche::QuicheStrCat(host, ":", port);
+  return absl::StrCat(host, ":", port);
 }
 
 std::string QuicUrl::PathParamsQuery() const {
diff --git a/spdy/core/fifo_write_scheduler.h b/spdy/core/fifo_write_scheduler.h
index 7b31891..026699f 100644
--- a/spdy/core/fifo_write_scheduler.h
+++ b/spdy/core/fifo_write_scheduler.h
@@ -9,7 +9,7 @@
 #include <set>
 #include <string>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/spdy/core/write_scheduler.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_string_utils.h"
 
@@ -232,7 +232,7 @@
 
 template <typename StreamIdType>
 std::string FifoWriteScheduler<StreamIdType>::DebugString() const {
-  return quiche::QuicheStrCat(
+  return absl::StrCat(
       "FifoWriteScheduler {num_streams=", registered_streams_.size(),
       " num_ready_streams=", NumReadyStreams(), "}");
 }
diff --git a/spdy/core/http2_priority_write_scheduler.h b/spdy/core/http2_priority_write_scheduler.h
index a58e224..ae65474 100644
--- a/spdy/core/http2_priority_write_scheduler.h
+++ b/spdy/core/http2_priority_write_scheduler.h
@@ -17,7 +17,7 @@
 #include <utility>
 #include <vector>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_intrusive_list.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
 #include "net/third_party/quiche/src/spdy/core/write_scheduler.h"
@@ -713,9 +713,9 @@
 
 template <typename StreamIdType>
 std::string Http2PriorityWriteScheduler<StreamIdType>::DebugString() const {
-  return quiche::QuicheStrCat(
-      "Http2PriorityWriteScheduler {num_registered_streams=",
-      NumRegisteredStreams(), " num_ready_streams=", NumReadyStreams(), "}");
+  return absl::StrCat("Http2PriorityWriteScheduler {num_registered_streams=",
+                      NumRegisteredStreams(),
+                      " num_ready_streams=", NumReadyStreams(), "}");
 }
 
 template <typename StreamIdType>
diff --git a/spdy/core/lifo_write_scheduler.h b/spdy/core/lifo_write_scheduler.h
index d2e7fcf..20f485b 100644
--- a/spdy/core/lifo_write_scheduler.h
+++ b/spdy/core/lifo_write_scheduler.h
@@ -10,7 +10,7 @@
 #include <set>
 #include <string>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/spdy/core/write_scheduler.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_containers.h"
 
@@ -228,7 +228,7 @@
 
 template <typename StreamIdType>
 std::string LifoWriteScheduler<StreamIdType>::DebugString() const {
-  return quiche::QuicheStrCat(
+  return absl::StrCat(
       "LifoWriteScheduler {num_streams=", registered_streams_.size(),
       " num_ready_streams=", NumReadyStreams(), "}");
 }
diff --git a/spdy/core/priority_write_scheduler.h b/spdy/core/priority_write_scheduler.h
index 72e3d18..687f3da 100644
--- a/spdy/core/priority_write_scheduler.h
+++ b/spdy/core/priority_write_scheduler.h
@@ -14,8 +14,8 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_containers.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
 #include "net/third_party/quiche/src/spdy/core/write_scheduler.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_bug_tracker.h"
@@ -261,7 +261,7 @@
   size_t NumRegisteredStreams() const override { return stream_infos_.size(); }
 
   std::string DebugString() const override {
-    return quiche::QuicheStrCat(
+    return absl::StrCat(
         "PriorityWriteScheduler {num_streams=", stream_infos_.size(),
         " num_ready_streams=", NumReadyStreams(), "}");
   }
diff --git a/spdy/core/spdy_alt_svc_wire_format.cc b/spdy/core/spdy_alt_svc_wire_format.cc
index ac85b9c..c0f8558 100644
--- a/spdy/core/spdy_alt_svc_wire_format.cc
+++ b/spdy/core/spdy_alt_svc_wire_format.cc
@@ -8,7 +8,7 @@
 #include <cctype>
 #include <limits>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_logging.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_string_utils.h"
 
@@ -265,9 +265,9 @@
       }
       value.push_back(c);
     }
-    value.append(quiche::QuicheStrCat(":", altsvc.port, "\""));
+    value.append(absl::StrCat(":", altsvc.port, "\""));
     if (altsvc.max_age != 86400) {
-      value.append(quiche::QuicheStrCat("; ma=", altsvc.max_age));
+      value.append(absl::StrCat("; ma=", altsvc.max_age));
     }
     if (!altsvc.version.empty()) {
       if (is_ietf_format_quic) {
@@ -282,7 +282,7 @@
           if (it != altsvc.version.begin()) {
             value.append(",");
           }
-          value.append(quiche::QuicheStrCat(*it));
+          value.append(absl::StrCat(*it));
         }
         value.append("\"");
       }
diff --git a/spdy/core/spdy_protocol.cc b/spdy/core/spdy_protocol.cc
index f9a1800..cb4b9b8 100644
--- a/spdy/core/spdy_protocol.cc
+++ b/spdy/core/spdy_protocol.cc
@@ -7,7 +7,7 @@
 #include <limits>
 #include <ostream>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
+#include "absl/strings/str_cat.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_bug_tracker.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_string_utils.h"
 
@@ -160,8 +160,8 @@
 std::string SettingsIdToString(SpdySettingsId id) {
   SpdyKnownSettingsId known_id;
   if (!ParseSettingsId(id, &known_id)) {
-    return quiche::QuicheStrCat("SETTINGS_UNKNOWN_",
-                                SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
+    return absl::StrCat("SETTINGS_UNKNOWN_",
+                        SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
   }
 
   switch (known_id) {
@@ -183,8 +183,8 @@
       return "SETTINGS_EXPERIMENT_SCHEDULER";
   }
 
-  return quiche::QuicheStrCat("SETTINGS_UNKNOWN_",
-                              SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
+  return absl::StrCat("SETTINGS_UNKNOWN_",
+                      SpdyHexEncodeUInt32AndTrim(uint32_t{id}));
 }
 
 SpdyErrorCode ParseErrorCode(uint32_t wire_error_code) {
