Replace QuicheStrCat() with absl::StrCat()

PiperOrigin-RevId: 345724381
Change-Id: Ie9decd3ceb0b643894e8420d2e5b88024c1eafd5
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index e850aad..dda0c3e 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -11,6 +11,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h"
 #include "net/third_party/quiche/src/quic/core/http/http_constants.h"
@@ -65,7 +66,6 @@
 #include "net/third_party/quiche/src/quic/tools/quic_server.h"
 #include "net/third_party/quiche/src/quic/tools/quic_simple_client_stream.h"
 #include "net/third_party/quiche/src/quic/tools/quic_simple_server_stream.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"
 
 using spdy::kV3LowestPriority;
@@ -104,9 +104,8 @@
 
 // Used by ::testing::PrintToStringParamName().
 std::string PrintToString(const TestParams& p) {
-  std::string rv =
-      quiche::QuicheStrCat(ParsedQuicVersionToString(p.version), "_",
-                           QuicTagToString(p.congestion_control_tag));
+  std::string rv = absl::StrCat(ParsedQuicVersionToString(p.version), "_",
+                                QuicTagToString(p.congestion_control_tag));
   std::replace(rv.begin(), rv.end(), ',', '_');
   std::replace(rv.begin(), rv.end(), ' ', '_');
   return rv;
@@ -3566,8 +3565,7 @@
       std::string body =
           use_large_response
               ? large_resource
-              : quiche::QuicheStrCat("This is server push response body for ",
-                                     url);
+              : absl::StrCat("This is server push response body for ", url);
       SpdyHeaderBlock response_headers;
       response_headers[":status"] = "200";
       response_headers["content-length"] =
@@ -3630,7 +3628,7 @@
   for (const std::string& url : push_urls) {
     QUIC_DVLOG(1) << "send request for pushed stream on url " << url;
     std::string expected_body =
-        quiche::QuicheStrCat("This is server push response body for ", url);
+        absl::StrCat("This is server push response body for ", url);
     std::string response_body = client_->SendSynchronousRequest(url);
     QUIC_DVLOG(1) << "response body " << response_body;
     EXPECT_EQ(expected_body, response_body);
@@ -3684,7 +3682,7 @@
     // as the responses are already in the client's cache.
     QUIC_DVLOG(1) << "send request for pushed stream on url " << url;
     std::string expected_body =
-        quiche::QuicheStrCat("This is server push response body for ", url);
+        absl::StrCat("This is server push response body for ", url);
     std::string response_body = client_->SendSynchronousRequest(url);
     QUIC_DVLOG(1) << "response body " << response_body;
     EXPECT_EQ(expected_body, response_body);
@@ -3724,8 +3722,7 @@
   const size_t kNumResources = 1 + kNumMaxStreams;  // 11.
   std::string push_urls[11];
   for (size_t i = 0; i < kNumResources; ++i) {
-    push_urls[i] =
-        quiche::QuicheStrCat("https://example.com/push_resources", i);
+    push_urls[i] = absl::StrCat("https://example.com/push_resources", i);
   }
   AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
                                       push_urls, kNumResources, 0);
@@ -3742,9 +3739,8 @@
   for (const std::string& url : push_urls) {
     // Sending subsequent requesets will not actually send anything on the wire,
     // as the responses are already in the client's cache.
-    EXPECT_EQ(
-        quiche::QuicheStrCat("This is server push response body for ", url),
-        client_->SendSynchronousRequest(url));
+    EXPECT_EQ(absl::StrCat("This is server push response body for ", url),
+              client_->SendSynchronousRequest(url));
   }
 
   // Only 1 request should have been sent.
@@ -3787,7 +3783,7 @@
   const size_t kNumResources = kNumMaxStreams + 1;
   std::string push_urls[11];
   for (size_t i = 0; i < kNumResources; ++i) {
-    push_urls[i] = quiche::QuicheStrCat("http://example.com/push_resources", i);
+    push_urls[i] = absl::StrCat("http://example.com/push_resources", i);
   }
   AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
                                       push_urls, kNumResources, kBodySize);
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index 78703a6..590f2fc 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -154,10 +154,9 @@
           static_cast<uint64_t>(http2::Http2FrameType::WINDOW_UPDATE) ||
       current_frame_type_ ==
           static_cast<uint64_t>(http2::Http2FrameType::CONTINUATION)) {
-    RaiseError(
-        QUIC_HTTP_RECEIVE_SPDY_FRAME,
-        quiche::QuicheStrCat("HTTP/2 frame received in a HTTP/3 connection: ",
-                             current_frame_type_));
+    RaiseError(QUIC_HTTP_RECEIVE_SPDY_FRAME,
+               absl::StrCat("HTTP/2 frame received in a HTTP/3 connection: ",
+                            current_frame_type_));
     return false;
   }
   state_ = STATE_READING_FRAME_LENGTH;
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index f7b84bd..68f9d7f 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -9,6 +9,7 @@
 
 #include "absl/base/macros.h"
 #include "absl/strings/escaping.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/http/http_encoder.h"
 #include "net/third_party/quiche/src/quic/core/http/http_frames.h"
@@ -17,7 +18,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_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_text_utils.h"
 
 using ::testing::_;
@@ -164,8 +164,7 @@
   // Append garbage to |input|, then process it in a single call to
   // HttpDecoder::ProcessInput().  Verify that garbage is not read.
   QuicByteCount ProcessInputWithGarbageAppended(absl::string_view input) {
-    std::string input_with_garbage_appended =
-        quiche::QuicheStrCat(input, "blahblah");
+    std::string input_with_garbage_appended = absl::StrCat(input, "blahblah");
     QuicByteCount processed_bytes = ProcessInput(input_with_garbage_appended);
 
     // Guaranteed by HttpDecoder::ProcessInput() contract.
@@ -258,11 +257,11 @@
 
 TEST_F(HttpDecoderTest, PushPromiseFrame) {
   InSequence s;
-  std::string input = quiche::QuicheStrCat(
-      absl::HexStringToBytes("05"                  // type (PUSH PROMISE)
-                             "0f"                  // length
-                             "C000000000000101"),  // push id 257
-      "Headers");                                  // headers
+  std::string input =
+      absl::StrCat(absl::HexStringToBytes("05"  // type (PUSH PROMISE)
+                                          "0f"  // length
+                                          "C000000000000101"),  // push id 257
+                   "Headers");                                  // headers
 
   // Visitor pauses processing.
   EXPECT_CALL(visitor_, OnPushPromiseFrameStart(2)).WillOnce(Return(false));
@@ -485,10 +484,9 @@
 
 TEST_F(HttpDecoderTest, DataFrame) {
   InSequence s;
-  std::string input =
-      quiche::QuicheStrCat(absl::HexStringToBytes("00"    // type (DATA)
-                                                  "05"),  // length
-                           "Data!");                      // data
+  std::string input = absl::StrCat(absl::HexStringToBytes("00"    // type (DATA)
+                                                          "05"),  // length
+                                   "Data!");                      // data
 
   // Visitor pauses processing.
   EXPECT_CALL(visitor_, OnDataFrameStart(2, 5)).WillOnce(Return(false));
@@ -615,9 +613,9 @@
 TEST_F(HttpDecoderTest, HeadersFrame) {
   InSequence s;
   std::string input =
-      quiche::QuicheStrCat(absl::HexStringToBytes("01"    // type (HEADERS)
-                                                  "07"),  // length
-                           "Headers");                    // headers
+      absl::StrCat(absl::HexStringToBytes("01"    // type (HEADERS)
+                                          "07"),  // length
+                   "Headers");                    // headers
 
   // Visitor pauses processing.
   EXPECT_CALL(visitor_, OnHeadersFrameStart(2, 7)).WillOnce(Return(false));
@@ -799,12 +797,12 @@
 TEST_F(HttpDecoderTest, HeadersPausedThenData) {
   InSequence s;
   std::string input =
-      quiche::QuicheStrCat(absl::HexStringToBytes("01"    // type (HEADERS)
-                                                  "07"),  // length
-                           "Headers",                     // headers
-                           absl::HexStringToBytes("00"    // type (DATA)
-                                                  "05"),  // length
-                           "Data!");                      // data
+      absl::StrCat(absl::HexStringToBytes("01"    // type (HEADERS)
+                                          "07"),  // length
+                   "Headers",                     // headers
+                   absl::HexStringToBytes("00"    // type (DATA)
+                                          "05"),  // length
+                   "Data!");                      // data
 
   // Visitor pauses processing, maybe because header decompression is blocked.
   EXPECT_CALL(visitor_, OnHeadersFrameStart(2, 7));
diff --git a/quic/core/http/http_frames.h b/quic/core/http/http_frames.h
index 4959879..319e42b 100644
--- a/quic/core/http/http_frames.h
+++ b/quic/core/http/http_frames.h
@@ -11,11 +11,11 @@
 #include <ostream>
 #include <sstream>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #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_string_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_framer.h"
 
 namespace quic {
@@ -84,7 +84,7 @@
   std::string ToString() const {
     std::string s;
     for (auto it : values) {
-      std::string setting = quiche::QuicheStrCat(
+      std::string setting = absl::StrCat(
           SpdyUtils::H3SettingsToString(
               static_cast<Http3AndQpackSettingsIdentifiers>(it.first)),
           " = ", it.second, "; ");
@@ -165,11 +165,10 @@
                     rhs.priority_field_value);
   }
   std::string ToString() const {
-    return quiche::QuicheStrCat(
-        "Priority Frame : {prioritized_element_type: ",
-        static_cast<int>(prioritized_element_type),
-        ", prioritized_element_id: ", prioritized_element_id,
-        ", priority_field_value: ", priority_field_value, "}");
+    return absl::StrCat("Priority Frame : {prioritized_element_type: ",
+                        static_cast<int>(prioritized_element_type),
+                        ", prioritized_element_id: ", prioritized_element_id,
+                        ", priority_field_value: ", priority_field_value, "}");
   }
 
   friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(
diff --git a/quic/core/http/quic_headers_stream_test.cc b/quic/core/http/quic_headers_stream_test.cc
index 8f604b3..dc6a46d 100644
--- a/quic/core/http/quic_headers_stream_test.cc
+++ b/quic/core/http/quic_headers_stream_test.cc
@@ -11,6 +11,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h"
 #include "net/third_party/quiche/src/quic/core/http/spdy_utils.h"
@@ -25,7 +26,6 @@
 #include "net/third_party/quiche/src/quic/test_tools/quic_spdy_session_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_stream_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 #include "net/third_party/quiche/src/spdy/core/http2_frame_decoder_adapter.h"
 #include "net/third_party/quiche/src/spdy/core/recording_headers_handler.h"
@@ -191,7 +191,7 @@
 
 // Used by ::testing::PrintToStringParamName().
 std::string PrintToString(const TestParams& tp) {
-  return quiche::QuicheStrCat(
+  return absl::StrCat(
       ParsedQuicVersionToString(tp.version), "_",
       (tp.perspective == Perspective::IS_CLIENT ? "client" : "server"));
 }
@@ -687,36 +687,32 @@
   data.AddSetting(SETTINGS_ENABLE_PUSH, 1);
   data.AddSetting(SETTINGS_MAX_FRAME_SIZE, 1250);
   SpdySerializedFrame frame(framer_->SerializeFrame(data));
-  EXPECT_CALL(
-      *connection_,
-      CloseConnection(
-          QUIC_INVALID_HEADERS_STREAM_DATA,
-          quiche::QuicheStrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
+  EXPECT_CALL(*connection_,
+              CloseConnection(
+                  QUIC_INVALID_HEADERS_STREAM_DATA,
+                  absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
                                SETTINGS_MAX_CONCURRENT_STREAMS),
-          _));
-  EXPECT_CALL(
-      *connection_,
-      CloseConnection(
-          QUIC_INVALID_HEADERS_STREAM_DATA,
-          quiche::QuicheStrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
+                  _));
+  EXPECT_CALL(*connection_,
+              CloseConnection(
+                  QUIC_INVALID_HEADERS_STREAM_DATA,
+                  absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
                                SETTINGS_INITIAL_WINDOW_SIZE),
-          _));
+                  _));
   if (session_.perspective() == Perspective::IS_CLIENT) {
-    EXPECT_CALL(
-        *connection_,
-        CloseConnection(
-            QUIC_INVALID_HEADERS_STREAM_DATA,
-            quiche::QuicheStrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
+    EXPECT_CALL(*connection_,
+                CloseConnection(
+                    QUIC_INVALID_HEADERS_STREAM_DATA,
+                    absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
                                  SETTINGS_ENABLE_PUSH),
-            _));
+                    _));
   }
-  EXPECT_CALL(
-      *connection_,
-      CloseConnection(
-          QUIC_INVALID_HEADERS_STREAM_DATA,
-          quiche::QuicheStrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
+  EXPECT_CALL(*connection_,
+              CloseConnection(
+                  QUIC_INVALID_HEADERS_STREAM_DATA,
+                  absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
                                SETTINGS_MAX_FRAME_SIZE),
-          _));
+                  _));
   stream_frame_.data_buffer = frame.data();
   stream_frame_.data_length = frame.size();
   headers_stream_->OnStreamFrame(stream_frame_);
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index 4f5f1cf..cc6857f 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -284,7 +284,7 @@
 void QuicReceiveControlStream::OnWrongFrame(absl::string_view frame_type) {
   OnUnrecoverableError(
       QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
-      quiche::QuicheStrCat(frame_type, " frame received on control stream"));
+      absl::StrCat(frame_type, " frame received on control stream"));
 }
 
 }  // namespace quic
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index 5a401b6..51948e6 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -51,7 +51,7 @@
 
 // Used by ::testing::PrintToStringParamName().
 std::string PrintToString(const TestParams& tp) {
-  return quiche::QuicheStrCat(
+  return absl::StrCat(
       ParsedQuicVersionToString(tp.version), "_",
       (tp.perspective == Perspective::IS_CLIENT ? "client" : "server"));
 }
diff --git a/quic/core/http/quic_send_control_stream_test.cc b/quic/core/http/quic_send_control_stream_test.cc
index 4f1b461..95857e3 100644
--- a/quic/core/http/quic_send_control_stream_test.cc
+++ b/quic/core/http/quic_send_control_stream_test.cc
@@ -48,7 +48,7 @@
 
 // Used by ::testing::PrintToStringParamName().
 std::string PrintToString(const TestParams& tp) {
-  return quiche::QuicheStrCat(
+  return absl::StrCat(
       ParsedQuicVersionToString(tp.version), "_",
       (tp.perspective == Perspective::IS_CLIENT ? "client" : "server"));
 }
diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc
index 93d3e58..88ad4f8 100644
--- a/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "absl/base/macros.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/crypto/null_decrypter.h"
 #include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h"
@@ -950,7 +951,7 @@
         connection_->transport_version(), promise_count);
     auto headers = QuicHeaderList();
     headers.OnHeaderBlockStart();
-    headers.OnHeader(":path", quiche::QuicheStrCat("/", promise_count));
+    headers.OnHeader(":path", absl::StrCat("/", promise_count));
     headers.OnHeader(":authority", "www.google.com");
     headers.OnHeader(":method", "GET");
     headers.OnHeader(":scheme", "https");
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 06b1760..7f7deb2 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -12,6 +12,7 @@
 
 #include "absl/base/attributes.h"
 #include "absl/strings/numbers.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/http/http_constants.h"
 #include "net/third_party/quiche/src/quic/core/http/quic_headers_stream.h"
@@ -25,7 +26,6 @@
 #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_stack_trace.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/spdy/core/http2_frame_decoder_adapter.h"
 
@@ -201,10 +201,10 @@
       default:
         code = QUIC_INVALID_HEADERS_STREAM_DATA;
     }
-    CloseConnection(quiche::QuicheStrCat(
-                        "SPDY framing error: ", detailed_error,
-                        Http2DecoderAdapter::SpdyFramerErrorToString(error)),
-                    code);
+    CloseConnection(
+        absl::StrCat("SPDY framing error: ", detailed_error,
+                     Http2DecoderAdapter::SpdyFramerErrorToString(error)),
+        code);
   }
 
   void OnDataFrameHeader(SpdyStreamId /*stream_id*/,
@@ -471,8 +471,7 @@
   DCHECK(VersionUsesHttp3(transport_version()));
 
   CloseConnectionWithDetails(
-      error_code,
-      quiche::QuicheStrCat("Decoder stream error: ", error_message));
+      error_code, absl::StrCat("Decoder stream error: ", error_message));
 }
 
 void QuicSpdySession::OnEncoderStreamError(QuicErrorCode error_code,
@@ -480,8 +479,7 @@
   DCHECK(VersionUsesHttp3(transport_version()));
 
   CloseConnectionWithDetails(
-      error_code,
-      quiche::QuicheStrCat("Encoder stream error: ", error_message));
+      error_code, absl::StrCat("Encoder stream error: ", error_message));
 }
 
 void QuicSpdySession::OnStreamHeadersPriority(
@@ -583,11 +581,11 @@
     // This should never happen, because |buffered_stream_priorities_| should
     // only contain entries for streams that are allowed to be open by the peer
     // but have not been opened yet.
-    std::string error_message = quiche::QuicheStrCat(
-        "Too many stream priority values buffered: ",
-        buffered_stream_priorities_.size(),
-        ", which should not exceed the incoming stream limit of ",
-        max_open_incoming_bidirectional_streams());
+    std::string error_message =
+        absl::StrCat("Too many stream priority values buffered: ",
+                     buffered_stream_priorities_.size(),
+                     ", which should not exceed the incoming stream limit of ",
+                     max_open_incoming_bidirectional_streams());
     QUIC_BUG << error_message;
     connection()->CloseConnection(
         QUIC_INTERNAL_ERROR, error_message,
@@ -654,9 +652,9 @@
       id > last_received_http3_goaway_id_.value()) {
     CloseConnectionWithDetails(
         QUIC_HTTP_GOAWAY_ID_LARGER_THAN_PREVIOUS,
-        quiche::QuicheStrCat("GOAWAY received with ID ", id,
-                             " greater than previously received ID ",
-                             last_received_http3_goaway_id_.value()));
+        absl::StrCat("GOAWAY received with ID ", id,
+                     " greater than previously received ID ",
+                     last_received_http3_goaway_id_.value()));
     return;
   }
   last_received_http3_goaway_id_ = id;
@@ -863,7 +861,7 @@
              << QuicStackTrace();
     connection()->CloseConnection(
         QUIC_INVALID_STREAM_ID,
-        quiche::QuicheStrCat("stream ", stream_id, " is static"),
+        absl::StrCat("stream ", stream_id, " is static"),
         ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
     return nullptr;
   }
@@ -994,13 +992,12 @@
               was_zero_rtt_rejected()
                   ? QUIC_HTTP_ZERO_RTT_REJECTION_SETTINGS_MISMATCH
                   : QUIC_HTTP_ZERO_RTT_RESUMPTION_SETTINGS_MISMATCH,
-              quiche::QuicheStrCat(
-                  was_zero_rtt_rejected()
-                      ? "Server rejected 0-RTT, aborting because "
-                      : "",
-                  "Server sent an SETTINGS_QPACK_MAX_TABLE_CAPACITY: ", value,
-                  "while current value is: ",
-                  qpack_encoder_->MaximumDynamicTableCapacity()));
+              absl::StrCat(was_zero_rtt_rejected()
+                               ? "Server rejected 0-RTT, aborting because "
+                               : "",
+                           "Server sent an SETTINGS_QPACK_MAX_TABLE_CAPACITY: ",
+                           value, "while current value is: ",
+                           qpack_encoder_->MaximumDynamicTableCapacity()));
           return false;
         }
         // However, limit the dynamic table capacity to
@@ -1021,13 +1018,12 @@
               was_zero_rtt_rejected()
                   ? QUIC_HTTP_ZERO_RTT_REJECTION_SETTINGS_MISMATCH
                   : QUIC_HTTP_ZERO_RTT_RESUMPTION_SETTINGS_MISMATCH,
-              quiche::QuicheStrCat(
-                  was_zero_rtt_rejected()
-                      ? "Server rejected 0-RTT, aborting because "
-                      : "",
-                  "Server sent an SETTINGS_MAX_FIELD_SECTION_SIZE: ", value,
-                  "which reduces current value: ",
-                  max_outbound_header_list_size_));
+              absl::StrCat(was_zero_rtt_rejected()
+                               ? "Server rejected 0-RTT, aborting because "
+                               : "",
+                           "Server sent an SETTINGS_MAX_FIELD_SECTION_SIZE: ",
+                           value, "which reduces current value: ",
+                           max_outbound_header_list_size_));
           return false;
         }
         max_outbound_header_list_size_ = value;
@@ -1042,13 +1038,12 @@
               was_zero_rtt_rejected()
                   ? QUIC_HTTP_ZERO_RTT_REJECTION_SETTINGS_MISMATCH
                   : QUIC_HTTP_ZERO_RTT_RESUMPTION_SETTINGS_MISMATCH,
-              quiche::QuicheStrCat(
-                  was_zero_rtt_rejected()
-                      ? "Server rejected 0-RTT, aborting because "
-                      : "",
-                  "Server sent an SETTINGS_QPACK_BLOCKED_STREAMS: ", value,
-                  "which reduces current value: ",
-                  qpack_encoder_->maximum_blocked_streams()));
+              absl::StrCat(was_zero_rtt_rejected()
+                               ? "Server rejected 0-RTT, aborting because "
+                               : "",
+                           "Server sent an SETTINGS_QPACK_BLOCKED_STREAMS: ",
+                           value, "which reduces current value: ",
+                           qpack_encoder_->maximum_blocked_streams()));
           return false;
         }
         break;
@@ -1062,8 +1057,8 @@
       case spdy::SETTINGS_MAX_FRAME_SIZE:
         CloseConnectionWithDetails(
             QUIC_HTTP_RECEIVE_SPDY_SETTING,
-            quiche::QuicheStrCat(
-                "received HTTP/2 specific setting in HTTP/3 session: ", id));
+            absl::StrCat("received HTTP/2 specific setting in HTTP/3 session: ",
+                         id));
         return false;
       default:
         QUIC_DVLOG(1) << ENDPOINT << "Unknown setting identifier " << id
@@ -1091,8 +1086,8 @@
           if (IsConnected()) {
             CloseConnectionWithDetails(
                 QUIC_INVALID_HEADERS_STREAM_DATA,
-                quiche::QuicheStrCat("Invalid value for SETTINGS_ENABLE_PUSH: ",
-                                     value));
+                absl::StrCat("Invalid value for SETTINGS_ENABLE_PUSH: ",
+                             value));
           }
           return true;
         }
@@ -1108,8 +1103,7 @@
         if (IsConnected()) {
           CloseConnectionWithDetails(
               QUIC_INVALID_HEADERS_STREAM_DATA,
-              quiche::QuicheStrCat(
-                  "Unsupported field of HTTP/2 SETTINGS frame: ", id));
+              absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ", id));
         }
       }
       break;
@@ -1125,8 +1119,7 @@
       if (IsConnected()) {
         CloseConnectionWithDetails(
             QUIC_INVALID_HEADERS_STREAM_DATA,
-            quiche::QuicheStrCat("Unsupported field of HTTP/2 SETTINGS frame: ",
-                                 id));
+            absl::StrCat("Unsupported field of HTTP/2 SETTINGS frame: ", id));
       }
   }
   return true;
@@ -1462,10 +1455,9 @@
   if (max_push_id < old_max_push_id.value()) {
     CloseConnectionWithDetails(
         QUIC_HTTP_INVALID_MAX_PUSH_ID,
-        quiche::QuicheStrCat(
-            "MAX_PUSH_ID received with value ", max_push_id,
-            " which is smaller that previously received value ",
-            old_max_push_id.value()));
+        absl::StrCat("MAX_PUSH_ID received with value ", max_push_id,
+                     " which is smaller that previously received value ",
+                     old_max_push_id.value()));
     return false;
   }
 
@@ -1508,11 +1500,10 @@
 
 void QuicSpdySession::CloseConnectionOnDuplicateHttp3UnidirectionalStreams(
     absl::string_view type) {
-  QUIC_PEER_BUG << quiche::QuicheStrCat("Received a duplicate ", type,
-                                        " stream: Closing connection.");
-  CloseConnectionWithDetails(
-      QUIC_HTTP_DUPLICATE_UNIDIRECTIONAL_STREAM,
-      quiche::QuicheStrCat(type, " stream is received twice."));
+  QUIC_PEER_BUG << absl::StrCat("Received a duplicate ", type,
+                                " stream: Closing connection.");
+  CloseConnectionWithDetails(QUIC_HTTP_DUPLICATE_UNIDIRECTIONAL_STREAM,
+                             absl::StrCat(type, " stream is received twice."));
 }
 
 // static
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index d16935b..4eb0997 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -12,6 +12,7 @@
 
 #include "absl/base/macros.h"
 #include "absl/strings/escaping.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/crypto/null_encrypter.h"
@@ -44,7 +45,6 @@
 #include "net/third_party/quiche/src/quic/test_tools/quic_stream_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_stream_send_buffer_peer.h"
 #include "net/third_party/quiche/src/quic/test_tools/quic_test_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_text_utils.h"
 #include "net/third_party/quiche/src/common/quiche_endian.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_framer.h"
@@ -708,8 +708,8 @@
   EXPECT_CALL(*connection_, SendControlFrame(_));
   EXPECT_CALL(*connection_, OnStreamReset(closed_stream_id, _));
   stream2->Reset(QUIC_BAD_APPLICATION_PAYLOAD);
-  std::string msg = quiche::QuicheStrCat("Marking unknown stream ",
-                                         closed_stream_id, " blocked.");
+  std::string msg =
+      absl::StrCat("Marking unknown stream ", closed_stream_id, " blocked.");
   EXPECT_QUIC_BUG(session_.MarkConnectionLevelWriteBlocked(closed_stream_id),
                   msg);
 }
@@ -1554,8 +1554,8 @@
   while (!headers_stream->IsFlowControlBlocked() && stream_id < 2000) {
     EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
     EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
-    headers["header"] = quiche::QuicheStrCat(
-        random.RandUint64(), random.RandUint64(), random.RandUint64());
+    headers["header"] = absl::StrCat(random.RandUint64(), random.RandUint64(),
+                                     random.RandUint64());
     session_.WriteHeadersOnHeadersStream(stream_id, headers.Clone(), true,
                                          spdy::SpdyStreamPrecedence(0),
                                          nullptr);
@@ -2531,8 +2531,7 @@
                                                &headers_buffer);
   absl::string_view headers_frame_header(headers_buffer.get(),
                                          headers_frame_header_length);
-  std::string headers =
-      quiche::QuicheStrCat(headers_frame_header, headers_payload);
+  std::string headers = absl::StrCat(headers_frame_header, headers_payload);
   stream->OnStreamFrame(QuicStreamFrame(stream_id, false, 0, headers));
 
   // Decoding is blocked because dynamic table entry has not been received yet.
@@ -2566,8 +2565,7 @@
                                                &headers_buffer);
   absl::string_view headers_frame_header(headers_buffer.get(),
                                          headers_frame_header_length);
-  std::string headers =
-      quiche::QuicheStrCat(headers_frame_header, headers_payload);
+  std::string headers = absl::StrCat(headers_frame_header, headers_payload);
   stream->OnStreamFrame(QuicStreamFrame(stream_id, false, 0, headers));
 
   // Decoding is blocked because dynamic table entry has not been received yet.
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index afcc28f..62a81ae 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -171,7 +171,7 @@
   void CloseConnectionOnWrongFrame(absl::string_view frame_type) {
     stream_->OnUnrecoverableError(
         QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM,
-        quiche::QuicheStrCat(frame_type, " frame received on data stream"));
+        absl::StrCat(frame_type, " frame received on data stream"));
   }
 
   QuicSpdyStream* stream_;
@@ -597,7 +597,7 @@
 void QuicSpdyStream::OnHeaderDecodingError(absl::string_view error_message) {
   qpack_decoded_headers_accumulator_.reset();
 
-  std::string connection_close_error_message = quiche::QuicheStrCat(
+  std::string connection_close_error_message = absl::StrCat(
       "Error decoding ", headers_decompressed_ ? "trailers" : "headers",
       " on stream ", id(), ": ", error_message);
   OnUnrecoverableError(QUIC_QPACK_DECOMPRESSION_FAILED,
@@ -620,7 +620,7 @@
   PriorityUpdateFrame priority_update;
   priority_update.prioritized_element_type = REQUEST_STREAM;
   priority_update.prioritized_element_id = id();
-  priority_update.priority_field_value = quiche::QuicheStrCat("u=", urgency);
+  priority_update.priority_field_value = absl::StrCat("u=", urgency);
   spdy_session_->WriteHttp3PriorityUpdate(priority_update);
 }
 
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 38062ca..ce107fd 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -434,7 +434,7 @@
                                                  &headers_buffer);
     absl::string_view headers_frame_header(headers_buffer.get(),
                                            headers_frame_header_length);
-    return quiche::QuicheStrCat(headers_frame_header, payload);
+    return absl::StrCat(headers_frame_header, payload);
   }
 
   // Construct PUSH_PROMISE frame with given payload.
@@ -449,7 +449,7 @@
             frame, &push_promise_buffer);
     absl::string_view push_promise_frame_header(
         push_promise_buffer.get(), push_promise_frame_header_length);
-    return quiche::QuicheStrCat(push_promise_frame_header, payload);
+    return absl::StrCat(push_promise_frame_header, payload);
   }
 
   std::string DataFrame(absl::string_view payload) {
@@ -458,7 +458,7 @@
         HttpEncoder::SerializeDataFrameHeader(payload.length(), &data_buffer);
     absl::string_view data_frame_header(data_buffer.get(),
                                         data_frame_header_length);
-    return quiche::QuicheStrCat(data_frame_header, payload);
+    return absl::StrCat(data_frame_header, payload);
   }
 
   std::string UnknownFrame(uint64_t frame_type, absl::string_view payload) {
@@ -2016,8 +2016,7 @@
   std::string trailers =
       HeadersFrame({std::make_pair("custom-key", "custom-value")});
 
-  std::string stream_frame_payload =
-      quiche::QuicheStrCat(headers, data, trailers);
+  std::string stream_frame_payload = absl::StrCat(headers, data, trailers);
   QuicStreamFrame frame(stream_->id(), false, 0, stream_frame_payload);
   stream_->OnStreamFrame(frame);
 
@@ -2051,8 +2050,7 @@
   std::string trailers = HeadersFrame(trailers_block);
 
   // Feed all three HTTP/3 frames in a single stream frame.
-  std::string stream_frame_payload =
-      quiche::QuicheStrCat(headers, data, trailers);
+  std::string stream_frame_payload = absl::StrCat(headers, data, trailers);
   QuicStreamFrame frame(stream_->id(), false, 0, stream_frame_payload);
   stream_->OnStreamFrame(frame);
 
@@ -2092,7 +2090,7 @@
       HeadersFrame(absl::HexStringToBytes("00002a94e7036261"));
   std::string data = DataFrame(kDataFramePayload);
 
-  std::string stream_frame_payload = quiche::QuicheStrCat(headers, data);
+  std::string stream_frame_payload = absl::StrCat(headers, data);
   QuicStreamFrame frame(stream_->id(), false, 0, stream_frame_payload);
 
   EXPECT_CALL(
@@ -2948,7 +2946,7 @@
 
   // Combine the two frames to make sure they are processed in a single
   // QuicSpdyStream::OnDataAvailable() call.
-  std::string frames = quiche::QuicheStrCat(settings, headers);
+  std::string frames = absl::StrCat(settings, headers);
 
   EXPECT_EQ(0u, stream_->sequencer()->NumBytesConsumed());
 
diff --git a/quic/core/http/spdy_utils.cc b/quic/core/http/spdy_utils.cc
index 2a888fb..46f2326 100644
--- a/quic/core/http/spdy_utils.cc
+++ b/quic/core/http/spdy_utils.cc
@@ -9,13 +9,13 @@
 #include <vector>
 
 #include "absl/strings/numbers.h"
+#include "absl/strings/str_cat.h"
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h"
 #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/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/spdy/core/spdy_protocol.h"
 
@@ -165,7 +165,7 @@
     RETURN_STRING_LITERAL(SETTINGS_MAX_FIELD_SECTION_SIZE);
     RETURN_STRING_LITERAL(SETTINGS_QPACK_BLOCKED_STREAMS);
   }
-  return quiche::QuicheStrCat("UNSUPPORTED_SETTINGS_TYPE(", identifier, ")");
+  return absl::StrCat("UNSUPPORTED_SETTINGS_TYPE(", identifier, ")");
 }
 
 #undef RETURN_STRING_LITERAL  // undef for jumbo builds