diff --git a/common/platform/api/quiche_mem_slice.h b/common/platform/api/quiche_mem_slice.h
index 61249bc..ce59c75 100644
--- a/common/platform/api/quiche_mem_slice.h
+++ b/common/platform/api/quiche_mem_slice.h
@@ -9,8 +9,8 @@
 
 #include "quiche_platform_impl/quiche_mem_slice_impl.h"
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "common/platform/api/quiche_export.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quiche {
 
@@ -24,7 +24,7 @@
   // Constructs a QuicheMemSlice that takes ownership of |buffer|.  The length
   // of the |buffer| must not be zero.  To construct an empty QuicheMemSlice,
   // use the zero-argument constructor instead.
-  explicit QuicheMemSlice(quic::QuicBuffer buffer) : impl_(std::move(buffer)) {}
+  explicit QuicheMemSlice(QuicheBuffer buffer) : impl_(std::move(buffer)) {}
 
   // Constructs a QuicheMemSlice that takes ownership of |buffer| allocated on
   // heap.  |length| must not be zero.
diff --git a/common/platform/api/quiche_mem_slice_test.cc b/common/platform/api/quiche_mem_slice_test.cc
index 4500b5d..e110f90 100644
--- a/common/platform/api/quiche_mem_slice_test.cc
+++ b/common/platform/api/quiche_mem_slice_test.cc
@@ -7,9 +7,9 @@
 #include <memory>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "common/platform/api/quiche_test.h"
+#include "common/quiche_buffer_allocator.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quiche {
 namespace test {
@@ -19,12 +19,12 @@
  public:
   QuicheMemSliceTest() {
     size_t length = 1024;
-    slice_ = QuicheMemSlice(quic::QuicBuffer(&allocator_, length));
+    slice_ = QuicheMemSlice(QuicheBuffer(&allocator_, length));
     orig_data_ = slice_.data();
     orig_length_ = slice_.length();
   }
 
-  quic::SimpleBufferAllocator allocator_;
+  SimpleBufferAllocator allocator_;
   QuicheMemSlice slice_;
   const char* orig_data_;
   size_t orig_length_;
@@ -62,7 +62,7 @@
 TEST_F(QuicheMemSliceTest, SliceFromBuffer) {
   const absl::string_view kTestString =
       "RFC 9000 Release Celebration Memorial Test String";
-  auto buffer = quic::QuicBuffer::Copy(&allocator_, kTestString);
+  auto buffer = QuicheBuffer::Copy(&allocator_, kTestString);
   QuicheMemSlice slice(std::move(buffer));
 
   EXPECT_EQ(buffer.data(), nullptr);  // NOLINT(bugprone-use-after-move)
diff --git a/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h b/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
index 0d13dec..2db6c44 100644
--- a/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
+++ b/common/platform/default/quiche_platform_impl/quiche_mem_slice_impl.h
@@ -1,9 +1,9 @@
 #ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MEM_SLICE_IMPL_H_
 #define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_MEM_SLICE_IMPL_H_
 
-#include "quic/core/quic_buffer_allocator.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "common/platform/api/quiche_export.h"
+#include "common/quiche_buffer_allocator.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quiche {
 
@@ -11,15 +11,15 @@
  public:
   QuicheMemSliceImpl() = default;
 
-  explicit QuicheMemSliceImpl(quic::QuicBuffer buffer)
+  explicit QuicheMemSliceImpl(QuicheBuffer buffer)
       : buffer_(std::move(buffer)) {}
 
   QuicheMemSliceImpl(std::unique_ptr<char[]> buffer, size_t length)
-      : buffer_(quic::QuicBuffer(
-            quic::QuicUniqueBufferPtr(
-                buffer.release(),
-                quic::QuicBufferDeleter(quic::SimpleBufferAllocator::Get())),
-            length)) {}
+      : buffer_(
+            QuicheBuffer(QuicheUniqueBufferPtr(
+                             buffer.release(),
+                             QuicheBufferDeleter(SimpleBufferAllocator::Get())),
+                         length)) {}
 
   QuicheMemSliceImpl(const QuicheMemSliceImpl& other) = delete;
   QuicheMemSliceImpl& operator=(const QuicheMemSliceImpl& other) = delete;
@@ -31,14 +31,14 @@
 
   ~QuicheMemSliceImpl() = default;
 
-  void Reset() { buffer_ = quic::QuicBuffer(); }
+  void Reset() { buffer_ = QuicheBuffer(); }
 
   const char* data() const { return buffer_.data(); }
   size_t length() const { return buffer_.size(); }
   bool empty() const { return buffer_.empty(); }
 
  private:
-  quic::QuicBuffer buffer_;
+  QuicheBuffer buffer_;
 };
 
 }  // namespace quiche
diff --git a/common/quiche_buffer_allocator.h b/common/quiche_buffer_allocator.h
new file mode 100644
index 0000000..40140ac
--- /dev/null
+++ b/common/quiche_buffer_allocator.h
@@ -0,0 +1,117 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_COMMON_QUICHE_BUFFER_ALLOCATOR_H_
+#define QUICHE_COMMON_QUICHE_BUFFER_ALLOCATOR_H_
+
+#include <stddef.h>
+
+#include <memory>
+
+#include "absl/strings/string_view.h"
+#include "common/platform/api/quiche_export.h"
+
+namespace quiche {
+
+// Abstract base class for classes which allocate and delete buffers.
+class QUICHE_EXPORT_PRIVATE QuicheBufferAllocator {
+ public:
+  virtual ~QuicheBufferAllocator() = default;
+
+  // Returns or allocates a new buffer of |size|. Never returns null.
+  virtual char* New(size_t size) = 0;
+
+  // Returns or allocates a new buffer of |size| if |flag_enable| is true.
+  // Otherwise, returns a buffer that is compatible with this class directly
+  // with operator new. Never returns null.
+  virtual char* New(size_t size, bool flag_enable) = 0;
+
+  // Releases a buffer.
+  virtual void Delete(char* buffer) = 0;
+
+  // Marks the allocator as being idle. Serves as a hint to notify the allocator
+  // that it should release any resources it's still holding on to.
+  virtual void MarkAllocatorIdle() {}
+};
+
+// A deleter that can be used to manage ownership of buffers allocated via
+// QuicheBufferAllocator through std::unique_ptr.
+class QUICHE_EXPORT_PRIVATE QuicheBufferDeleter {
+ public:
+  explicit QuicheBufferDeleter(QuicheBufferAllocator* allocator)
+      : allocator_(allocator) {}
+
+  QuicheBufferAllocator* allocator() { return allocator_; }
+  void operator()(char* buffer) { allocator_->Delete(buffer); }
+
+ private:
+  QuicheBufferAllocator* allocator_;
+};
+
+using QuicheUniqueBufferPtr = std::unique_ptr<char[], QuicheBufferDeleter>;
+
+inline QuicheUniqueBufferPtr MakeUniqueBuffer(QuicheBufferAllocator* allocator,
+                                              size_t size) {
+  return QuicheUniqueBufferPtr(allocator->New(size),
+                               QuicheBufferDeleter(allocator));
+}
+
+// QuicheUniqueBufferPtr with a length attached to it.  Similar to
+// QuicheMemSlice, except unlike QuicheMemSlice, QuicheBuffer is mutable and is
+// not platform-specific.  Also unlike QuicheMemSlice, QuicheBuffer can be
+// empty.
+class QUICHE_EXPORT_PRIVATE QuicheBuffer {
+ public:
+  QuicheBuffer() : buffer_(nullptr, QuicheBufferDeleter(nullptr)), size_(0) {}
+  QuicheBuffer(QuicheBufferAllocator* allocator, size_t size)
+      : buffer_(MakeUniqueBuffer(allocator, size)), size_(size) {}
+
+  QuicheBuffer(QuicheUniqueBufferPtr buffer, size_t size)
+      : buffer_(std::move(buffer)), size_(size) {}
+
+  // Make sure the move constructor zeroes out the size field.
+  QuicheBuffer(QuicheBuffer&& other)
+      : buffer_(std::move(other.buffer_)), size_(other.size_) {
+    other.buffer_ = nullptr;
+    other.size_ = 0;
+  }
+  QuicheBuffer& operator=(QuicheBuffer&& other) {
+    buffer_ = std::move(other.buffer_);
+    size_ = other.size_;
+
+    other.buffer_ = nullptr;
+    other.size_ = 0;
+    return *this;
+  }
+
+  // Factory method to create a QuicheBuffer that holds a copy of `data`.
+  static QuicheBuffer Copy(QuicheBufferAllocator* allocator,
+                           absl::string_view data) {
+    QuicheBuffer result(allocator, data.size());
+    memcpy(result.data(), data.data(), data.size());
+    return result;
+  }
+
+  const char* data() const { return buffer_.get(); }
+  char* data() { return buffer_.get(); }
+  size_t size() const { return size_; }
+  bool empty() const { return size_ == 0; }
+  absl::string_view AsStringView() const {
+    return absl::string_view(data(), size());
+  }
+
+  // Releases the ownership of the underlying buffer.
+  QuicheUniqueBufferPtr Release() {
+    size_ = 0;
+    return std::move(buffer_);
+  }
+
+ private:
+  QuicheUniqueBufferPtr buffer_;
+  size_t size_;
+};
+
+}  // namespace quiche
+
+#endif  // QUICHE_COMMON_QUICHE_BUFFER_ALLOCATOR_H_
diff --git a/common/quiche_mem_slice_storage.cc b/common/quiche_mem_slice_storage.cc
index e3e1c5a..2b1b5e1 100644
--- a/common/quiche_mem_slice_storage.cc
+++ b/common/quiche_mem_slice_storage.cc
@@ -9,8 +9,7 @@
 namespace quiche {
 
 QuicheMemSliceStorage::QuicheMemSliceStorage(
-    const struct iovec* iov, int iov_count,
-    quic::QuicBufferAllocator* allocator,
+    const struct iovec* iov, int iov_count, QuicheBufferAllocator* allocator,
     const quic::QuicByteCount max_slice_len) {
   if (iov == nullptr) {
     return;
@@ -24,7 +23,7 @@
   size_t io_offset = 0;
   while (write_len > 0) {
     size_t slice_len = std::min(write_len, max_slice_len);
-    quic::QuicBuffer buffer(allocator, slice_len);
+    QuicheBuffer buffer(allocator, slice_len);
     quic::QuicUtils::CopyToBuffer(iov, iov_count, io_offset, slice_len,
                                   buffer.data());
     storage_.push_back(QuicheMemSlice(std::move(buffer)));
diff --git a/common/quiche_mem_slice_storage.h b/common/quiche_mem_slice_storage.h
index 6ec68bb..155169f 100644
--- a/common/quiche_mem_slice_storage.h
+++ b/common/quiche_mem_slice_storage.h
@@ -8,11 +8,11 @@
 #include <vector>
 
 #include "absl/types/span.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_iovec.h"
 #include "common/platform/api/quiche_export.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quiche {
 
@@ -21,7 +21,7 @@
 class QUICHE_EXPORT_PRIVATE QuicheMemSliceStorage {
  public:
   QuicheMemSliceStorage(const struct iovec* iov, int iov_count,
-                        quic::QuicBufferAllocator* allocator,
+                        QuicheBufferAllocator* allocator,
                         const quic::QuicByteCount max_slice_len);
 
   QuicheMemSliceStorage(const QuicheMemSliceStorage& other) = default;
diff --git a/common/quiche_mem_slice_storage_test.cc b/common/quiche_mem_slice_storage_test.cc
index a07c71d..15d8294 100644
--- a/common/quiche_mem_slice_storage_test.cc
+++ b/common/quiche_mem_slice_storage_test.cc
@@ -4,8 +4,8 @@
 
 #include "common/quiche_mem_slice_storage.h"
 
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "common/platform/api/quiche_test.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quiche {
 namespace test {
@@ -22,7 +22,7 @@
 }
 
 TEST_F(QuicheMemSliceStorageImplTest, SingleIov) {
-  quic::SimpleBufferAllocator allocator;
+  SimpleBufferAllocator allocator;
   std::string body(3, 'c');
   struct iovec iov = {const_cast<char*>(body.data()), body.length()};
   QuicheMemSliceStorage storage(&iov, 1, &allocator, 1024);
@@ -32,7 +32,7 @@
 }
 
 TEST_F(QuicheMemSliceStorageImplTest, MultipleIovInSingleSlice) {
-  quic::SimpleBufferAllocator allocator;
+  SimpleBufferAllocator allocator;
   std::string body1(3, 'a');
   std::string body2(4, 'b');
   struct iovec iov[] = {{const_cast<char*>(body1.data()), body1.length()},
@@ -44,7 +44,7 @@
 }
 
 TEST_F(QuicheMemSliceStorageImplTest, MultipleIovInMultipleSlice) {
-  quic::SimpleBufferAllocator allocator;
+  SimpleBufferAllocator allocator;
   std::string body1(4, 'a');
   std::string body2(4, 'b');
   struct iovec iov[] = {{const_cast<char*>(body1.data()), body1.length()},
diff --git a/quic/core/quic_simple_buffer_allocator.cc b/common/simple_buffer_allocator.cc
similarity index 81%
rename from quic/core/quic_simple_buffer_allocator.cc
rename to common/simple_buffer_allocator.cc
index aba8c43..64501a1 100644
--- a/quic/core/quic_simple_buffer_allocator.cc
+++ b/common/simple_buffer_allocator.cc
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quic/core/quic_simple_buffer_allocator.h"
+#include "common/simple_buffer_allocator.h"
 
-namespace quic {
+namespace quiche {
 
 char* SimpleBufferAllocator::New(size_t size) {
   return new char[size];
@@ -18,4 +18,4 @@
   delete[] buffer;
 }
 
-}  // namespace quic
+}  // namespace quiche
diff --git a/quic/core/quic_simple_buffer_allocator.h b/common/simple_buffer_allocator.h
similarity index 62%
rename from quic/core/quic_simple_buffer_allocator.h
rename to common/simple_buffer_allocator.h
index 62f406b..586c0f3 100644
--- a/quic/core/quic_simple_buffer_allocator.h
+++ b/common/simple_buffer_allocator.h
@@ -2,18 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_QUIC_CORE_QUIC_SIMPLE_BUFFER_ALLOCATOR_H_
-#define QUICHE_QUIC_CORE_QUIC_SIMPLE_BUFFER_ALLOCATOR_H_
+#ifndef QUICHE_COMMON_QUICHE_SIMPLE_BUFFER_ALLOCATOR_H_
+#define QUICHE_COMMON_QUICHE_SIMPLE_BUFFER_ALLOCATOR_H_
 
-#include "quic/core/quic_buffer_allocator.h"
-#include "quic/platform/api/quic_export.h"
+#include "common/platform/api/quiche_export.h"
+#include "common/quiche_buffer_allocator.h"
 
-namespace quic {
+namespace quiche {
 
 // Provides buffer allocation using operators new[] and delete[] on char arrays.
 // Note that some of the QUICHE code relies on this being the case for deleting
 // new[]-allocated arrays from elsewhere.
-class QUIC_EXPORT_PRIVATE SimpleBufferAllocator : public QuicBufferAllocator {
+class QUICHE_EXPORT_PRIVATE SimpleBufferAllocator
+    : public QuicheBufferAllocator {
  public:
   static SimpleBufferAllocator* Get() {
     static SimpleBufferAllocator* singleton = new SimpleBufferAllocator();
@@ -25,6 +26,6 @@
   void Delete(char* buffer) override;
 };
 
-}  // namespace quic
+}  // namespace quiche
 
-#endif  // QUICHE_QUIC_CORE_QUIC_SIMPLE_BUFFER_ALLOCATOR_H_
+#endif  // QUICHE_COMMON_QUICHE_SIMPLE_BUFFER_ALLOCATOR_H_
diff --git a/quic/core/quic_simple_buffer_allocator_test.cc b/common/simple_buffer_allocator_test.cc
similarity index 63%
rename from quic/core/quic_simple_buffer_allocator_test.cc
rename to common/simple_buffer_allocator_test.cc
index 5416cd4..e768bbb 100644
--- a/quic/core/quic_simple_buffer_allocator_test.cc
+++ b/common/simple_buffer_allocator_test.cc
@@ -2,46 +2,43 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quic/core/quic_simple_buffer_allocator.h"
+#include "common/simple_buffer_allocator.h"
 
-#include "quic/core/quic_packets.h"
-#include "quic/platform/api/quic_test.h"
+#include "common/platform/api/quiche_test.h"
 
-namespace quic {
+namespace quiche {
 namespace {
 
-class SimpleBufferAllocatorTest : public QuicTest {};
-
-TEST_F(SimpleBufferAllocatorTest, NewDelete) {
+TEST(SimpleBufferAllocatorTest, NewDelete) {
   SimpleBufferAllocator alloc;
   char* buf = alloc.New(4);
   EXPECT_NE(nullptr, buf);
   alloc.Delete(buf);
 }
 
-TEST_F(SimpleBufferAllocatorTest, DeleteNull) {
+TEST(SimpleBufferAllocatorTest, DeleteNull) {
   SimpleBufferAllocator alloc;
   alloc.Delete(nullptr);
 }
 
-TEST_F(SimpleBufferAllocatorTest, MoveBuffersConstructor) {
+TEST(SimpleBufferAllocatorTest, MoveBuffersConstructor) {
   SimpleBufferAllocator alloc;
-  QuicBuffer buffer1(&alloc, 16);
+  QuicheBuffer buffer1(&alloc, 16);
 
   EXPECT_NE(buffer1.data(), nullptr);
   EXPECT_EQ(buffer1.size(), 16u);
 
-  QuicBuffer buffer2(std::move(buffer1));
+  QuicheBuffer buffer2(std::move(buffer1));
   EXPECT_EQ(buffer1.data(), nullptr);  // NOLINT(bugprone-use-after-move)
   EXPECT_EQ(buffer1.size(), 0u);
   EXPECT_NE(buffer2.data(), nullptr);
   EXPECT_EQ(buffer2.size(), 16u);
 }
 
-TEST_F(SimpleBufferAllocatorTest, MoveBuffersAssignment) {
+TEST(SimpleBufferAllocatorTest, MoveBuffersAssignment) {
   SimpleBufferAllocator alloc;
-  QuicBuffer buffer1(&alloc, 16);
-  QuicBuffer buffer2;
+  QuicheBuffer buffer1(&alloc, 16);
+  QuicheBuffer buffer2;
 
   EXPECT_NE(buffer1.data(), nullptr);
   EXPECT_EQ(buffer1.size(), 16u);
@@ -55,12 +52,12 @@
   EXPECT_EQ(buffer2.size(), 16u);
 }
 
-TEST_F(SimpleBufferAllocatorTest, CopyBuffer) {
+TEST(SimpleBufferAllocatorTest, CopyBuffer) {
   SimpleBufferAllocator alloc;
   const absl::string_view original = "Test string";
-  QuicBuffer copy = QuicBuffer::Copy(&alloc, original);
+  QuicheBuffer copy = QuicheBuffer::Copy(&alloc, original);
   EXPECT_EQ(copy.AsStringView(), original);
 }
 
 }  // namespace
-}  // namespace quic
+}  // namespace quiche
diff --git a/quic/core/frames/quic_crypto_frame.h b/quic/core/frames/quic_crypto_frame.h
index e1e79a6..6e15fbe 100644
--- a/quic/core/frames/quic_crypto_frame.h
+++ b/quic/core/frames/quic_crypto_frame.h
@@ -9,7 +9,6 @@
 #include <ostream>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_export.h"
 
diff --git a/quic/core/frames/quic_frame.cc b/quic/core/frames/quic_frame.cc
index e83e422..48bc12a 100644
--- a/quic/core/frames/quic_frame.cc
+++ b/quic/core/frames/quic_frame.cc
@@ -6,12 +6,12 @@
 
 #include "quic/core/frames/quic_new_connection_id_frame.h"
 #include "quic/core/frames/quic_retire_connection_id_frame.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_constants.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_logging.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quic {
 
@@ -327,7 +327,7 @@
   return copy;
 }
 
-QuicFrame CopyQuicFrame(QuicBufferAllocator* allocator,
+QuicFrame CopyQuicFrame(quiche::QuicheBufferAllocator* allocator,
                         const QuicFrame& frame) {
   QuicFrame copy;
   switch (frame.type) {
@@ -392,7 +392,8 @@
       copy.message_frame->data = frame.message_frame->data;
       copy.message_frame->message_length = frame.message_frame->message_length;
       for (const auto& slice : frame.message_frame->message_data) {
-        QuicBuffer buffer = QuicBuffer::Copy(allocator, slice.AsStringView());
+        quiche::QuicheBuffer buffer =
+            quiche::QuicheBuffer::Copy(allocator, slice.AsStringView());
         copy.message_frame->message_data.push_back(
             quiche::QuicheMemSlice(std::move(buffer)));
       }
@@ -419,7 +420,7 @@
   return copy;
 }
 
-QuicFrames CopyQuicFrames(QuicBufferAllocator* allocator,
+QuicFrames CopyQuicFrames(quiche::QuicheBufferAllocator* allocator,
                           const QuicFrames& frames) {
   QuicFrames copy;
   for (const auto& frame : frames) {
diff --git a/quic/core/frames/quic_frame.h b/quic/core/frames/quic_frame.h
index 9ee4568..7de9bb6 100644
--- a/quic/core/frames/quic_frame.h
+++ b/quic/core/frames/quic_frame.h
@@ -163,12 +163,12 @@
 CopyRetransmittableControlFrame(const QuicFrame& frame);
 
 // Returns a copy of |frame|.
-QUIC_EXPORT_PRIVATE QuicFrame CopyQuicFrame(QuicBufferAllocator* allocator,
-                                            const QuicFrame& frame);
+QUIC_EXPORT_PRIVATE QuicFrame
+CopyQuicFrame(quiche::QuicheBufferAllocator* allocator, const QuicFrame& frame);
 
 // Returns a copy of |frames|.
-QUIC_EXPORT_PRIVATE QuicFrames CopyQuicFrames(QuicBufferAllocator* allocator,
-                                              const QuicFrames& frames);
+QUIC_EXPORT_PRIVATE QuicFrames CopyQuicFrames(
+    quiche::QuicheBufferAllocator* allocator, const QuicFrames& frames);
 
 // Human-readable description suitable for logging.
 QUIC_EXPORT_PRIVATE std::string QuicFramesToString(const QuicFrames& frames);
diff --git a/quic/core/frames/quic_frames_test.cc b/quic/core/frames/quic_frames_test.cc
index 43eabf7..6955094 100644
--- a/quic/core/frames/quic_frames_test.cc
+++ b/quic/core/frames/quic_frames_test.cc
@@ -625,7 +625,8 @@
     }
   }
 
-  QuicFrames copy = CopyQuicFrames(SimpleBufferAllocator::Get(), frames);
+  QuicFrames copy =
+      CopyQuicFrames(quiche::SimpleBufferAllocator::Get(), frames);
   ASSERT_EQ(NUM_FRAME_TYPES, copy.size());
   for (uint8_t i = 0; i < NUM_FRAME_TYPES; ++i) {
     EXPECT_EQ(i, copy[i].type);
diff --git a/quic/core/frames/quic_new_token_frame.h b/quic/core/frames/quic_new_token_frame.h
index 805216b..d0d7e8e 100644
--- a/quic/core/frames/quic_new_token_frame.h
+++ b/quic/core/frames/quic_new_token_frame.h
@@ -9,7 +9,6 @@
 #include <ostream>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_constants.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_export.h"
diff --git a/quic/core/frames/quic_stream_frame.h b/quic/core/frames/quic_stream_frame.h
index 9ba8ccc..2e2daba 100644
--- a/quic/core/frames/quic_stream_frame.h
+++ b/quic/core/frames/quic_stream_frame.h
@@ -10,7 +10,6 @@
 
 #include "absl/strings/string_view.h"
 #include "quic/core/frames/quic_inlined_frame.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_export.h"
 
diff --git a/quic/core/http/capsule.cc b/quic/core/http/capsule.cc
index 21df166..fd89b38 100644
--- a/quic/core/http/capsule.cc
+++ b/quic/core/http/capsule.cc
@@ -392,8 +392,8 @@
   QUICHE_DCHECK_NE(visitor_, nullptr);
 }
 
-QuicBuffer SerializeCapsule(const Capsule& capsule,
-                            QuicBufferAllocator* allocator) {
+quiche::QuicheBuffer SerializeCapsule(
+    const Capsule& capsule, quiche::QuicheBufferAllocator* allocator) {
   QuicByteCount capsule_type_length = QuicDataWriter::GetVarInt62Len(
       static_cast<uint64_t>(capsule.capsule_type()));
   QuicByteCount capsule_data_length;
@@ -454,15 +454,15 @@
       QuicDataWriter::GetVarInt62Len(capsule_data_length);
   QuicByteCount total_capsule_length =
       capsule_type_length + capsule_length_length + capsule_data_length;
-  QuicBuffer buffer(allocator, total_capsule_length);
+  quiche::QuicheBuffer buffer(allocator, total_capsule_length);
   QuicDataWriter writer(buffer.size(), buffer.data());
   if (!writer.WriteVarInt62(static_cast<uint64_t>(capsule.capsule_type()))) {
     QUIC_BUG(capsule type write fail) << "Failed to write CAPSULE type";
-    return QuicBuffer();
+    return {};
   }
   if (!writer.WriteVarInt62(capsule_data_length)) {
     QUIC_BUG(capsule length write fail) << "Failed to write CAPSULE length";
-    return QuicBuffer();
+    return {};
   }
   switch (capsule.capsule_type()) {
     case CapsuleType::LEGACY_DATAGRAM:
@@ -471,14 +471,14 @@
                 capsule.legacy_datagram_capsule().context_id.value())) {
           QUIC_BUG(datagram capsule context ID write fail)
               << "Failed to write LEGACY_DATAGRAM CAPSULE context ID";
-          return QuicBuffer();
+          return {};
         }
       }
       if (!writer.WriteStringPiece(
               capsule.legacy_datagram_capsule().http_datagram_payload)) {
         QUIC_BUG(datagram capsule payload write fail)
             << "Failed to write LEGACY_DATAGRAM CAPSULE payload";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::DATAGRAM_WITH_CONTEXT:
@@ -486,13 +486,13 @@
               capsule.datagram_with_context_capsule().context_id)) {
         QUIC_BUG(datagram capsule context ID write fail)
             << "Failed to write DATAGRAM_WITH_CONTEXT CAPSULE context ID";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteStringPiece(
               capsule.datagram_with_context_capsule().http_datagram_payload)) {
         QUIC_BUG(datagram capsule payload write fail)
             << "Failed to write DATAGRAM_WITH_CONTEXT CAPSULE payload";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::DATAGRAM_WITHOUT_CONTEXT:
@@ -500,7 +500,7 @@
                                        .http_datagram_payload)) {
         QUIC_BUG(datagram capsule payload write fail)
             << "Failed to write DATAGRAM_WITHOUT_CONTEXT CAPSULE payload";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::REGISTER_DATAGRAM_CONTEXT:
@@ -508,20 +508,20 @@
               capsule.register_datagram_context_capsule().context_id)) {
         QUIC_BUG(register context capsule context ID write fail)
             << "Failed to write REGISTER_DATAGRAM_CONTEXT CAPSULE context ID";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteVarInt62(static_cast<uint64_t>(
               capsule.register_datagram_context_capsule().format_type))) {
         QUIC_BUG(register context capsule format type write fail)
             << "Failed to write REGISTER_DATAGRAM_CONTEXT CAPSULE format type";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteStringPiece(capsule.register_datagram_context_capsule()
                                        .format_additional_data)) {
         QUIC_BUG(register context capsule additional data write fail)
             << "Failed to write REGISTER_DATAGRAM_CONTEXT CAPSULE additional "
                "data";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::REGISTER_DATAGRAM_NO_CONTEXT:
@@ -530,7 +530,7 @@
         QUIC_BUG(register no context capsule format type write fail)
             << "Failed to write REGISTER_DATAGRAM_NO_CONTEXT CAPSULE format "
                "type";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteStringPiece(
               capsule.register_datagram_no_context_capsule()
@@ -538,7 +538,7 @@
         QUIC_BUG(register no context capsule additional data write fail)
             << "Failed to write REGISTER_DATAGRAM_NO_CONTEXT CAPSULE "
                "additional data";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::CLOSE_DATAGRAM_CONTEXT:
@@ -546,19 +546,19 @@
               capsule.close_datagram_context_capsule().context_id)) {
         QUIC_BUG(close context capsule context ID write fail)
             << "Failed to write CLOSE_DATAGRAM_CONTEXT CAPSULE context ID";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteVarInt62(static_cast<uint64_t>(
               capsule.close_datagram_context_capsule().close_code))) {
         QUIC_BUG(close context capsule close code write fail)
             << "Failed to write CLOSE_DATAGRAM_CONTEXT CAPSULE close code";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteStringPiece(
               capsule.close_datagram_context_capsule().close_details)) {
         QUIC_BUG(close context capsule close details write fail)
             << "Failed to write CLOSE_DATAGRAM_CONTEXT CAPSULE close details";
-        return QuicBuffer();
+        return {};
       }
       break;
     case CapsuleType::CLOSE_WEBTRANSPORT_SESSION:
@@ -566,19 +566,19 @@
               capsule.close_web_transport_session_capsule().error_code)) {
         QUIC_BUG(close webtransport session capsule error code write fail)
             << "Failed to write CLOSE_WEBTRANSPORT_SESSION error code";
-        return QuicBuffer();
+        return {};
       }
       if (!writer.WriteStringPiece(
               capsule.close_web_transport_session_capsule().error_message)) {
         QUIC_BUG(close webtransport session capsule error message write fail)
             << "Failed to write CLOSE_WEBTRANSPORT_SESSION error message";
-        return QuicBuffer();
+        return {};
       }
       break;
     default:
       if (!writer.WriteStringPiece(capsule.unknown_capsule_data())) {
         QUIC_BUG(capsule data write fail) << "Failed to write CAPSULE data";
-        return QuicBuffer();
+        return {};
       }
       break;
   }
@@ -586,7 +586,7 @@
     QUIC_BUG(capsule write length mismatch)
         << "CAPSULE serialization wrote " << writer.length() << " instead of "
         << writer.capacity();
-    return QuicBuffer();
+    return {};
   }
   return buffer;
 }
diff --git a/quic/core/http/capsule.h b/quic/core/http/capsule.h
index 42190bb..94601f9 100644
--- a/quic/core/http/capsule.h
+++ b/quic/core/http/capsule.h
@@ -11,10 +11,10 @@
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_data_reader.h"
 #include "quic/core/quic_types.h"
 #include "common/platform/api/quiche_logging.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quic {
 
@@ -283,8 +283,8 @@
 };
 
 // Serializes |capsule| into a newly allocated buffer.
-QUIC_EXPORT_PRIVATE QuicBuffer SerializeCapsule(const Capsule& capsule,
-                                                QuicBufferAllocator* allocator);
+QUIC_EXPORT_PRIVATE quiche::QuicheBuffer SerializeCapsule(
+    const Capsule& capsule, quiche::QuicheBufferAllocator* allocator);
 
 }  // namespace quic
 
diff --git a/quic/core/http/capsule_test.cc b/quic/core/http/capsule_test.cc
index 2dfdef4..c971826 100644
--- a/quic/core/http/capsule_test.cc
+++ b/quic/core/http/capsule_test.cc
@@ -60,8 +60,8 @@
 
   void TestSerialization(const Capsule& capsule,
                          const std::string& expected_bytes) {
-    QuicBuffer serialized_capsule =
-        SerializeCapsule(capsule, SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer serialized_capsule =
+        SerializeCapsule(capsule, quiche::SimpleBufferAllocator::Get());
     quiche::test::CompareCharArraysWithHexError(
         "Serialized capsule", serialized_capsule.data(),
         serialized_capsule.size(), expected_bytes.data(),
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index ccf2d3a..c778faa 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -6642,7 +6642,7 @@
   ASSERT_TRUE(session != nullptr);
   NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
 
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   for (int i = 0; i < 10; i++) {
     session->SendOrQueueDatagram(MemSliceFromString("test"));
   }
@@ -6672,7 +6672,7 @@
   ASSERT_TRUE(connect_stream != nullptr);
   NiceMock<MockClientVisitor>& visitor = SetupWebTransportVisitor(session);
 
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   for (int i = 0; i < 10; i++) {
     session->SendOrQueueDatagram(MemSliceFromString("test"));
   }
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index 95d5913..d8a54e0 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -419,8 +419,8 @@
   InSequence s;
   // A large input that will occupy more than 1 byte in the length field.
   std::string input(2048, 'x');
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      input.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      input.length(), quiche::SimpleBufferAllocator::Get());
   // Partially send only 1 byte of the header to process.
   EXPECT_EQ(1u, decoder_.ProcessInput(header.data(), 1));
   EXPECT_THAT(decoder_.error(), IsQuicNoError());
diff --git a/quic/core/http/http_encoder.cc b/quic/core/http/http_encoder.cc
index 25f6200..684fdde 100644
--- a/quic/core/http/http_encoder.cc
+++ b/quic/core/http/http_encoder.cc
@@ -43,13 +43,12 @@
 }
 
 // static
-QuicBuffer HttpEncoder::SerializeDataFrameHeader(
-    QuicByteCount payload_length,
-    QuicBufferAllocator* allocator) {
+quiche::QuicheBuffer HttpEncoder::SerializeDataFrameHeader(
+    QuicByteCount payload_length, quiche::QuicheBufferAllocator* allocator) {
   QUICHE_DCHECK_NE(0u, payload_length);
   QuicByteCount header_length = GetDataFrameHeaderLength(payload_length);
 
-  QuicBuffer header(allocator, header_length);
+  quiche::QuicheBuffer header(allocator, header_length);
   QuicDataWriter writer(header.size(), header.data());
 
   if (WriteFrameHeader(payload_length, HttpFrameType::DATA, &writer)) {
@@ -57,7 +56,7 @@
   }
   QUIC_DLOG(ERROR)
       << "Http encoder failed when attempting to serialize data frame header.";
-  return QuicBuffer();
+  return quiche::QuicheBuffer();
 }
 
 // static
diff --git a/quic/core/http/http_encoder.h b/quic/core/http/http_encoder.h
index 585e739..97f4b3d 100644
--- a/quic/core/http/http_encoder.h
+++ b/quic/core/http/http_encoder.h
@@ -6,11 +6,12 @@
 #define QUICHE_QUIC_CORE_HTTP_HTTP_ENCODER_H_
 
 #include <memory>
+
 #include "quic/core/http/http_frames.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_error_codes.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_export.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quic {
 
@@ -25,10 +26,10 @@
   // Returns the length of the header for a DATA frame.
   static QuicByteCount GetDataFrameHeaderLength(QuicByteCount payload_length);
 
-  // Serializes a DATA frame header into a QuicBuffer; returns said QuicBuffer
-  // on success, empty buffer otherwise.
-  static QuicBuffer SerializeDataFrameHeader(QuicByteCount payload_length,
-                                             QuicBufferAllocator* allocator);
+  // Serializes a DATA frame header into a QuicheBuffer; returns said
+  // QuicheBuffer on success, empty buffer otherwise.
+  static quiche::QuicheBuffer SerializeDataFrameHeader(
+      QuicByteCount payload_length, quiche::QuicheBufferAllocator* allocator);
 
   // Serializes a HEADERS frame header into a new buffer stored in |output|.
   // Returns the length of the buffer on success, or 0 otherwise.
diff --git a/quic/core/http/http_encoder_test.cc b/quic/core/http/http_encoder_test.cc
index c2b0f36..aab63a1 100644
--- a/quic/core/http/http_encoder_test.cc
+++ b/quic/core/http/http_encoder_test.cc
@@ -5,18 +5,18 @@
 #include "quic/core/http/http_encoder.h"
 
 #include "absl/base/macros.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/test_tools/quic_test_utils.h"
+#include "common/simple_buffer_allocator.h"
 #include "common/test_tools/quiche_test_utils.h"
 
 namespace quic {
 namespace test {
 
 TEST(HttpEncoderTest, SerializeDataFrameHeader) {
-  QuicBuffer buffer = HttpEncoder::SerializeDataFrameHeader(
-      /* payload_length = */ 5, SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer buffer = HttpEncoder::SerializeDataFrameHeader(
+      /* payload_length = */ 5, quiche::SimpleBufferAllocator::Get());
   char output[] = {// type (DATA)
                    0x00,
                    // length
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index ae7a0d8..4fc2ddf 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -9,13 +9,13 @@
 #include "absl/strings/string_view.h"
 #include "quic/core/http/http_constants.h"
 #include "quic/core/qpack/qpack_header_table.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/test_tools/qpack/qpack_encoder_peer.h"
 #include "quic/test_tools/quic_spdy_session_peer.h"
 #include "quic/test_tools/quic_stream_peer.h"
 #include "quic/test_tools/quic_test_utils.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 
@@ -240,8 +240,8 @@
 
 TEST_P(QuicReceiveControlStreamTest, ReceiveWrongFrame) {
   // DATA frame header without payload.
-  QuicBuffer data = HttpEncoder::SerializeDataFrameHeader(
-      /* payload_length = */ 2, SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer data = HttpEncoder::SerializeDataFrameHeader(
+      /* payload_length = */ 2, quiche::SimpleBufferAllocator::Get());
 
   QuicStreamFrame frame(receive_control_stream_->id(), false, 1,
                         data.AsStringView());
diff --git a/quic/core/http/quic_spdy_client_stream_test.cc b/quic/core/http/quic_spdy_client_stream_test.cc
index 32a0c0c..a7e5d86 100644
--- a/quic/core/http/quic_spdy_client_stream_test.cc
+++ b/quic/core/http/quic_spdy_client_stream_test.cc
@@ -12,7 +12,6 @@
 #include "quic/core/crypto/null_encrypter.h"
 #include "quic/core/http/quic_spdy_client_session.h"
 #include "quic/core/http/spdy_utils.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_logging.h"
 #include "quic/platform/api/quic_socket_address.h"
@@ -20,6 +19,7 @@
 #include "quic/test_tools/crypto_test_utils.h"
 #include "quic/test_tools/quic_spdy_session_peer.h"
 #include "quic/test_tools/quic_test_utils.h"
+#include "common/simple_buffer_allocator.h"
 
 using spdy::SpdyHeaderBlock;
 using testing::_;
@@ -158,8 +158,8 @@
   auto headers = AsHeaderList(headers_);
   stream_->OnStreamHeaderList(false, headers.uncompressed_header_bytes(),
                               headers);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), body_)
                          : body_;
@@ -185,8 +185,8 @@
   headers = AsHeaderList(headers_);
   stream_->OnStreamHeaderList(false, headers.uncompressed_header_bytes(),
                               headers);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), body_)
                          : body_;
@@ -214,8 +214,8 @@
   headers = AsHeaderList(headers_);
   stream_->OnStreamHeaderList(false, headers.uncompressed_header_bytes(),
                               headers);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), body_)
                          : body_;
@@ -245,8 +245,8 @@
   auto headers = AsHeaderList(headers_);
   stream_->OnStreamHeaderList(false, headers.uncompressed_header_bytes(),
                               headers);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), body_)
                          : body_;
@@ -268,8 +268,8 @@
   EXPECT_THAT(stream_->stream_error(), IsQuicStreamNoError());
   EXPECT_EQ("200", stream_->response_headers().find(":status")->second);
   EXPECT_EQ(200, stream_->response_code());
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      large_body.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      large_body.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), large_body)
                          : large_body;
@@ -309,8 +309,8 @@
 
   // Now send the body, which should close the stream as the FIN has been
   // received, as well as all data.
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data = VersionUsesHttp3(connection_->transport_version())
                          ? absl::StrCat(header.AsStringView(), body_)
                          : body_;
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 6a57107..095efdd 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -1663,8 +1663,8 @@
   if (context_id.has_value()) {
     slice_length += QuicDataWriter::GetVarInt62Len(context_id.value());
   }
-  QuicBuffer buffer(connection()->helper()->GetStreamSendBufferAllocator(),
-                    slice_length);
+  quiche::QuicheBuffer buffer(
+      connection()->helper()->GetStreamSendBufferAllocator(), slice_length);
   QuicDataWriter writer(slice_length, buffer.data());
   if (!writer.WriteVarInt62(stream_id_to_write)) {
     QUIC_BUG(h3 datagram stream ID write fail)
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 2fcece7..adeb224 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -401,7 +401,7 @@
                                           bool force_write) {
   QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
   QUICHE_DCHECK_GT(data_length, 0u);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
       data_length,
       spdy_session_->connection()->helper()->GetStreamSendBufferAllocator());
   const bool can_write = CanWriteNewDataAfterData(header.size());
@@ -1563,7 +1563,7 @@
 void QuicSpdyStream::WriteCapsule(const Capsule& capsule, bool fin) {
   QUIC_DLOG(INFO) << ENDPOINT << "Stream " << id() << " sending capsule "
                   << capsule;
-  QuicBuffer serialized_capsule = SerializeCapsule(
+  quiche::QuicheBuffer serialized_capsule = SerializeCapsule(
       capsule,
       spdy_session_->connection()->helper()->GetStreamSendBufferAllocator());
   QUICHE_DCHECK_GT(serialized_capsule.size(), 0u);
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index cb00c2a..bf4dc45 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -20,7 +20,6 @@
 #include "quic/core/http/spdy_utils.h"
 #include "quic/core/http/web_transport_http3.h"
 #include "quic/core/quic_connection.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_stream_sequencer_buffer.h"
 #include "quic/core/quic_utils.h"
 #include "quic/core/quic_versions.h"
@@ -38,6 +37,7 @@
 #include "quic/test_tools/quic_stream_peer.h"
 #include "quic/test_tools/quic_test_utils.h"
 #include "common/quiche_mem_slice_storage.h"
+#include "common/simple_buffer_allocator.h"
 
 using spdy::kV3HighestPriority;
 using spdy::kV3LowestPriority;
@@ -477,8 +477,8 @@
   }
 
   std::string DataFrame(absl::string_view payload) {
-    QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-        payload.length(), SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+        payload.length(), quiche::SimpleBufferAllocator::Get());
     return absl::StrCat(header.AsStringView(), payload);
   }
 
@@ -1010,8 +1010,8 @@
   std::string data;
 
   if (UsesHttp3()) {
-    QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-        body.length(), SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+        body.length(), quiche::SimpleBufferAllocator::Get());
     data = absl::StrCat(header.AsStringView(), body);
     header_length = header.size();
   } else {
@@ -1053,8 +1053,8 @@
   std::string data;
 
   if (UsesHttp3()) {
-    QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-        body.length(), SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+        body.length(), quiche::SimpleBufferAllocator::Get());
     data = absl::StrCat(header.AsStringView(), body);
     header_length = header.size();
   } else {
@@ -1118,12 +1118,12 @@
 
   if (UsesHttp3()) {
     body = std::string(kWindow / 4 - 2, 'a');
-    QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-        body.length(), SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+        body.length(), quiche::SimpleBufferAllocator::Get());
     data = absl::StrCat(header.AsStringView(), body);
     header_length = header.size();
-    QuicBuffer header2 = HttpEncoder::SerializeDataFrameHeader(
-        body.length(), SimpleBufferAllocator::Get());
+    quiche::QuicheBuffer header2 = HttpEncoder::SerializeDataFrameHeader(
+        body.length(), quiche::SimpleBufferAllocator::Get());
     data2 = absl::StrCat(header2.AsStringView(), body2);
   } else {
     body = std::string(kWindow / 4, 'a');
@@ -1596,7 +1596,7 @@
   QuicByteCount header_length = 0;
   if (UsesHttp3()) {
     header_length = HttpEncoder::SerializeDataFrameHeader(
-                        body.length(), SimpleBufferAllocator::Get())
+                        body.length(), quiche::SimpleBufferAllocator::Get())
                         .size();
   }
 
@@ -1940,10 +1940,10 @@
   stream_->WriteOrBufferBody(body, false);
   stream_->WriteOrBufferBody(body2, true);
 
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body.length(), SimpleBufferAllocator::Get());
-  QuicBuffer header2 = HttpEncoder::SerializeDataFrameHeader(
-      body2.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body.length(), quiche::SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header2 = HttpEncoder::SerializeDataFrameHeader(
+      body2.length(), quiche::SimpleBufferAllocator::Get());
 
   EXPECT_CALL(*mock_ack_listener, OnPacketAcked(body.length(), _));
   QuicStreamFrame frame(stream_->id(), false, 0,
diff --git a/quic/core/http/web_transport_stream_adapter.cc b/quic/core/http/web_transport_stream_adapter.cc
index eb42fd8..7c6e990 100644
--- a/quic/core/http/web_transport_stream_adapter.cc
+++ b/quic/core/http/web_transport_stream_adapter.cc
@@ -46,7 +46,7 @@
     return false;
   }
 
-  quiche::QuicheMemSlice memslice(QuicBuffer::Copy(
+  quiche::QuicheMemSlice memslice(quiche::QuicheBuffer::Copy(
       session_->connection()->helper()->GetStreamSendBufferAllocator(), data));
   QuicConsumedData consumed =
       stream_->WriteMemSlices(absl::MakeSpan(&memslice, 1), /*fin=*/false);
diff --git a/quic/core/quic_buffer_allocator.cc b/quic/core/quic_buffer_allocator.cc
deleted file mode 100644
index 41491d9..0000000
--- a/quic/core/quic_buffer_allocator.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quic/core/quic_buffer_allocator.h"
-
-namespace quic {
-
-QuicBufferAllocator::~QuicBufferAllocator() = default;
-
-}  // namespace quic
diff --git a/quic/core/quic_buffer_allocator.h b/quic/core/quic_buffer_allocator.h
deleted file mode 100644
index 4d62f84..0000000
--- a/quic/core/quic_buffer_allocator.h
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef QUICHE_QUIC_CORE_QUIC_BUFFER_ALLOCATOR_H_
-#define QUICHE_QUIC_CORE_QUIC_BUFFER_ALLOCATOR_H_
-
-#include <stddef.h>
-
-#include <memory>
-
-#include "absl/strings/string_view.h"
-#include "quic/platform/api/quic_export.h"
-
-namespace quic {
-
-// Abstract base class for classes which allocate and delete buffers.
-class QUIC_EXPORT_PRIVATE QuicBufferAllocator {
- public:
-  virtual ~QuicBufferAllocator();
-
-  // Returns or allocates a new buffer of |size|. Never returns null.
-  virtual char* New(size_t size) = 0;
-
-  // Returns or allocates a new buffer of |size| if |flag_enable| is true.
-  // Otherwise, returns a buffer that is compatible with this class directly
-  // with operator new. Never returns null.
-  virtual char* New(size_t size, bool flag_enable) = 0;
-
-  // Releases a buffer.
-  virtual void Delete(char* buffer) = 0;
-
-  // Marks the allocator as being idle. Serves as a hint to notify the allocator
-  // that it should release any resources it's still holding on to.
-  virtual void MarkAllocatorIdle() {}
-};
-
-// A deleter that can be used to manage ownership of buffers allocated via
-// QuicBufferAllocator through std::unique_ptr.
-class QUIC_EXPORT_PRIVATE QuicBufferDeleter {
- public:
-  explicit QuicBufferDeleter(QuicBufferAllocator* allocator)
-      : allocator_(allocator) {}
-
-  QuicBufferAllocator* allocator() { return allocator_; }
-  void operator()(char* buffer) { allocator_->Delete(buffer); }
-
- private:
-  QuicBufferAllocator* allocator_;
-};
-
-using QuicUniqueBufferPtr = std::unique_ptr<char[], QuicBufferDeleter>;
-
-inline QuicUniqueBufferPtr MakeUniqueBuffer(QuicBufferAllocator* allocator,
-                                            size_t size) {
-  return QuicUniqueBufferPtr(allocator->New(size),
-                             QuicBufferDeleter(allocator));
-}
-
-// QuicUniqueBufferPtr with a length attached to it.  Similar to QuicheMemSlice,
-// except unlike QuicheMemSlice, QuicBuffer is mutable and is not
-// platform-specific.  Also unlike QuicheMemSlice, QuicBuffer can be empty.
-class QUIC_EXPORT_PRIVATE QuicBuffer {
- public:
-  QuicBuffer() : buffer_(nullptr, QuicBufferDeleter(nullptr)), size_(0) {}
-  QuicBuffer(QuicBufferAllocator* allocator, size_t size)
-      : buffer_(MakeUniqueBuffer(allocator, size)), size_(size) {}
-
-  QuicBuffer(QuicUniqueBufferPtr buffer, size_t size)
-      : buffer_(std::move(buffer)), size_(size) {}
-
-  // Make sure the move constructor zeroes out the size field.
-  QuicBuffer(QuicBuffer&& other)
-      : buffer_(std::move(other.buffer_)), size_(other.size_) {
-    other.buffer_ = nullptr;
-    other.size_ = 0;
-  }
-  QuicBuffer& operator=(QuicBuffer&& other) {
-    buffer_ = std::move(other.buffer_);
-    size_ = other.size_;
-
-    other.buffer_ = nullptr;
-    other.size_ = 0;
-    return *this;
-  }
-
-  // Convenience method to initialize a QuicBuffer by copying from an existing
-  // one.
-  static QuicBuffer Copy(QuicBufferAllocator* allocator,
-                         absl::string_view data) {
-    QuicBuffer result(allocator, data.size());
-    memcpy(result.data(), data.data(), data.size());
-    return result;
-  }
-
-  const char* data() const { return buffer_.get(); }
-  char* data() { return buffer_.get(); }
-  size_t size() const { return size_; }
-  bool empty() const { return size_ == 0; }
-  absl::string_view AsStringView() const {
-    return absl::string_view(data(), size());
-  }
-
-  // Releases the ownership of the underlying buffer.
-  QuicUniqueBufferPtr Release() {
-    size_ = 0;
-    return std::move(buffer_);
-  }
-
- private:
-  QuicUniqueBufferPtr buffer_;
-  size_t size_;
-};
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_CORE_QUIC_BUFFER_ALLOCATOR_H_
diff --git a/quic/core/quic_coalesced_packet.cc b/quic/core/quic_coalesced_packet.cc
index 52673b6..e8ce931 100644
--- a/quic/core/quic_coalesced_packet.cc
+++ b/quic/core/quic_coalesced_packet.cc
@@ -18,10 +18,9 @@
 }
 
 bool QuicCoalescedPacket::MaybeCoalescePacket(
-    const SerializedPacket& packet,
-    const QuicSocketAddress& self_address,
+    const SerializedPacket& packet, const QuicSocketAddress& self_address,
     const QuicSocketAddress& peer_address,
-    QuicBufferAllocator* allocator,
+    quiche::QuicheBufferAllocator* allocator,
     QuicPacketLength current_max_packet_length) {
   if (packet.encrypted_length == 0) {
     QUIC_BUG(quic_bug_10611_1) << "Trying to coalesce an empty packet";
diff --git a/quic/core/quic_coalesced_packet.h b/quic/core/quic_coalesced_packet.h
index e8bc2c3..9b8295c 100644
--- a/quic/core/quic_coalesced_packet.h
+++ b/quic/core/quic_coalesced_packet.h
@@ -21,7 +21,7 @@
   bool MaybeCoalescePacket(const SerializedPacket& packet,
                            const QuicSocketAddress& self_address,
                            const QuicSocketAddress& peer_address,
-                           QuicBufferAllocator* allocator,
+                           quiche::QuicheBufferAllocator* allocator,
                            QuicPacketLength current_max_packet_length);
 
   // Clears this coalesced packet.
diff --git a/quic/core/quic_coalesced_packet_test.cc b/quic/core/quic_coalesced_packet_test.cc
index 34f6da3..f626891 100644
--- a/quic/core/quic_coalesced_packet_test.cc
+++ b/quic/core/quic_coalesced_packet_test.cc
@@ -17,7 +17,7 @@
   QuicCoalescedPacket coalesced;
   EXPECT_EQ("total_length: 0 padding_size: 0 packets: {}",
             coalesced.ToString(0));
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   EXPECT_EQ(0u, coalesced.length());
   EXPECT_EQ(0u, coalesced.NumberOfPackets());
   char buffer[1000];
@@ -96,7 +96,7 @@
 
 TEST(QuicCoalescedPacketTest, CopyEncryptedBuffers) {
   QuicCoalescedPacket coalesced;
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   QuicSocketAddress self_address(QuicIpAddress::Loopback4(), 1);
   QuicSocketAddress peer_address(QuicIpAddress::Loopback4(), 2);
   std::string buffer(500, 'a');
@@ -139,7 +139,7 @@
   EXPECT_EQ("total_length: 0 padding_size: 0 packets: {}",
             coalesced.ToString(0));
 
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   EXPECT_EQ(0u, coalesced.length());
   char buffer[1000];
   QuicSocketAddress self_address(QuicIpAddress::Loopback4(), 1);
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 42b4358..40c55a3 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -452,8 +452,8 @@
   // Returns a QuicRandom to be used for all random number related functions.
   virtual QuicRandom* GetRandomGenerator() = 0;
 
-  // Returns a QuicBufferAllocator to be used for stream send buffers.
-  virtual QuicBufferAllocator* GetStreamSendBufferAllocator() = 0;
+  // Returns a QuicheBufferAllocator to be used for stream send buffers.
+  virtual quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() = 0;
 };
 
 class QUIC_EXPORT_PRIVATE QuicConnection
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 1162de1..fc4df23 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -30,7 +30,6 @@
 #include "quic/core/quic_packet_creator.h"
 #include "quic/core/quic_packets.h"
 #include "quic/core/quic_path_validator.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/core/quic_versions.h"
@@ -53,6 +52,7 @@
 #include "quic/test_tools/quic_test_utils.h"
 #include "quic/test_tools/simple_data_producer.h"
 #include "quic/test_tools/simple_session_notifier.h"
+#include "common/simple_buffer_allocator.h"
 
 using testing::_;
 using testing::AnyNumber;
@@ -169,14 +169,14 @@
 
   QuicRandom* GetRandomGenerator() override { return random_generator_; }
 
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override {
+  quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override {
     return &buffer_allocator_;
   }
 
  private:
   MockClock* clock_;
   MockRandom* random_generator_;
-  SimpleBufferAllocator buffer_allocator_;
+  quiche::SimpleBufferAllocator buffer_allocator_;
 };
 
 class TestConnection : public QuicConnection {
@@ -1068,7 +1068,7 @@
 
   MessageStatus SendMessage(absl::string_view message) {
     connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
-    quiche::QuicheMemSlice slice(QuicBuffer::Copy(
+    quiche::QuicheMemSlice slice(quiche::QuicheBuffer::Copy(
         connection_.helper()->GetStreamSendBufferAllocator(), message));
     return connection_.SendMessage(1, absl::MakeSpan(&slice, 1), false);
   }
@@ -1465,7 +1465,7 @@
   std::unique_ptr<MockLossAlgorithm> loss_algorithm_;
   MockClock clock_;
   MockRandom random_generator_;
-  SimpleBufferAllocator buffer_allocator_;
+  quiche::SimpleBufferAllocator buffer_allocator_;
   std::unique_ptr<TestConnectionHelper> helper_;
   std::unique_ptr<TestAlarmFactory> alarm_factory_;
   QuicFramer peer_framer_;
diff --git a/quic/core/quic_datagram_queue_test.cc b/quic/core/quic_datagram_queue_test.cc
index 041275c..295e72a 100644
--- a/quic/core/quic_datagram_queue_test.cc
+++ b/quic/core/quic_datagram_queue_test.cc
@@ -9,13 +9,13 @@
 #include "absl/strings/string_view.h"
 #include "absl/types/optional.h"
 #include "quic/core/crypto/null_encrypter.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_time.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_reference_counted.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/test_tools/quic_test_utils.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quic {
 namespace test {
@@ -71,8 +71,8 @@
   ~QuicDatagramQueueTestBase() = default;
 
   quiche::QuicheMemSlice CreateMemSlice(absl::string_view data) {
-    return quiche::QuicheMemSlice(
-        QuicBuffer::Copy(helper_.GetStreamSendBufferAllocator(), data));
+    return quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy(
+        helper_.GetStreamSendBufferAllocator(), data));
   }
 
   MockQuicConnectionHelper helper_;
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 0da608c..1cc4cf3 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -77,7 +77,7 @@
 class PacketCollector : public QuicPacketCreator::DelegateInterface,
                         public QuicStreamFrameDataProducer {
  public:
-  explicit PacketCollector(QuicBufferAllocator* allocator)
+  explicit PacketCollector(quiche::QuicheBufferAllocator* allocator)
       : send_buffer_(allocator) {}
   ~PacketCollector() override = default;
 
diff --git a/quic/core/quic_epoll_connection_helper.cc b/quic/core/quic_epoll_connection_helper.cc
index 42d2e02..980a09f 100644
--- a/quic/core/quic_epoll_connection_helper.cc
+++ b/quic/core/quic_epoll_connection_helper.cc
@@ -27,7 +27,8 @@
   return random_generator_;
 }
 
-QuicBufferAllocator* QuicEpollConnectionHelper::GetStreamSendBufferAllocator() {
+quiche::QuicheBufferAllocator*
+QuicEpollConnectionHelper::GetStreamSendBufferAllocator() {
   if (allocator_type_ == QuicAllocator::BUFFER_POOL) {
     return &stream_buffer_allocator_;
   } else {
diff --git a/quic/core/quic_epoll_connection_helper.h b/quic/core/quic_epoll_connection_helper.h
index d363d6b..e433ff5 100644
--- a/quic/core/quic_epoll_connection_helper.h
+++ b/quic/core/quic_epoll_connection_helper.h
@@ -9,17 +9,18 @@
 #define QUICHE_QUIC_CORE_QUIC_EPOLL_CONNECTION_HELPER_H_
 
 #include <sys/types.h>
+
 #include <set>
 
 #include "quic/core/quic_connection.h"
 #include "quic/core/quic_default_packet_writer.h"
 #include "quic/core/quic_packet_writer.h"
 #include "quic/core/quic_packets.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_time.h"
 #include "quic/platform/api/quic_epoll.h"
 #include "quic/platform/api/quic_stream_buffer_allocator.h"
 #include "net/quic/platform/impl/quic_epoll_clock.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 
@@ -40,7 +41,7 @@
   // QuicConnectionHelperInterface
   const QuicClock* GetClock() const override;
   QuicRandom* GetRandomGenerator() override;
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override;
+  quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override;
 
  private:
   const QuicEpollClock clock_;
@@ -48,7 +49,7 @@
   // Set up allocators.  They take up minimal memory before use.
   // Allocator for stream send buffers.
   QuicStreamBufferAllocator stream_buffer_allocator_;
-  SimpleBufferAllocator simple_buffer_allocator_;
+  quiche::SimpleBufferAllocator simple_buffer_allocator_;
   QuicAllocator allocator_type_;
 };
 
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc
index d24664d..150f2b8 100644
--- a/quic/core/quic_framer_test.cc
+++ b/quic/core/quic_framer_test.cc
@@ -921,7 +921,7 @@
   QuicTime start_;
   QuicFramer framer_;
   test::TestQuicVisitor visitor_;
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
 };
 
 // Multiple test cases of QuicFramerTest use byte arrays to define packets for
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index c7b7dcb..3b56f82 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -21,7 +21,6 @@
 #include "quic/core/frames/quic_stream_frame.h"
 #include "quic/core/quic_connection_id.h"
 #include "quic/core/quic_data_writer.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_expect_bug.h"
@@ -33,6 +32,7 @@
 #include "quic/test_tools/quic_test_utils.h"
 #include "quic/test_tools/simple_data_producer.h"
 #include "quic/test_tools/simple_quic_framer.h"
+#include "common/simple_buffer_allocator.h"
 #include "common/test_tools/quiche_test_utils.h"
 
 using ::testing::_;
@@ -287,7 +287,7 @@
   TestPacketCreator creator_;
   std::unique_ptr<SerializedPacket> serialized_packet_;
   SimpleDataProducer producer_;
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
 };
 
 // Run all packet creator tests with all supported versions of QUIC, and with
@@ -2140,7 +2140,7 @@
 
 TEST_P(QuicPacketCreatorTest, SerializeCoalescedPacket) {
   QuicCoalescedPacket coalesced;
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   QuicSocketAddress self_address(QuicIpAddress::Loopback4(), 1);
   QuicSocketAddress peer_address(QuicIpAddress::Loopback4(), 2);
   for (size_t i = ENCRYPTION_INITIAL; i < NUM_ENCRYPTION_LEVELS; ++i) {
@@ -2606,7 +2606,7 @@
   std::vector<SerializedPacket> packets_;
   QuicAckFrame ack_frame_;
   struct iovec iov_;
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
 
  private:
   std::unique_ptr<char[]> data_array_;
diff --git a/quic/core/quic_packets.cc b/quic/core/quic_packets.cc
index d625b5d..91840f8 100644
--- a/quic/core/quic_packets.cc
+++ b/quic/core/quic_packets.cc
@@ -511,7 +511,7 @@
 }
 
 SerializedPacket* CopySerializedPacket(const SerializedPacket& serialized,
-                                       QuicBufferAllocator* allocator,
+                                       quiche::QuicheBufferAllocator* allocator,
                                        bool copy_buffer) {
   SerializedPacket* copy = new SerializedPacket(
       serialized.packet_number, serialized.packet_number_length,
diff --git a/quic/core/quic_packets.h b/quic/core/quic_packets.h
index c79e5a5..c373327 100644
--- a/quic/core/quic_packets.h
+++ b/quic/core/quic_packets.h
@@ -410,8 +410,7 @@
 // indicates whether the encrypted buffer should be copied.
 QUIC_EXPORT_PRIVATE SerializedPacket* CopySerializedPacket(
     const SerializedPacket& serialized,
-    QuicBufferAllocator* allocator,
-    bool copy_buffer);
+    quiche::QuicheBufferAllocator* allocator, bool copy_buffer);
 
 // Allocates a new char[] of size |packet.encrypted_length| and copies in
 // |packet.encrypted_buffer|.
diff --git a/quic/core/quic_packets_test.cc b/quic/core/quic_packets_test.cc
index a07e289..ce7cf8e 100644
--- a/quic/core/quic_packets_test.cc
+++ b/quic/core/quic_packets_test.cc
@@ -74,7 +74,7 @@
 
 TEST_F(QuicPacketsTest, CopySerializedPacket) {
   std::string buffer(1000, 'a');
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   SerializedPacket packet(QuicPacketNumber(1), PACKET_1BYTE_PACKET_NUMBER,
                           buffer.data(), buffer.length(), /*has_ack=*/false,
                           /*has_stop_waiting=*/false);
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc
index 565eb96..02ae04c 100644
--- a/quic/core/quic_sent_packet_manager_test.cc
+++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -335,7 +335,7 @@
     return 4;
   }
 
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
   QuicSentPacketManager manager_;
   MockClock clock_;
   QuicConnectionStats stats_;
@@ -4495,7 +4495,7 @@
 
   QuicMessageFrame* message_frame = nullptr;
   {
-    quiche::QuicheMemSlice slice(QuicBuffer(&allocator_, 1024));
+    quiche::QuicheMemSlice slice(quiche::QuicheBuffer(&allocator_, 1024));
     message_frame = new QuicMessageFrame(/*message_id=*/1, std::move(slice));
     EXPECT_FALSE(message_frame->message_data.empty());
     EXPECT_EQ(message_frame->message_length, 1024);
diff --git a/quic/core/quic_stream_send_buffer.cc b/quic/core/quic_stream_send_buffer.cc
index e1e437b..aa58ead 100644
--- a/quic/core/quic_stream_send_buffer.cc
+++ b/quic/core/quic_stream_send_buffer.cc
@@ -47,7 +47,8 @@
   return offset == other.offset && length == other.length;
 }
 
-QuicStreamSendBuffer::QuicStreamSendBuffer(QuicBufferAllocator* allocator)
+QuicStreamSendBuffer::QuicStreamSendBuffer(
+    quiche::QuicheBufferAllocator* allocator)
     : current_end_offset_(0),
       stream_offset_(0),
       allocator_(allocator),
@@ -67,7 +68,7 @@
       GetQuicFlag(FLAGS_quic_send_buffer_max_data_slice_size);
   while (data_length > 0) {
     size_t slice_len = std::min(data_length, max_data_slice_size);
-    QuicBuffer buffer(allocator_, slice_len);
+    quiche::QuicheBuffer buffer(allocator_, slice_len);
     QuicUtils::CopyToBuffer(iov, iov_count, iov_offset, slice_len,
                             buffer.data());
     SaveMemSlice(quiche::QuicheMemSlice(std::move(buffer)));
diff --git a/quic/core/quic_stream_send_buffer.h b/quic/core/quic_stream_send_buffer.h
index 2069e8b..6fe7b75 100644
--- a/quic/core/quic_stream_send_buffer.h
+++ b/quic/core/quic_stream_send_buffer.h
@@ -64,7 +64,7 @@
 // across slice boundaries.
 class QUIC_EXPORT_PRIVATE QuicStreamSendBuffer {
  public:
-  explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator);
+  explicit QuicStreamSendBuffer(quiche::QuicheBufferAllocator* allocator);
   QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete;
   QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
   ~QuicStreamSendBuffer();
@@ -153,7 +153,7 @@
   // Offset of next inserted byte.
   QuicStreamOffset stream_offset_;
 
-  QuicBufferAllocator* allocator_;
+  quiche::QuicheBufferAllocator* allocator_;
 
   // Bytes that have been consumed by the stream.
   uint64_t stream_bytes_written_;
diff --git a/quic/core/quic_stream_send_buffer_test.cc b/quic/core/quic_stream_send_buffer_test.cc
index 15e0d3f..2e0f9dc 100644
--- a/quic/core/quic_stream_send_buffer_test.cc
+++ b/quic/core/quic_stream_send_buffer_test.cc
@@ -8,13 +8,13 @@
 
 #include "absl/strings/string_view.h"
 #include "quic/core/quic_data_writer.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_expect_bug.h"
 #include "quic/platform/api/quic_flags.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/test_tools/quic_stream_send_buffer_peer.h"
 #include "quic/test_tools/quic_test_utils.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 namespace test {
@@ -38,10 +38,10 @@
     iov[0] = MakeIovec(absl::string_view(data1));
     iov[1] = MakeIovec(absl::string_view(data2));
 
-    QuicBuffer buffer1(&allocator_, 1024);
+    quiche::QuicheBuffer buffer1(&allocator_, 1024);
     memset(buffer1.data(), 'c', buffer1.size());
     quiche::QuicheMemSlice slice1(std::move(buffer1));
-    QuicBuffer buffer2(&allocator_, 768);
+    quiche::QuicheBuffer buffer2(&allocator_, 768);
     memset(buffer2.data(), 'd', buffer2.size());
     quiche::QuicheMemSlice slice2(std::move(buffer2));
 
@@ -73,7 +73,7 @@
     EXPECT_EQ(3840u, send_buffer_.stream_bytes_outstanding());
   }
 
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
   QuicStreamSendBuffer send_buffer_;
 };
 
@@ -308,7 +308,7 @@
 
   // Last offset is end offset of last slice.
   EXPECT_EQ(3840u, QuicStreamSendBufferPeer::EndOffset(&send_buffer_));
-  QuicBuffer buffer(&allocator_, 60);
+  quiche::QuicheBuffer buffer(&allocator_, 60);
   memset(buffer.data(), 'e', buffer.size());
   quiche::QuicheMemSlice slice(std::move(buffer));
   send_buffer_.SaveMemSlice(std::move(slice));
@@ -317,7 +317,7 @@
 }
 
 TEST_F(QuicStreamSendBufferTest, SaveMemSliceSpan) {
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   QuicStreamSendBuffer send_buffer(&allocator);
 
   std::string data(1024, 'a');
@@ -331,7 +331,7 @@
 }
 
 TEST_F(QuicStreamSendBufferTest, SaveEmptyMemSliceSpan) {
-  SimpleBufferAllocator allocator;
+  quiche::SimpleBufferAllocator allocator;
   QuicStreamSendBuffer send_buffer(&allocator);
 
   std::string data(1024, 'a');
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index 7c97ce9..a1c0560 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -1249,14 +1249,18 @@
 
   Initialize();
   constexpr QuicByteCount kDataSize = 1024;
-  QuicBufferAllocator* allocator =
+  quiche::QuicheBufferAllocator* allocator =
       connection_->helper()->GetStreamSendBufferAllocator();
   std::vector<quiche::QuicheMemSlice> vector1;
-  vector1.push_back(quiche::QuicheMemSlice(QuicBuffer(allocator, kDataSize)));
-  vector1.push_back(quiche::QuicheMemSlice(QuicBuffer(allocator, kDataSize)));
+  vector1.push_back(
+      quiche::QuicheMemSlice(quiche::QuicheBuffer(allocator, kDataSize)));
+  vector1.push_back(
+      quiche::QuicheMemSlice(quiche::QuicheBuffer(allocator, kDataSize)));
   std::vector<quiche::QuicheMemSlice> vector2;
-  vector2.push_back(quiche::QuicheMemSlice(QuicBuffer(allocator, kDataSize)));
-  vector2.push_back(quiche::QuicheMemSlice(QuicBuffer(allocator, kDataSize)));
+  vector2.push_back(
+      quiche::QuicheMemSlice(quiche::QuicheBuffer(allocator, kDataSize)));
+  vector2.push_back(
+      quiche::QuicheMemSlice(quiche::QuicheBuffer(allocator, kDataSize)));
   absl::Span<quiche::QuicheMemSlice> span1(vector1);
   absl::Span<quiche::QuicheMemSlice> span2(vector2);
 
diff --git a/quic/masque/masque_compression_engine.cc b/quic/masque/masque_compression_engine.cc
index ca9ed93..69f75c0 100644
--- a/quic/masque/masque_compression_engine.cc
+++ b/quic/masque/masque_compression_engine.cc
@@ -7,7 +7,6 @@
 #include <cstdint>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_data_reader.h"
 #include "quic/core/quic_data_writer.h"
 #include "quic/core/quic_framer.h"
@@ -16,6 +15,7 @@
 #include "quic/core/quic_versions.h"
 #include "quic/platform/api/quic_containers.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 #include "common/quiche_text_utils.h"
 
 namespace quic {
@@ -269,7 +269,7 @@
                     sizeof(server_address.port()) + sizeof(uint8_t) +
                     server_address.host().ToPackedString().length();
   }
-  QuicBuffer buffer(
+  quiche::QuicheBuffer buffer(
       masque_session_->connection()->helper()->GetStreamSendBufferAllocator(),
       slice_length);
   QuicDataWriter writer(buffer.size(), buffer.data());
diff --git a/quic/qbone/qbone_session_base.cc b/quic/qbone/qbone_session_base.cc
index a5e8a2d..c12ec4e 100644
--- a/quic/qbone/qbone_session_base.cc
+++ b/quic/qbone/qbone_session_base.cc
@@ -10,7 +10,6 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_data_reader.h"
 #include "quic/core/quic_types.h"
 #include "quic/platform/api/quic_exported_stats.h"
@@ -20,6 +19,7 @@
 #include "quic/qbone/qbone_constants.h"
 #include "common/platform/api/quiche_command_line_flags.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 
 DEFINE_QUICHE_COMMAND_LINE_FLAG(
     bool, qbone_close_ephemeral_frames, true,
@@ -140,7 +140,7 @@
   }
 
   if (send_packets_as_messages_) {
-    quiche::QuicheMemSlice slice(QuicBuffer::Copy(
+    quiche::QuicheMemSlice slice(quiche::QuicheBuffer::Copy(
         connection()->helper()->GetStreamSendBufferAllocator(), packet));
     switch (SendMessage(absl::MakeSpan(&slice, 1), /*flush=*/true).status) {
       case MESSAGE_STATUS_SUCCESS:
diff --git a/quic/qbone/qbone_stream_test.cc b/quic/qbone/qbone_stream_test.cc
index 8e724a4..c2c862a 100644
--- a/quic/qbone/qbone_stream_test.cc
+++ b/quic/qbone/qbone_stream_test.cc
@@ -9,7 +9,6 @@
 #include "absl/strings/string_view.h"
 #include "quic/core/crypto/quic_random.h"
 #include "quic/core/quic_session.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_test.h"
 #include "quic/platform/api/quic_test_loopback.h"
@@ -17,6 +16,7 @@
 #include "quic/qbone/qbone_session_base.h"
 #include "quic/test_tools/mock_clock.h"
 #include "quic/test_tools/quic_test_utils.h"
+#include "common/simple_buffer_allocator.h"
 #include "spdy/core/spdy_protocol.h"
 
 namespace quic {
@@ -159,7 +159,7 @@
     return QuicRandom::GetInstance();
   }
 
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override {
+  quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override {
     return &buffer_allocator_;
   }
 
@@ -170,7 +170,7 @@
   std::unique_ptr<QuicAlarmFactory> alarm_factory_;
   std::unique_ptr<QuicConnection> connection_;
   // Used to implement the QuicConnectionHelperInterface.
-  SimpleBufferAllocator buffer_allocator_;
+  quiche::SimpleBufferAllocator buffer_allocator_;
   MockClock clock_;
   const QuicStreamId kStreamId = QuicUtils::GetFirstUnidirectionalStreamId(
       CurrentSupportedVersions()[0].transport_version, Perspective::IS_CLIENT);
diff --git a/quic/quic_transport/quic_transport_integration_test.cc b/quic/quic_transport/quic_transport_integration_test.cc
index 7bb8479..742fd46 100644
--- a/quic/quic_transport/quic_transport_integration_test.cc
+++ b/quic/quic_transport/quic_transport_integration_test.cc
@@ -13,7 +13,6 @@
 #include "url/origin.h"
 #include "quic/core/crypto/quic_crypto_client_config.h"
 #include "quic/core/crypto/quic_crypto_server_config.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_connection.h"
 #include "quic/core/quic_error_codes.h"
 #include "quic/core/quic_types.h"
diff --git a/quic/quic_transport/quic_transport_stream.cc b/quic/quic_transport/quic_transport_stream.cc
index 4def1de..a66f24c 100644
--- a/quic/quic_transport/quic_transport_stream.cc
+++ b/quic/quic_transport/quic_transport_stream.cc
@@ -7,7 +7,6 @@
 #include <sys/types.h>
 
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_error_codes.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
diff --git a/quic/test_tools/quic_test_backend.cc b/quic/test_tools/quic_test_backend.cc
index 12f530a..f84e93e 100644
--- a/quic/test_tools/quic_test_backend.cc
+++ b/quic/test_tools/quic_test_backend.cc
@@ -10,8 +10,6 @@
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_buffer_allocator.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/web_transport_interface.h"
 #include "quic/test_tools/web_transport_resets_backend.h"
 #include "quic/tools/web_transport_test_visitors.h"
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc
index 52eafed..9bc950f 100644
--- a/quic/test_tools/quic_test_utils.cc
+++ b/quic/test_tools/quic_test_utils.cc
@@ -21,12 +21,10 @@
 #include "quic/core/crypto/quic_decrypter.h"
 #include "quic/core/crypto/quic_encrypter.h"
 #include "quic/core/http/quic_spdy_client_session.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_config.h"
 #include "quic/core/quic_data_writer.h"
 #include "quic/core/quic_framer.h"
 #include "quic/core/quic_packet_creator.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/core/quic_versions.h"
@@ -36,7 +34,9 @@
 #include "quic/test_tools/crypto_test_utils.h"
 #include "quic/test_tools/quic_config_peer.h"
 #include "quic/test_tools/quic_connection_peer.h"
+#include "common/quiche_buffer_allocator.h"
 #include "common/quiche_endian.h"
+#include "common/simple_buffer_allocator.h"
 #include "spdy/core/spdy_frame_builder.h"
 
 using testing::_;
@@ -486,7 +486,8 @@
   }
 }
 
-QuicBufferAllocator* MockQuicConnectionHelper::GetStreamSendBufferAllocator() {
+quiche::QuicheBufferAllocator*
+MockQuicConnectionHelper::GetStreamSendBufferAllocator() {
   return &buffer_allocator_;
 }
 
@@ -1315,8 +1316,9 @@
     return quiche::QuicheMemSlice();
   }
 
-  static SimpleBufferAllocator* allocator = new SimpleBufferAllocator();
-  return quiche::QuicheMemSlice(QuicBuffer::Copy(allocator, data));
+  static quiche::SimpleBufferAllocator* allocator =
+      new quiche::SimpleBufferAllocator();
+  return quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy(allocator, data));
 }
 
 bool TaggingEncrypter::EncryptPacket(uint64_t /*packet_number*/,
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 3f6842e..869e416 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -30,7 +30,6 @@
 #include "quic/core/quic_path_validator.h"
 #include "quic/core/quic_sent_packet_manager.h"
 #include "quic/core/quic_server_id.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_socket_address.h"
@@ -41,6 +40,7 @@
 #include "quic/test_tools/quic_framer_peer.h"
 #include "quic/test_tools/simple_quic_framer.h"
 #include "common/quiche_mem_slice_storage.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 
@@ -517,13 +517,13 @@
   ~MockQuicConnectionHelper() override;
   const QuicClock* GetClock() const override;
   QuicRandom* GetRandomGenerator() override;
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override;
+  quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override;
   void AdvanceTime(QuicTime::Delta delta);
 
  private:
   MockClock clock_;
   MockRandom random_generator_;
-  SimpleBufferAllocator buffer_allocator_;
+  quiche::SimpleBufferAllocator buffer_allocator_;
 };
 
 class MockAlarmFactory : public QuicAlarmFactory {
diff --git a/quic/test_tools/simple_data_producer.h b/quic/test_tools/simple_data_producer.h
index dc0c076..e8dd4e4 100644
--- a/quic/test_tools/simple_data_producer.h
+++ b/quic/test_tools/simple_data_producer.h
@@ -7,10 +7,10 @@
 
 #include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_stream_frame_data_producer.h"
 #include "quic/core/quic_stream_send_buffer.h"
 #include "quic/platform/api/quic_containers.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 
@@ -57,7 +57,7 @@
       absl::flat_hash_map<std::pair<EncryptionLevel, QuicStreamOffset>,
                           std::string>;
 
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
 
   SendBufferMap send_buffer_map_;
 
diff --git a/quic/test_tools/simulator/simulator.cc b/quic/test_tools/simulator/simulator.cc
index a9835e8..2cdfe44 100644
--- a/quic/test_tools/simulator/simulator.cc
+++ b/quic/test_tools/simulator/simulator.cc
@@ -113,7 +113,7 @@
   return random_generator_;
 }
 
-QuicBufferAllocator* Simulator::GetStreamSendBufferAllocator() {
+quiche::QuicheBufferAllocator* Simulator::GetStreamSendBufferAllocator() {
   return &buffer_allocator_;
 }
 
diff --git a/quic/test_tools/simulator/simulator.h b/quic/test_tools/simulator/simulator.h
index b4298f5..225441d 100644
--- a/quic/test_tools/simulator/simulator.h
+++ b/quic/test_tools/simulator/simulator.h
@@ -10,11 +10,11 @@
 #include "absl/container/flat_hash_map.h"
 #include "absl/container/flat_hash_set.h"
 #include "quic/core/quic_connection.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/platform/api/quic_bug_tracker.h"
 #include "quic/platform/api/quic_containers.h"
 #include "quic/test_tools/simulator/actor.h"
 #include "quic/test_tools/simulator/alarm_factory.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 namespace simulator {
@@ -42,7 +42,7 @@
   // Begin QuicConnectionHelperInterface implementation.
   const QuicClock* GetClock() const override;
   QuicRandom* GetRandomGenerator() override;
-  QuicBufferAllocator* GetStreamSendBufferAllocator() override;
+  quiche::QuicheBufferAllocator* GetStreamSendBufferAllocator() override;
   // End QuicConnectionHelperInterface implementation.
 
   QuicAlarmFactory* GetAlarmFactory();
@@ -110,7 +110,7 @@
 
   Clock clock_;
   QuicRandom* random_generator_;
-  SimpleBufferAllocator buffer_allocator_;
+  quiche::SimpleBufferAllocator buffer_allocator_;
   AlarmFactory alarm_factory_;
 
   // Alarm for RunFor() method.
diff --git a/quic/tools/quic_simple_server_stream_test.cc b/quic/tools/quic_simple_server_stream_test.cc
index b75246f..40b470e 100644
--- a/quic/tools/quic_simple_server_stream_test.cc
+++ b/quic/tools/quic_simple_server_stream_test.cc
@@ -16,7 +16,6 @@
 #include "quic/core/http/http_encoder.h"
 #include "quic/core/http/spdy_utils.h"
 #include "quic/core/quic_error_codes.h"
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_utils.h"
 #include "quic/platform/api/quic_expect_bug.h"
@@ -32,6 +31,7 @@
 #include "quic/tools/quic_backend_response.h"
 #include "quic/tools/quic_memory_cache_backend.h"
 #include "quic/tools/quic_simple_server_session.h"
+#include "common/simple_buffer_allocator.h"
 
 using testing::_;
 using testing::AnyNumber;
@@ -280,8 +280,8 @@
       .WillRepeatedly(
           Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
   stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data =
       UsesHttp3() ? absl::StrCat(header.AsStringView(), body_) : body_;
   stream_->OnStreamFrame(
@@ -298,8 +298,8 @@
           Invoke(&session_, &MockQuicSimpleServerSession::ConsumeData));
 
   stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data =
       UsesHttp3() ? absl::StrCat(header.AsStringView(), body_) : body_;
   stream_->OnStreamFrame(
@@ -349,8 +349,8 @@
   EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
 
   stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data =
       UsesHttp3() ? absl::StrCat(header.AsStringView(), body_) : body_;
 
@@ -358,8 +358,8 @@
       QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, data));
   // Content length is still 11.  This will register as an error and we won't
   // accept the bytes.
-  header = HttpEncoder::SerializeDataFrameHeader(large_body.length(),
-                                                 SimpleBufferAllocator::Get());
+  header = HttpEncoder::SerializeDataFrameHeader(
+      large_body.length(), quiche::SimpleBufferAllocator::Get());
   std::string data2 = UsesHttp3()
                           ? absl::StrCat(header.AsStringView(), large_body)
                           : large_body;
@@ -381,8 +381,8 @@
   response_headers_[":status"] = "200 OK";
   response_headers_["content-length"] = "5";
   std::string body = "Yummm";
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body.length(), quiche::SimpleBufferAllocator::Get());
 
   memory_cache_backend_.AddResponse("www.google.com", "/bar",
                                     std::move(response_headers_), body);
@@ -413,8 +413,8 @@
   response_headers_["content-length"] = "5";
   std::string body = "Yummm";
 
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body.length(), quiche::SimpleBufferAllocator::Get());
 
   memory_cache_backend_.AddResponse("www.google.com", "/bar",
                                     std::move(response_headers_), body);
@@ -482,8 +482,8 @@
   response_headers_["content-length"] = "5";
   std::string body = "Yummm";
 
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body.length(), quiche::SimpleBufferAllocator::Get());
 
   memory_cache_backend_.AddResponse("www.google.com", "/bar",
                                     std::move(response_headers_), body);
@@ -512,8 +512,8 @@
   (*request_headers)[":authority"] = host;
   (*request_headers)[":method"] = "GET";
 
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body.length(), quiche::SimpleBufferAllocator::Get());
   std::vector<spdy::Http2HeaderBlock> early_hints;
   // Add two Early Hints.
   const size_t kNumEarlyHintsResponses = 2;
@@ -581,8 +581,8 @@
   response_headers_[":status"] = "200";
   response_headers_["content-length"] = "5";
   const std::string kBody = "Hello";
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   memory_cache_backend_.AddResponse(kHost, kPath, std::move(response_headers_),
                                     kBody);
 
@@ -742,8 +742,8 @@
   header_list.OnHeaderBlockEnd(128, 128);
   EXPECT_CALL(*stream_, WriteHeadersMock(/*fin=*/false));
   stream_->OnStreamHeaderList(/*fin=*/false, kFakeFrameLen, header_list);
-  QuicBuffer header = HttpEncoder::SerializeDataFrameHeader(
-      body_.length(), SimpleBufferAllocator::Get());
+  quiche::QuicheBuffer header = HttpEncoder::SerializeDataFrameHeader(
+      body_.length(), quiche::SimpleBufferAllocator::Get());
   std::string data =
       UsesHttp3() ? absl::StrCat(header.AsStringView(), body_) : body_;
   stream_->OnStreamFrame(
diff --git a/quic/tools/quic_transport_simple_server_session.cc b/quic/tools/quic_transport_simple_server_session.cc
index 157c16c..b8616d8 100644
--- a/quic/tools/quic_transport_simple_server_session.cc
+++ b/quic/tools/quic_transport_simple_server_session.cc
@@ -8,7 +8,6 @@
 
 #include "url/gurl.h"
 #include "url/origin.h"
-#include "quic/core/quic_buffer_allocator.h"
 #include "quic/core/quic_types.h"
 #include "quic/core/quic_versions.h"
 #include "quic/platform/api/quic_flags.h"
@@ -17,6 +16,7 @@
 #include "quic/quic_transport/quic_transport_stream.h"
 #include "quic/tools/web_transport_test_visitors.h"
 #include "common/platform/api/quiche_mem_slice.h"
+#include "common/quiche_buffer_allocator.h"
 
 namespace quic {
 
@@ -128,8 +128,9 @@
   if (mode_ != ECHO) {
     return;
   }
-  datagram_queue()->SendOrQueueDatagram(quiche::QuicheMemSlice(QuicBuffer::Copy(
-      connection()->helper()->GetStreamSendBufferAllocator(), message)));
+  datagram_queue()->SendOrQueueDatagram(
+      quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy(
+          connection()->helper()->GetStreamSendBufferAllocator(), message)));
 }
 
 void QuicTransportSimpleServerSession::MaybeEchoStreamsBack() {
diff --git a/quic/tools/web_transport_test_visitors.h b/quic/tools/web_transport_test_visitors.h
index 4fdac1c..27605b1 100644
--- a/quic/tools/web_transport_test_visitors.h
+++ b/quic/tools/web_transport_test_visitors.h
@@ -7,11 +7,11 @@
 
 #include <string>
 
-#include "quic/core/quic_simple_buffer_allocator.h"
 #include "quic/core/web_transport_interface.h"
 #include "quic/platform/api/quic_logging.h"
 #include "common/platform/api/quiche_mem_slice.h"
 #include "common/quiche_circular_deque.h"
+#include "common/simple_buffer_allocator.h"
 
 namespace quic {
 
@@ -219,7 +219,8 @@
   }
 
   void OnDatagramReceived(absl::string_view datagram) override {
-    quiche::QuicheMemSlice slice(QuicBuffer::Copy(&allocator_, datagram));
+    quiche::QuicheMemSlice slice(
+        quiche::QuicheBuffer::Copy(&allocator_, datagram));
     session_->SendOrQueueDatagram(std::move(slice));
   }
 
@@ -251,7 +252,7 @@
 
  private:
   WebTransportSession* session_;
-  SimpleBufferAllocator allocator_;
+  quiche::SimpleBufferAllocator allocator_;
   bool echo_stream_opened_ = false;
 
   quiche::QuicheCircularDeque<std::string> streams_to_echo_back_;
