diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index accc002..17142ef 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -140,13 +140,13 @@
 
   uint32_t dwEstimateSize = std::min(size, 8192U);
   std::vector<uint8_t> data(dwEstimateSize);
-  if (!pFile->ReadBlock(data.data(), 0, dwEstimateSize))
+  if (!pFile->ReadBlockAtOffset(data.data(), 0, dwEstimateSize))
     return;
 
   std::unique_ptr<CPDF_Dictionary> pDict = InitJPEG(data);
   if (!pDict && size > dwEstimateSize) {
     data.resize(size);
-    pFile->ReadBlock(data.data(), 0, size);
+    pFile->ReadBlockAtOffset(data.data(), 0, size);
     pDict = InitJPEG(data);
   }
   if (!pDict)
@@ -162,7 +162,7 @@
     return;
 
   std::vector<uint8_t> data(size);
-  if (!pFile->ReadBlock(data.data(), 0, size))
+  if (!pFile->ReadBlockAtOffset(data.data(), 0, size))
     return;
 
   std::unique_ptr<CPDF_Dictionary> pDict = InitJPEG(data);
diff --git a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
index fb29d6f..d62abfe 100644
--- a/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_avail_unittest.cpp
@@ -26,7 +26,7 @@
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
-  void SimulateReadError() { ReadBlock(nullptr, 0, 1); }
+  void SimulateReadError() { ReadBlockAtOffset(nullptr, 0, 1); }
 
  private:
   TestReadValidator()
diff --git a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
index 57ab09c..7641dfe 100644
--- a/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_page_object_avail_unittest.cpp
@@ -26,7 +26,7 @@
   template <typename T, typename... Args>
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
-  void SimulateReadError() { ReadBlock(nullptr, 0, 1); }
+  void SimulateReadError() { ReadBlockAtOffset(nullptr, 0, 1); }
 
  private:
   TestReadValidator()
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index 33fdd73..7012bd6 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -256,8 +256,8 @@
   ASSERT_TRUE(pFileAccess);
 
   std::vector<unsigned char> data(pFileAccess->GetSize() + kTestHeaderOffset);
-  ASSERT_TRUE(pFileAccess->ReadBlock(&data.front() + kTestHeaderOffset, 0,
-                                     pFileAccess->GetSize()));
+  ASSERT_TRUE(pFileAccess->ReadBlockAtOffset(&data.front() + kTestHeaderOffset,
+                                             0, pFileAccess->GetSize()));
   CPDF_TestParser parser;
   parser.InitTestFromBufferWithOffset(data, kTestHeaderOffset);
 
@@ -277,8 +277,8 @@
   ASSERT_TRUE(pFileAccess);
 
   std::vector<unsigned char> data(pFileAccess->GetSize() + kTestHeaderOffset);
-  ASSERT_TRUE(pFileAccess->ReadBlock(&data.front() + kTestHeaderOffset, 0,
-                                     pFileAccess->GetSize()));
+  ASSERT_TRUE(pFileAccess->ReadBlockAtOffset(&data.front() + kTestHeaderOffset,
+                                             0, pFileAccess->GetSize()));
   CPDF_TestParser parser;
   parser.InitTestFromBufferWithOffset(data, kTestHeaderOffset);
 
diff --git a/core/fpdfapi/parser/cpdf_read_validator.cpp b/core/fpdfapi/parser/cpdf_read_validator.cpp
index d850561..37f17ce 100644
--- a/core/fpdfapi/parser/cpdf_read_validator.cpp
+++ b/core/fpdfapi/parser/cpdf_read_validator.cpp
@@ -57,9 +57,9 @@
   has_unavailable_data_ = false;
 }
 
-bool CPDF_ReadValidator::ReadBlock(void* buffer,
-                                   FX_FILESIZE offset,
-                                   size_t size) {
+bool CPDF_ReadValidator::ReadBlockAtOffset(void* buffer,
+                                           FX_FILESIZE offset,
+                                           size_t size) {
   FX_SAFE_FILESIZE end_offset = offset;
   end_offset += size;
   if (!end_offset.IsValid() || end_offset.ValueOrDie() > file_size_)
@@ -70,7 +70,7 @@
     return false;
   }
 
-  if (file_read_->ReadBlock(buffer, offset, size))
+  if (file_read_->ReadBlockAtOffset(buffer, offset, size))
     return true;
 
   read_error_ = true;
diff --git a/core/fpdfapi/parser/cpdf_read_validator.h b/core/fpdfapi/parser/cpdf_read_validator.h
index 281a2ea..23cc4d0 100644
--- a/core/fpdfapi/parser/cpdf_read_validator.h
+++ b/core/fpdfapi/parser/cpdf_read_validator.h
@@ -43,7 +43,9 @@
   bool CheckWholeFileAndRequestIfUnavailable();
 
   // IFX_SeekableReadStream overrides:
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
   FX_FILESIZE GetSize() override;
 
  protected:
diff --git a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
index cf8b9b6..aefc524 100644
--- a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
@@ -71,8 +71,8 @@
   auto validator = pdfium::MakeRetain<CPDF_ReadValidator>(file, &file_avail);
 
   std::vector<uint8_t> read_buffer(100);
-  EXPECT_FALSE(
-      validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size()));
+  EXPECT_FALSE(validator->ReadBlockAtOffset(read_buffer.data(), 5000,
+                                            read_buffer.size()));
 
   EXPECT_FALSE(validator->read_error());
   EXPECT_TRUE(validator->has_unavailable_data());
@@ -81,8 +81,8 @@
 
   file_avail.SetAvailableRange(5000, 5000 + read_buffer.size());
 
-  EXPECT_TRUE(
-      validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size()));
+  EXPECT_TRUE(validator->ReadBlockAtOffset(read_buffer.data(), 5000,
+                                           read_buffer.size()));
   EXPECT_FALSE(validator->read_error());
   EXPECT_FALSE(validator->has_unavailable_data());
 }
@@ -98,8 +98,8 @@
 
   std::vector<uint8_t> read_buffer(100);
 
-  EXPECT_FALSE(
-      validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size()));
+  EXPECT_FALSE(validator->ReadBlockAtOffset(read_buffer.data(), 5000,
+                                            read_buffer.size()));
   EXPECT_FALSE(validator->read_error());
   EXPECT_TRUE(validator->has_unavailable_data());
 
@@ -110,8 +110,8 @@
   hints.Reset();
 
   validator->ResetErrors();
-  EXPECT_TRUE(
-      validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size()));
+  EXPECT_TRUE(validator->ReadBlockAtOffset(read_buffer.data(), 5000,
+                                           read_buffer.size()));
   // No new request on already available data.
   EXPECT_EQ(MakeRange(0, 0), hints.GetLastRequstedRange());
   EXPECT_FALSE(validator->read_error());
@@ -119,9 +119,9 @@
 
   validator->ResetErrors();
   // Try read unavailable data at file end.
-  EXPECT_FALSE(validator->ReadBlock(read_buffer.data(),
-                                    validator->GetSize() - read_buffer.size(),
-                                    read_buffer.size()));
+  EXPECT_FALSE(validator->ReadBlockAtOffset(
+      read_buffer.data(), validator->GetSize() - read_buffer.size(),
+      read_buffer.size()));
   // Should not enlarge request at file end.
   EXPECT_EQ(validator->GetSize(), hints.GetLastRequstedRange().second);
   EXPECT_FALSE(validator->read_error());
@@ -137,7 +137,7 @@
   static const uint32_t kBufferSize = 3 * 1000;
   std::vector<uint8_t> buffer(kBufferSize);
 
-  EXPECT_FALSE(validator->ReadBlock(buffer.data(), 5000, 100));
+  EXPECT_FALSE(validator->ReadBlockAtOffset(buffer.data(), 5000, 100));
   EXPECT_TRUE(validator->read_error());
   EXPECT_TRUE(validator->has_unavailable_data());
 }
@@ -153,9 +153,9 @@
   // If we have int overflow, this is equal reading after file end. This is not
   // read_error, and in this case we have not unavailable data. It is just error
   // of input params.
-  EXPECT_FALSE(validator->ReadBlock(read_buffer.data(),
-                                    std::numeric_limits<FX_FILESIZE>::max() - 1,
-                                    read_buffer.size()));
+  EXPECT_FALSE(validator->ReadBlockAtOffset(
+      read_buffer.data(), std::numeric_limits<FX_FILESIZE>::max() - 1,
+      read_buffer.size()));
   EXPECT_FALSE(validator->read_error());
   EXPECT_FALSE(validator->has_unavailable_data());
 }
@@ -173,7 +173,7 @@
   ASSERT_FALSE(validator->has_read_problems());
 
   // Data is unavailable
-  validator->ReadBlock(test_data.data(), 0, 100);
+  validator->ReadBlockAtOffset(test_data.data(), 0, 100);
 
   EXPECT_TRUE(validator->has_read_problems());
   EXPECT_TRUE(validator->has_unavailable_data());
@@ -186,7 +186,7 @@
 
     file_avail.SetAvailableRange(0, 100);
     // Read fail.
-    validator->ReadBlock(test_data.data(), 0, 100);
+    validator->ReadBlockAtOffset(test_data.data(), 0, 100);
     EXPECT_TRUE(validator->has_read_problems());
     EXPECT_TRUE(validator->has_unavailable_data());
     EXPECT_TRUE(validator->read_error());
@@ -211,7 +211,7 @@
   ASSERT_FALSE(validator->has_read_problems());
 
   // Data is unavailable
-  validator->ReadBlock(test_data.data(), 0, 100);
+  validator->ReadBlockAtOffset(test_data.data(), 0, 100);
 
   EXPECT_TRUE(validator->has_read_problems());
   EXPECT_TRUE(validator->has_unavailable_data());
@@ -224,7 +224,7 @@
 
     file_avail.SetAvailableRange(0, 100);
     // Read fail.
-    validator->ReadBlock(test_data.data(), 0, 100);
+    validator->ReadBlockAtOffset(test_data.data(), 0, 100);
     EXPECT_TRUE(validator->has_read_problems());
     EXPECT_TRUE(validator->has_unavailable_data());
     EXPECT_TRUE(validator->read_error());
@@ -267,8 +267,8 @@
   EXPECT_FALSE(validator->has_unavailable_data());
 
   std::vector<uint8_t> read_buffer(100);
-  EXPECT_TRUE(
-      validator->ReadBlock(read_buffer.data(), 5000, read_buffer.size()));
+  EXPECT_TRUE(validator->ReadBlockAtOffset(read_buffer.data(), 5000,
+                                           read_buffer.size()));
   // No new request on already available data.
   EXPECT_EQ(MakeRange(0, 0), hints.GetLastRequstedRange());
   EXPECT_FALSE(validator->read_error());
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 8009024..6ebca95 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -161,7 +161,7 @@
                               uint8_t* buf,
                               uint32_t size) const {
   if (!m_bMemoryBased && m_pFile)
-    return m_pFile->ReadBlock(buf, offset, size);
+    return m_pFile->ReadBlockAtOffset(buf, offset, size);
 
   if (m_pDataBuf)
     memcpy(buf, m_pDataBuf.get() + offset, size);
diff --git a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
index 146bd4b..4057896 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
@@ -18,7 +18,9 @@
   ~InvalidStream() override = default;
 
   // IFX_SeekableReadStream overrides:
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override {
     // Read failure.
     return false;
   }
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 45e0f17..fd187e4 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -45,7 +45,9 @@
   ~ReadableSubStream() override = default;
 
   // IFX_SeekableReadStream overrides:
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override {
     FX_SAFE_FILESIZE safe_end = offset;
     safe_end += size;
     // Check that requested range is valid, to prevent calling of ReadBlock
@@ -53,7 +55,7 @@
     if (!safe_end.IsValid() || safe_end.ValueOrDie() > m_PartSize)
       return false;
 
-    return m_pFileRead->ReadBlock(buffer, m_PartOffset + offset, size);
+    return m_pFileRead->ReadBlockAtOffset(buffer, m_PartOffset + offset, size);
   }
 
   FX_FILESIZE GetSize() override { return m_PartSize; }
@@ -111,7 +113,8 @@
     read_size = m_FileLen - read_pos;
 
   m_pFileBuf.resize(read_size);
-  if (!m_pFileAccess->ReadBlock(m_pFileBuf.data(), read_pos, read_size)) {
+  if (!m_pFileAccess->ReadBlockAtOffset(m_pFileBuf.data(), read_pos,
+                                        read_size)) {
     m_pFileBuf.clear();
     return false;
   }
@@ -154,7 +157,7 @@
 }
 
 bool CPDF_SyntaxParser::ReadBlock(uint8_t* pBuf, uint32_t size) {
-  if (!m_pFileAccess->ReadBlock(pBuf, m_Pos + m_HeaderOffset, size))
+  if (!m_pFileAccess->ReadBlockAtOffset(pBuf, m_Pos + m_HeaderOffset, size))
     return false;
   m_Pos += size;
   return true;
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp
index f25d68b..67f74c5 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp
@@ -76,7 +76,7 @@
   static constexpr size_t kBufSize = 4;
   uint8_t buf[kBufSize];
   for (FX_FILESIZE offset = 0; offset <= 1024; ++offset) {
-    if (!pFile->ReadBlock(buf, offset, kBufSize))
+    if (!pFile->ReadBlockAtOffset(buf, offset, kBufSize))
       return {};
 
     if (memcmp(buf, "%PDF", 4) == 0)
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.cpp b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
index fc703d8..df84289 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.cpp
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
@@ -1271,8 +1271,8 @@
     if (m_pCodecMemory && input_size > m_pCodecMemory->GetSize())
       m_pCodecMemory = pdfium::MakeRetain<CFX_CodecMemory>(input_size);
 
-    if (!m_pFile->ReadBlock(m_pCodecMemory->GetBuffer(), m_offSet,
-                            input_size)) {
+    if (!m_pFile->ReadBlockAtOffset(m_pCodecMemory->GetBuffer(), m_offSet,
+                                    input_size)) {
       m_status = FXCODEC_STATUS_ERR_READ;
       return false;
     }
@@ -1354,8 +1354,8 @@
     if (m_pCodecMemory && input_size > m_pCodecMemory->GetSize())
       m_pCodecMemory = pdfium::MakeRetain<CFX_CodecMemory>(input_size);
 
-    bool bResult =
-        m_pFile->ReadBlock(m_pCodecMemory->GetBuffer(), m_offSet, input_size);
+    bool bResult = m_pFile->ReadBlockAtOffset(m_pCodecMemory->GetBuffer(),
+                                              m_offSet, input_size);
     if (!bResult) {
       m_pDeviceBitmap = nullptr;
       m_pFile = nullptr;
@@ -1551,7 +1551,8 @@
   size_t size = std::min<size_t>(m_pFile->GetSize(), FXCODEC_BLOCK_SIZE);
   m_pCodecMemory = pdfium::MakeRetain<CFX_CodecMemory>(size);
   m_offSet = 0;
-  if (!m_pFile->ReadBlock(m_pCodecMemory->GetBuffer(), m_offSet, size)) {
+  if (!m_pFile->ReadBlockAtOffset(m_pCodecMemory->GetBuffer(), m_offSet,
+                                  size)) {
     m_status = FXCODEC_STATUS_ERR_READ;
     return false;
   }
@@ -1619,8 +1620,8 @@
   }
 
   // Append new data past the bytes not yet processed by the codec.
-  if (!m_pFile->ReadBlock(m_pCodecMemory->GetBuffer() + dwUnconsumed, m_offSet,
-                          dwBytesToFetchFromFile)) {
+  if (!m_pFile->ReadBlockAtOffset(m_pCodecMemory->GetBuffer() + dwUnconsumed,
+                                  m_offSet, dwBytesToFetchFromFile)) {
     err_status = FXCODEC_STATUS_ERR_READ;
     return false;
   }
diff --git a/core/fxcodec/codec/ccodec_tiffmodule.cpp b/core/fxcodec/codec/ccodec_tiffmodule.cpp
index 2c2ad14..be3d339 100644
--- a/core/fxcodec/codec/ccodec_tiffmodule.cpp
+++ b/core/fxcodec/codec/ccodec_tiffmodule.cpp
@@ -121,7 +121,7 @@
     return 0;
 
   FX_FILESIZE offset = pTiffContext->offset();
-  if (!pTiffContext->io_in()->ReadBlock(buf, offset, length))
+  if (!pTiffContext->io_in()->ReadBlockAtOffset(buf, offset, length))
     return 0;
 
   pTiffContext->set_offset(increment.ValueOrDie());
diff --git a/core/fxcrt/cfx_memorystream.cpp b/core/fxcrt/cfx_memorystream.cpp
index ac04dcc..442fdf3 100644
--- a/core/fxcrt/cfx_memorystream.cpp
+++ b/core/fxcrt/cfx_memorystream.cpp
@@ -36,9 +36,9 @@
   return true;
 }
 
-bool CFX_MemoryStream::ReadBlock(void* buffer,
-                                 FX_FILESIZE offset,
-                                 size_t size) {
+bool CFX_MemoryStream::ReadBlockAtOffset(void* buffer,
+                                         FX_FILESIZE offset,
+                                         size_t size) {
   if (!buffer || offset < 0 || !size)
     return false;
 
@@ -59,7 +59,7 @@
     return 0;
 
   size_t nRead = std::min(size, m_nCurSize - m_nCurPos);
-  if (!ReadBlock(buffer, static_cast<int32_t>(m_nCurPos), nRead))
+  if (!ReadBlockAtOffset(buffer, static_cast<int32_t>(m_nCurPos), nRead))
     return 0;
 
   return nRead;
diff --git a/core/fxcrt/cfx_memorystream.h b/core/fxcrt/cfx_memorystream.h
index c09c390..a54b814 100644
--- a/core/fxcrt/cfx_memorystream.h
+++ b/core/fxcrt/cfx_memorystream.h
@@ -22,7 +22,9 @@
   FX_FILESIZE GetSize() override;
   FX_FILESIZE GetPosition() override;
   bool IsEOF() override;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
   size_t ReadBlock(void* buffer, size_t size) override;
   bool WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) override;
   bool Flush() override;
diff --git a/core/fxcrt/cfx_readonlymemorystream.cpp b/core/fxcrt/cfx_readonlymemorystream.cpp
index 7b6a4c2..bd31ee3 100644
--- a/core/fxcrt/cfx_readonlymemorystream.cpp
+++ b/core/fxcrt/cfx_readonlymemorystream.cpp
@@ -18,9 +18,9 @@
   return pdfium::base::checked_cast<FX_FILESIZE>(m_span.size());
 }
 
-bool CFX_ReadOnlyMemoryStream::ReadBlock(void* buffer,
-                                         FX_FILESIZE offset,
-                                         size_t size) {
+bool CFX_ReadOnlyMemoryStream::ReadBlockAtOffset(void* buffer,
+                                                 FX_FILESIZE offset,
+                                                 size_t size) {
   if (!buffer || offset < 0 || size == 0)
     return false;
 
diff --git a/core/fxcrt/cfx_readonlymemorystream.h b/core/fxcrt/cfx_readonlymemorystream.h
index a6645b8..df277b5 100644
--- a/core/fxcrt/cfx_readonlymemorystream.h
+++ b/core/fxcrt/cfx_readonlymemorystream.h
@@ -18,7 +18,9 @@
 
   // IFX_SeekableReadStream:
   FX_FILESIZE GetSize() override;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
 
  private:
   explicit CFX_ReadOnlyMemoryStream(pdfium::span<const uint8_t> span);
diff --git a/core/fxcrt/cfx_seekablemultistream.cpp b/core/fxcrt/cfx_seekablemultistream.cpp
index 24a29ee..21bdd29 100644
--- a/core/fxcrt/cfx_seekablemultistream.cpp
+++ b/core/fxcrt/cfx_seekablemultistream.cpp
@@ -29,9 +29,9 @@
   return dwSize;
 }
 
-bool CFX_SeekableMultiStream::ReadBlock(void* buffer,
-                                        FX_FILESIZE offset,
-                                        size_t size) {
+bool CFX_SeekableMultiStream::ReadBlockAtOffset(void* buffer,
+                                                FX_FILESIZE offset,
+                                                size_t size) {
   int32_t iCount = pdfium::CollectionSize<int32_t>(m_Data);
   int32_t index = 0;
   while (index < iCount) {
diff --git a/core/fxcrt/cfx_seekablemultistream.h b/core/fxcrt/cfx_seekablemultistream.h
index ac15386..966877f 100644
--- a/core/fxcrt/cfx_seekablemultistream.h
+++ b/core/fxcrt/cfx_seekablemultistream.h
@@ -24,7 +24,9 @@
   // IFX_SeekableReadStream
   FX_FILESIZE GetPosition() override;
   FX_FILESIZE GetSize() override;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
   size_t ReadBlock(void* buffer, size_t size) override;
   bool IsEOF() override;
   bool Flush() override;
diff --git a/core/fxcrt/cfx_seekablemultistream_unittest.cpp b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
index 8d459e8..2dbe57a 100644
--- a/core/fxcrt/cfx_seekablemultistream_unittest.cpp
+++ b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
@@ -20,7 +20,7 @@
 
   uint8_t output_buffer[16];
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_FALSE(fileread->ReadBlock(output_buffer, 0, 0));
+  EXPECT_FALSE(fileread->ReadBlockAtOffset(output_buffer, 0, 0));
   EXPECT_EQ(0xbd, output_buffer[0]);
 }
 
@@ -32,7 +32,7 @@
 
   uint8_t output_buffer[16];
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_FALSE(fileread->ReadBlock(output_buffer, 0, 0));
+  EXPECT_FALSE(fileread->ReadBlockAtOffset(output_buffer, 0, 0));
   EXPECT_EQ(0xbd, output_buffer[0]);
 }
 
@@ -57,29 +57,31 @@
 
   uint8_t output_buffer[16];
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, 0));
+  EXPECT_TRUE(fileread->ReadBlockAtOffset(output_buffer, 0, 0));
   EXPECT_EQ(0xbd, output_buffer[0]);
 
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_TRUE(fileread->ReadBlock(output_buffer, 1, 0));
+  EXPECT_TRUE(fileread->ReadBlockAtOffset(output_buffer, 1, 0));
   EXPECT_EQ(0xbd, output_buffer[0]);
 
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, 1));
+  EXPECT_TRUE(fileread->ReadBlockAtOffset(output_buffer, 0, 1));
   EXPECT_EQ(0, memcmp(output_buffer, "o", 1));
   EXPECT_EQ(0xbd, output_buffer[1]);
 
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_TRUE(fileread->ReadBlock(output_buffer, 0, sizeof(output_buffer)));
+  EXPECT_TRUE(
+      fileread->ReadBlockAtOffset(output_buffer, 0, sizeof(output_buffer)));
   EXPECT_EQ(0, memcmp(output_buffer, "one two three!!!", 16));
 
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_TRUE(fileread->ReadBlock(output_buffer, 2, 10));
+  EXPECT_TRUE(fileread->ReadBlockAtOffset(output_buffer, 2, 10));
   EXPECT_EQ(0, memcmp(output_buffer, "e two thre", 10));
   EXPECT_EQ(0xbd, output_buffer[11]);
 
   memset(output_buffer, 0xbd, sizeof(output_buffer));
-  EXPECT_FALSE(fileread->ReadBlock(output_buffer, 1, sizeof(output_buffer)));
+  EXPECT_FALSE(
+      fileread->ReadBlockAtOffset(output_buffer, 1, sizeof(output_buffer)));
   EXPECT_EQ(0, memcmp(output_buffer, "ne two three!!!", 15));
   EXPECT_EQ(0xbd, output_buffer[15]);
 }
diff --git a/core/fxcrt/cfx_seekablestreamproxy.cpp b/core/fxcrt/cfx_seekablestreamproxy.cpp
index 14a016c..4fad99c 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.cpp
+++ b/core/fxcrt/cfx_seekablestreamproxy.cpp
@@ -212,7 +212,7 @@
   if (iBufferSize <= 0)
     return 0;
 
-  if (!m_pStream->ReadBlock(pBuffer, m_iPosition, iBufferSize))
+  if (!m_pStream->ReadBlockAtOffset(pBuffer, m_iPosition, iBufferSize))
     return 0;
 
   pdfium::base::CheckedNumeric<FX_FILESIZE> new_pos = m_iPosition;
@@ -260,9 +260,9 @@
   return size;
 }
 
-bool CFX_SeekableStreamProxy::ReadBlock(void* pStr,
-                                        FX_FILESIZE offset,
-                                        size_t size) {
+bool CFX_SeekableStreamProxy::ReadBlockAtOffset(void* pStr,
+                                                FX_FILESIZE offset,
+                                                size_t size) {
   NOTREACHED();
   return false;
 }
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index 42123fd..70aff0a 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -25,9 +25,8 @@
   FX_FILESIZE GetSize() override;
   FX_FILESIZE GetPosition() override;
   bool IsEOF() override;
-
   size_t ReadBlock(void* pStr, size_t size) override;
-  bool ReadBlock(void* pStr, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* pStr, FX_FILESIZE offset, size_t size) override;
 
   uint16_t GetCodePage() const { return m_wCodePage; }
   void SetCodePage(uint16_t wCodePage);
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp
index 4d61b0a..35be9d5 100644
--- a/core/fxcrt/fx_stream.cpp
+++ b/core/fxcrt/fx_stream.cpp
@@ -36,7 +36,9 @@
   FX_FILESIZE GetSize() override { return m_pFile->GetSize(); }
   bool IsEOF() override { return GetPosition() >= GetSize(); }
   FX_FILESIZE GetPosition() override { return m_pFile->GetPosition(); }
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override {
     return m_pFile->ReadPos(buffer, size, offset) > 0;
   }
   size_t ReadBlock(void* buffer, size_t size) override {
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index 32ef9a8..aa77821 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -78,7 +78,9 @@
   FX_FILESIZE GetPosition() override;
   size_t ReadBlock(void* buffer, size_t size) override;
 
-  virtual bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
+  virtual bool ReadBlockAtOffset(void* buffer,
+                                 FX_FILESIZE offset,
+                                 size_t size) = 0;
   virtual FX_FILESIZE GetSize() = 0;
 };
 
@@ -96,7 +98,6 @@
   bool IsEOF() override = 0;
   FX_FILESIZE GetPosition() override = 0;
   size_t ReadBlock(void* buffer, size_t size) override = 0;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override = 0;
   FX_FILESIZE GetSize() override = 0;
 
   // IFX_SeekableWriteStream:
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index 4276d83..bc411d2 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -49,7 +49,7 @@
 
   IFX_SeekableReadStream* pFile =
       static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer);
-  return pFile && pFile->ReadBlock(buffer, offset, count) ? count : 0;
+  return pFile && pFile->ReadBlockAtOffset(buffer, offset, count) ? count : 0;
 }
 
 void FTStreamClose(FXFT_Stream stream) {}
diff --git a/fpdfsdk/cpdfsdk_customaccess.cpp b/fpdfsdk/cpdfsdk_customaccess.cpp
index 9a16a87..1002085 100644
--- a/fpdfsdk/cpdfsdk_customaccess.cpp
+++ b/fpdfsdk/cpdfsdk_customaccess.cpp
@@ -15,9 +15,9 @@
   return m_FileAccess.m_FileLen;
 }
 
-bool CPDFSDK_CustomAccess::ReadBlock(void* buffer,
-                                     FX_FILESIZE offset,
-                                     size_t size) {
+bool CPDFSDK_CustomAccess::ReadBlockAtOffset(void* buffer,
+                                             FX_FILESIZE offset,
+                                             size_t size) {
   if (offset < 0)
     return false;
 
diff --git a/fpdfsdk/cpdfsdk_customaccess.h b/fpdfsdk/cpdfsdk_customaccess.h
index cc38eb8..76940ce 100644
--- a/fpdfsdk/cpdfsdk_customaccess.h
+++ b/fpdfsdk/cpdfsdk_customaccess.h
@@ -17,7 +17,9 @@
 
   // IFX_SeekableReadStream
   FX_FILESIZE GetSize() override;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
 
  private:
   explicit CPDFSDK_CustomAccess(FPDF_FILEACCESS* pFileAccess);
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp
index b2ef675..22b46ce 100644
--- a/fpdfsdk/cpdfsdk_helpers.cpp
+++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -48,7 +48,9 @@
   FX_FILESIZE GetSize() override;
   bool IsEOF() override;
   FX_FILESIZE GetPosition() override;
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override;
   size_t ReadBlock(void* buffer, size_t size) override;
   bool WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) override;
   bool Flush() override;
@@ -87,9 +89,9 @@
   return m_nCurPos;
 }
 
-bool FPDF_FileHandlerContext::ReadBlock(void* buffer,
-                                        FX_FILESIZE offset,
-                                        size_t size) {
+bool FPDF_FileHandlerContext::ReadBlockAtOffset(void* buffer,
+                                                FX_FILESIZE offset,
+                                                size_t size) {
   if (!buffer || !size || !m_pFS->ReadBlock)
     return false;
 
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index 17d501f..2b567dd 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -73,7 +73,9 @@
   // IFX_SeekableReadStream
   FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; }
 
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override {
     return !!m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
                                        static_cast<uint8_t*>(buffer), size);
   }
diff --git a/testing/fx_string_testhelpers.h b/testing/fx_string_testhelpers.h
index 603d1de..0eec4d8 100644
--- a/testing/fx_string_testhelpers.h
+++ b/testing/fx_string_testhelpers.h
@@ -19,7 +19,9 @@
   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
   // IFX_SeekableReadStream overrides:
-  bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+  bool ReadBlockAtOffset(void* buffer,
+                         FX_FILESIZE offset,
+                         size_t size) override {
     return false;
   }
   FX_FILESIZE GetSize() override { return data_size_; }
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 22e97f0..72730ab 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -349,7 +349,7 @@
 
   IFX_SeekableReadStream* pFile =
       static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer);
-  if (!pFile->ReadBlock(buffer, offset, count))
+  if (!pFile->ReadBlockAtOffset(buffer, offset, count))
     return 0;
 
   return count;
