diff --git a/quic/core/quic_stream_sequencer.cc b/quic/core/quic_stream_sequencer.cc
index fb89821..dc7b0cd 100644
--- a/quic/core/quic_stream_sequencer.cc
+++ b/quic/core/quic_stream_sequencer.cc
@@ -169,11 +169,6 @@
   return buffered_frames_.PeekRegion(offset, iov);
 }
 
-bool QuicStreamSequencer::PrefetchNextRegion(iovec* iov) {
-  DCHECK(!blocked_);
-  return buffered_frames_.PrefetchNextRegion(iov);
-}
-
 void QuicStreamSequencer::Read(std::string* buffer) {
   DCHECK(!blocked_);
   buffer->resize(buffer->size() + ReadableBytes());
diff --git a/quic/core/quic_stream_sequencer.h b/quic/core/quic_stream_sequencer.h
index e08a141..a735a1e 100644
--- a/quic/core/quic_stream_sequencer.h
+++ b/quic/core/quic_stream_sequencer.h
@@ -86,10 +86,6 @@
   // not been received yet or has already been consumed.
   bool PeekRegion(QuicStreamOffset offset, iovec* iov) const;
 
-  // Fills in one iovec with the next unread region.
-  // Returns false if no readable region is available.
-  bool PrefetchNextRegion(iovec* iov);
-
   // Copies the data into the iov_len buffers provided.  Returns the number of
   // bytes read.  Any buffered data no longer in use will be released.
   // TODO(rch): remove this method and instead implement it as a helper method
diff --git a/quic/core/quic_stream_sequencer_buffer.cc b/quic/core/quic_stream_sequencer_buffer.cc
index e68925b..89a6ad7 100644
--- a/quic/core/quic_stream_sequencer_buffer.cc
+++ b/quic/core/quic_stream_sequencer_buffer.cc
@@ -33,8 +33,7 @@
     : max_buffer_capacity_bytes_(max_capacity_bytes),
       blocks_count_(CalculateBlockCount(max_capacity_bytes)),
       total_bytes_read_(0),
-      blocks_(nullptr),
-      total_bytes_prefetched_(0) {
+      blocks_(nullptr) {
   Clear();
 }
 
@@ -53,7 +52,6 @@
   num_bytes_buffered_ = 0;
   bytes_received_.Clear();
   bytes_received_.Add(0, total_bytes_read_);
-  total_bytes_prefetched_ = total_bytes_read_;
 }
 
 bool QuicStreamSequencerBuffer::RetireBlock(size_t idx) {
@@ -267,8 +265,6 @@
       }
     }
   }
-  total_bytes_prefetched_ =
-      std::max(total_bytes_prefetched_, total_bytes_read_);
 
   return QUIC_NO_ERROR;
 }
@@ -367,19 +363,6 @@
   return true;
 }
 
-bool QuicStreamSequencerBuffer::PrefetchNextRegion(iovec* iov) {
-  DCHECK(iov);
-  DCHECK_LE(total_bytes_read_, total_bytes_prefetched_);
-  DCHECK_LE(total_bytes_prefetched_, FirstMissingByte());
-
-  if (!PeekRegion(total_bytes_prefetched_, iov)) {
-    return false;
-  }
-
-  total_bytes_prefetched_ += iov->iov_len;
-  return true;
-}
-
 bool QuicStreamSequencerBuffer::MarkConsumed(size_t bytes_used) {
   if (bytes_used > ReadableBytes()) {
     return false;
@@ -400,8 +383,7 @@
       RetireBlockIfEmpty(block_idx);
     }
   }
-  total_bytes_prefetched_ =
-      std::max(total_bytes_read_, total_bytes_prefetched_);
+
   return true;
 }
 
diff --git a/quic/core/quic_stream_sequencer_buffer.h b/quic/core/quic_stream_sequencer_buffer.h
index b0478c0..93b723f 100644
--- a/quic/core/quic_stream_sequencer_buffer.h
+++ b/quic/core/quic_stream_sequencer_buffer.h
@@ -137,16 +137,6 @@
   // Does not consume data.
   bool PeekRegion(QuicStreamOffset offset, iovec* iov) const;
 
-  // DEPRECATED, use PeekRegion() instead.
-  // Called to return the next region that has not been returned by this method
-  // previously, except if Clear() has been called then prefetch offset is set
-  // to BytesConsumed(), and if Readv() or MarkConsumed() reads further than
-  // prefetch offset, then offset is set to beginning of not yet consumed area.
-  // This method only returns reference of underlying data. The caller is
-  // responsible for copying and consuming the data.
-  // Returns true if the data is read, false otherwise.
-  bool PrefetchNextRegion(iovec* iov);
-
   // Called after GetReadableRegions() to free up |bytes_used| space if these
   // bytes are processed.
   // Pre-requisite: bytes_used <= available bytes to read.
@@ -243,10 +233,8 @@
 
   // Currently received data.
   QuicIntervalSet<QuicStreamOffset> bytes_received_;
-
-  // Total number of bytes that have been prefetched.
-  QuicStreamOffset total_bytes_prefetched_;
 };
+
 }  // namespace quic
 
 #endif  // QUICHE_QUIC_CORE_QUIC_STREAM_SEQUENCER_BUFFER_H_
diff --git a/quic/core/quic_stream_sequencer_buffer_test.cc b/quic/core/quic_stream_sequencer_buffer_test.cc
index 20dbe05..a7872dd 100644
--- a/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -583,101 +583,6 @@
             IovecToStringPiece(iov));
 }
 
-TEST_F(QuicStreamSequencerBufferTest, PrefetchEmptyBuffer) {
-  iovec iov;
-  EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchInitialBuffer) {
-  std::string source(kBlockSizeBytes, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source, IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferWithOffset) {
-  std::string source(1024, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source, IovecToStringPiece(iov));
-  // The second frame goes into the same block.
-  std::string source2(800, 'a');
-  buffer_->OnStreamData(1024, source2, &written_, &error_details_);
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source2, IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferWithMultipleBlocks) {
-  const size_t data_size = 1024;
-  std::string source(data_size, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source, IovecToStringPiece(iov));
-  std::string source2(kBlockSizeBytes, 'b');
-  buffer_->OnStreamData(data_size, source2, &written_, &error_details_);
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(std::string(kBlockSizeBytes - data_size, 'b'),
-            IovecToStringPiece(iov));
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(std::string(data_size, 'b'), IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchBufferAfterBlockRetired) {
-  std::string source(kBlockSizeBytes, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source, IovecToStringPiece(iov));
-  // Read the whole block so it's retired.
-  char dest[kBlockSizeBytes];
-  helper_->Read(dest, kBlockSizeBytes);
-
-  std::string source2(300, 'b');
-  buffer_->OnStreamData(kBlockSizeBytes, source2, &written_, &error_details_);
-
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source2, IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchContinously) {
-  std::string source(kBlockSizeBytes, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source, IovecToStringPiece(iov));
-  std::string source2(kBlockSizeBytes, 'b');
-  buffer_->OnStreamData(kBlockSizeBytes, source2, &written_, &error_details_);
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(source2, IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, ConsumeMoreThanPrefetch) {
-  std::string source(100, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  char dest[30];
-  helper_->Read(dest, 30);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(std::string(70, 'a'), IovecToStringPiece(iov));
-  std::string source2(100, 'b');
-  buffer_->OnStreamData(100, source2, &written_, &error_details_);
-  buffer_->MarkConsumed(100);
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(std::string(70, 'b'), IovecToStringPiece(iov));
-}
-
-TEST_F(QuicStreamSequencerBufferTest, PrefetchMoreThanBufferHas) {
-  std::string source(100, 'a');
-  buffer_->OnStreamData(0, source, &written_, &error_details_);
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(std::string(100, 'a'), IovecToStringPiece(iov));
-  EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));
-}
-
 TEST_F(QuicStreamSequencerBufferTest, PeekEmptyBuffer) {
   iovec iov;
   EXPECT_FALSE(buffer_->PeekRegion(0, &iov));
@@ -1179,29 +1084,6 @@
   EXPECT_LE(bytes_to_buffer_, total_bytes_written_);
 }
 
-// Regression test for https://crbug.com/969391.
-TEST_F(QuicStreamSequencerBufferTest, PrefetchAfterClear) {
-  // Write a few bytes.
-  const std::string kData("foo");
-  EXPECT_EQ(QUIC_NO_ERROR, buffer_->OnStreamData(/* offset = */ 0, kData,
-                                                 &written_, &error_details_));
-  EXPECT_EQ(kData.size(), written_);
-
-  // Prefetch all buffered data.
-  iovec iov;
-  EXPECT_TRUE(buffer_->PrefetchNextRegion(&iov));
-  EXPECT_EQ(kData, IovecToStringPiece(iov));
-
-  // No more data to prefetch.
-  EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));
-
-  // Clear all buffered data.
-  buffer_->Clear();
-
-  // Still no data to prefetch.
-  EXPECT_FALSE(buffer_->PrefetchNextRegion(&iov));
-}
-
 }  // anonymous namespace
 
 }  // namespace test
