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) {
