diff --git a/core/fpdfapi/edit/cpdf_creator.h b/core/fpdfapi/edit/cpdf_creator.h
index 5de3793..8b0efdd 100644
--- a/core/fpdfapi/edit/cpdf_creator.h
+++ b/core/fpdfapi/edit/cpdf_creator.h
@@ -32,7 +32,7 @@
   ~CPDF_Creator();
 
   void RemoveSecurity();
-  bool Create(IFX_StreamWrite* pFile, uint32_t flags = 0);
+  bool Create(IFX_WriteStream* pFile, uint32_t flags = 0);
   int32_t Continue(IFX_Pause* pPause = nullptr);
   FX_BOOL SetFileVersion(int32_t fileVersion = 17);
 
diff --git a/core/fpdfapi/edit/fpdf_edit_create.cpp b/core/fpdfapi/edit/fpdf_edit_create.cpp
index e5b1fe1..b4e1157 100644
--- a/core/fpdfapi/edit/fpdf_edit_create.cpp
+++ b/core/fpdfapi/edit/fpdf_edit_create.cpp
@@ -1482,7 +1482,7 @@
       InitOldObjNumOffsets();
       m_iStage = 20;
     } else {
-      IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
+      IFX_SeekableReadStream* pSrcFile = m_pParser->GetFileAccess();
       m_Offset = pSrcFile->GetSize();
       m_Pos = (void*)(uintptr_t)m_Offset;
       m_iStage = 15;
@@ -1490,7 +1490,7 @@
   }
   if (m_iStage == 15) {
     if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_Pos) {
-      IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
+      IFX_SeekableReadStream* pSrcFile = m_pParser->GetFileAccess();
       uint8_t buffer[4096];
       uint32_t src_size = (uint32_t)(uintptr_t)m_Pos;
       while (src_size) {
@@ -1907,7 +1907,7 @@
   m_pIDArray.reset();
 }
 
-bool CPDF_Creator::Create(IFX_StreamWrite* pFile, uint32_t flags) {
+bool CPDF_Creator::Create(IFX_WriteStream* pFile, uint32_t flags) {
   m_File.AttachFile(pFile);
   return Create(flags);
 }
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index 50768c5..b40bc3c 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -123,7 +123,7 @@
   return pDict;
 }
 
-void CPDF_Image::SetJpegImage(IFX_FileRead* pFile) {
+void CPDF_Image::SetJpegImage(IFX_SeekableReadStream* pFile) {
   uint32_t size = (uint32_t)pFile->GetSize();
   if (!size)
     return;
diff --git a/core/fpdfapi/page/cpdf_image.h b/core/fpdfapi/page/cpdf_image.h
index 72de0d8..1e6f70f 100644
--- a/core/fpdfapi/page/cpdf_image.h
+++ b/core/fpdfapi/page/cpdf_image.h
@@ -16,14 +16,14 @@
 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
 
-class CFX_DIBitmap;
 class CFX_DIBSource;
+class CFX_DIBitmap;
 class CPDF_Dictionay;
 class CPDF_Document;
 class CPDF_Page;
-class IFX_FileRead;
-class IFX_FileWrite;
 class IFX_Pause;
+class IFX_SeekableReadStream;
+class IFX_SeekableWriteStream;
 
 class CPDF_Image {
  public:
@@ -56,7 +56,7 @@
                                FX_BOOL bLoadMask = FALSE) const;
 
   void SetImage(const CFX_DIBitmap* pDIBitmap, int32_t iCompress);
-  void SetJpegImage(IFX_FileRead* pFile);
+  void SetJpegImage(IFX_SeekableReadStream* pFile);
 
   void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
 
diff --git a/core/fpdfapi/parser/cfdf_document.cpp b/core/fpdfapi/parser/cfdf_document.cpp
index a1518df..3bafdda 100644
--- a/core/fpdfapi/parser/cfdf_document.cpp
+++ b/core/fpdfapi/parser/cfdf_document.cpp
@@ -33,7 +33,8 @@
   return pDoc;
 }
 
-CFDF_Document* CFDF_Document::ParseFile(IFX_FileRead* pFile, FX_BOOL bOwnFile) {
+CFDF_Document* CFDF_Document::ParseFile(IFX_SeekableReadStream* pFile,
+                                        FX_BOOL bOwnFile) {
   if (!pFile)
     return nullptr;
 
@@ -47,7 +48,8 @@
                                   TRUE);
 }
 
-void CFDF_Document::ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile) {
+void CFDF_Document::ParseStream(IFX_SeekableReadStream* pFile,
+                                FX_BOOL bOwnFile) {
   m_pFile = pFile;
   m_bOwnFile = bOwnFile;
   CPDF_SyntaxParser parser;
diff --git a/core/fpdfapi/parser/cfdf_document.h b/core/fpdfapi/parser/cfdf_document.h
index 21ac62d..32d0aab 100644
--- a/core/fpdfapi/parser/cfdf_document.h
+++ b/core/fpdfapi/parser/cfdf_document.h
@@ -18,7 +18,7 @@
 class CFDF_Document : public CPDF_IndirectObjectHolder {
  public:
   static CFDF_Document* CreateNewDoc();
-  static CFDF_Document* ParseFile(IFX_FileRead* pFile,
+  static CFDF_Document* ParseFile(IFX_SeekableReadStream* pFile,
                                   FX_BOOL bOwnFile = FALSE);
   static CFDF_Document* ParseMemory(const uint8_t* pData, uint32_t size);
   ~CFDF_Document() override;
@@ -31,10 +31,10 @@
 
  protected:
   CFDF_Document();
-  void ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile);
+  void ParseStream(IFX_SeekableReadStream* pFile, FX_BOOL bOwnFile);
 
   CPDF_Dictionary* m_pRootDict;
-  IFX_FileRead* m_pFile;
+  IFX_SeekableReadStream* m_pFile;
   FX_BOOL m_bOwnFile;
   CFX_WeakPtr<CFX_ByteStringPool> m_pByteStringPool;
 };
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index e23aa8e..c6a434b 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -32,7 +32,7 @@
 int CPDF_DataAvail::s_CurrentDataAvailRecursionDepth = 0;
 
 CPDF_DataAvail::CPDF_DataAvail(FileAvail* pFileAvail,
-                               IFX_FileRead* pFileRead,
+                               IFX_SeekableReadStream* pFileRead,
                                FX_BOOL bSupportHintTable)
     : m_pFileAvail(pFileAvail), m_pFileRead(pFileRead) {
   m_Pos = 0;
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index fe5c481..138fe1e 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -93,7 +93,7 @@
   };
 
   CPDF_DataAvail(FileAvail* pFileAvail,
-                 IFX_FileRead* pFileRead,
+                 IFX_SeekableReadStream* pFileRead,
                  FX_BOOL bSupportHintTable);
   ~CPDF_DataAvail();
 
@@ -104,7 +104,7 @@
   DocLinearizationStatus IsLinearizedPDF();
   FX_BOOL IsLinearized();
   void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, uint32_t* pSize);
-  IFX_FileRead* GetFileRead() const { return m_pFileRead; }
+  IFX_SeekableReadStream* GetFileRead() const { return m_pFileRead; }
   int GetPageCount() const;
   CPDF_Dictionary* GetPage(int index);
 
@@ -193,7 +193,7 @@
   FX_BOOL IsDataAvail(FX_FILESIZE offset, uint32_t size, DownloadHints* pHints);
 
   FileAvail* const m_pFileAvail;
-  IFX_FileRead* const m_pFileRead;
+  IFX_SeekableReadStream* const m_pFileRead;
   CPDF_Parser m_parser;
   CPDF_SyntaxParser m_syntaxParser;
   CPDF_Object* m_pRoot;
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index c29ae18..c274888 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -119,7 +119,7 @@
   return m_pSyntax->m_pCryptoHandler.get();
 }
 
-IFX_FileRead* CPDF_Parser::GetFileAccess() const {
+IFX_SeekableReadStream* CPDF_Parser::GetFileAccess() const {
   return m_pSyntax->m_pFileAccess;
 }
 
@@ -139,7 +139,7 @@
     m_ObjectInfo[objnum - 1].pos = 0;
 }
 
-CPDF_Parser::Error CPDF_Parser::StartParse(IFX_FileRead* pFileAccess,
+CPDF_Parser::Error CPDF_Parser::StartParse(IFX_SeekableReadStream* pFileAccess,
                                            CPDF_Document* pDocument) {
   ASSERT(!m_bHasParsed);
   m_bHasParsed = true;
@@ -1438,7 +1438,7 @@
   return dwPermission;
 }
 
-FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_FileRead* pFileAccess,
+FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_SeekableReadStream* pFileAccess,
                                       uint32_t offset) {
   m_pSyntax->InitParser(pFileAccess, offset);
   m_pSyntax->RestorePos(m_pSyntax->m_HeaderOffset + 9);
@@ -1491,8 +1491,9 @@
   return FALSE;
 }
 
-CPDF_Parser::Error CPDF_Parser::StartLinearizedParse(IFX_FileRead* pFileAccess,
-                                                     CPDF_Document* pDocument) {
+CPDF_Parser::Error CPDF_Parser::StartLinearizedParse(
+    IFX_SeekableReadStream* pFileAccess,
+    CPDF_Document* pDocument) {
   ASSERT(!m_bHasParsed);
 
   m_bXRefStream = FALSE;
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index 83b591f..8878576 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -23,7 +23,7 @@
 class CPDF_SecurityHandler;
 class CPDF_StreamAcc;
 class CPDF_SyntaxParser;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 
 class CPDF_Parser {
  public:
@@ -42,8 +42,9 @@
   CPDF_Parser();
   ~CPDF_Parser();
 
-  Error StartParse(IFX_FileRead* pFile, CPDF_Document* pDocument);
-  Error StartLinearizedParse(IFX_FileRead* pFile, CPDF_Document* pDocument);
+  Error StartParse(IFX_SeekableReadStream* pFile, CPDF_Document* pDocument);
+  Error StartLinearizedParse(IFX_SeekableReadStream* pFile,
+                             CPDF_Document* pDocument);
 
   void SetPassword(const FX_CHAR* password) { m_Password = password; }
   CFX_ByteString GetPassword() { return m_Password; }
@@ -68,7 +69,7 @@
   bool IsVersionUpdated() const { return m_bVersionUpdated; }
   bool IsObjectFreeOrNull(uint32_t objnum) const;
   CPDF_CryptoHandler* GetCryptoHandler();
-  IFX_FileRead* GetFileAccess() const;
+  IFX_SeekableReadStream* GetFileAccess() const;
 
   FX_FILESIZE GetObjectOffset(uint32_t objnum) const;
   FX_FILESIZE GetObjectSize(uint32_t objnum) const;
@@ -136,7 +137,8 @@
   FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
   Error LoadLinearizedMainXRefTable();
   CPDF_StreamAcc* GetObjectStream(uint32_t number);
-  FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, uint32_t offset);
+  FX_BOOL IsLinearizedFile(IFX_SeekableReadStream* pFileAccess,
+                           uint32_t offset);
   void SetEncryptDictionary(CPDF_Dictionary* pDict);
   void ShrinkObjectMap(uint32_t size);
   // A simple check whether the cross reference table matches with
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index c97b88e6..6c6fb21 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -13,7 +13,7 @@
 #include "testing/utils/path_service.h"
 
 // Provide a way to read test data from a buffer instead of a file.
-class CFX_TestBufferRead : public IFX_FileRead {
+class CFX_TestBufferRead : public IFX_SeekableReadStream {
  public:
   CFX_TestBufferRead(const unsigned char* buffer_in, size_t buf_size)
       : buffer_(buffer_in), total_size_(buf_size) {}
@@ -21,7 +21,7 @@
   // IFX_Stream
   void Release() override { delete this; }
 
-  // IFX_FileRead
+  // IFX_SeekableReadStream
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
     if (offset < 0 || offset + size > total_size_) {
       return FALSE;
@@ -45,7 +45,7 @@
 
   // Setup reading from a file and initial states.
   bool InitTestFromFile(const FX_CHAR* path) {
-    IFX_FileRead* pFileAccess = FX_CreateFileRead(path);
+    IFX_SeekableReadStream* pFileAccess = FX_CreateFileRead(path);
     if (!pFileAccess)
       return false;
 
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 935c80c..93899db 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -57,7 +57,7 @@
     m_pDict->SetIntegerFor("Length", m_dwSize);
 }
 
-void CPDF_Stream::InitStreamFromFile(IFX_FileRead* pFile,
+void CPDF_Stream::InitStreamFromFile(IFX_SeekableReadStream* pFile,
                                      CPDF_Dictionary* pDict) {
   m_pDict.reset(pDict);
   m_bMemoryBased = false;
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 756eccf..588714e 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -37,7 +37,8 @@
   void SetData(const uint8_t* pData, uint32_t size);
 
   void InitStream(const uint8_t* pData, uint32_t size, CPDF_Dictionary* pDict);
-  void InitStreamFromFile(IFX_FileRead* pFile, CPDF_Dictionary* pDict);
+  void InitStreamFromFile(IFX_SeekableReadStream* pFile,
+                          CPDF_Dictionary* pDict);
 
   FX_BOOL ReadRawData(FX_FILESIZE start_pos,
                       uint8_t* pBuf,
@@ -55,7 +56,7 @@
   bool m_bMemoryBased = true;
   uint32_t m_dwSize = 0;
   std::unique_ptr<uint8_t, FxFreeDeleter> m_pDataBuf;
-  IFX_FileRead* m_pFile = nullptr;
+  IFX_SeekableReadStream* m_pFile = nullptr;
 };
 
 using UniqueStream = std::unique_ptr<CPDF_Stream, ReleaseDeleter<CPDF_Object>>;
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index e7f25d1..3b1df94 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -782,7 +782,7 @@
   return pStream;
 }
 
-void CPDF_SyntaxParser::InitParser(IFX_FileRead* pFileAccess,
+void CPDF_SyntaxParser::InitParser(IFX_SeekableReadStream* pFileAccess,
                                    uint32_t HeaderOffset) {
   FX_Free(m_pFileBuf);
 
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.h b/core/fpdfapi/parser/cpdf_syntax_parser.h
index 444a94b..5694d23 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.h
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.h
@@ -18,7 +18,7 @@
 class CPDF_IndirectObjectHolder;
 class CPDF_Object;
 class CPDF_Stream;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 
 class CPDF_SyntaxParser {
  public:
@@ -26,7 +26,7 @@
   explicit CPDF_SyntaxParser(const CFX_WeakPtr<CFX_ByteStringPool>& pPool);
   ~CPDF_SyntaxParser();
 
-  void InitParser(IFX_FileRead* pFileAccess, uint32_t HeaderOffset);
+  void InitParser(IFX_SeekableReadStream* pFileAccess, uint32_t HeaderOffset);
 
   FX_FILESIZE SavePos() const { return m_Pos; }
   void RestorePos(FX_FILESIZE pos) { m_Pos = pos; }
@@ -86,7 +86,7 @@
 
   FX_FILESIZE m_Pos;
   int m_MetadataObjnum;
-  IFX_FileRead* m_pFileAccess;
+  IFX_SeekableReadStream* m_pFileAccess;
   FX_FILESIZE m_HeaderOffset;
   FX_FILESIZE m_FileLen;
   uint8_t* m_pFileBuf;
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp
index 7b9ead4..8fdef1e 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp
@@ -68,7 +68,7 @@
     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W'};
 
-int32_t GetHeaderOffset(IFX_FileRead* pFile) {
+int32_t GetHeaderOffset(IFX_SeekableReadStream* pFile) {
   const size_t kBufSize = 4;
   uint8_t buf[kBufSize];
   for (int32_t offset = 0; offset <= 1024; ++offset) {
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.h b/core/fpdfapi/parser/fpdf_parser_utility.h
index 4c0187e..589171f 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.h
+++ b/core/fpdfapi/parser/fpdf_parser_utility.h
@@ -10,7 +10,7 @@
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 class CPDF_Dictionary;
 
 // Use the accessors below instead of directly accessing PDF_CharType.
@@ -33,7 +33,7 @@
   return c == '\r' || c == '\n';
 }
 
-int32_t GetHeaderOffset(IFX_FileRead* pFile);
+int32_t GetHeaderOffset(IFX_SeekableReadStream* pFile);
 int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteString& key);
 
 #endif  // CORE_FPDFAPI_PARSER_FPDF_PARSER_UTILITY_H_
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.h b/core/fxcodec/codec/ccodec_progressivedecoder.h
index 73fec64..b760c2e 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.h
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.h
@@ -21,7 +21,7 @@
 class CCodec_PngContext;
 class CCodec_TiffContext;
 class CFX_DIBAttribute;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 class IFX_Pause;
 struct FXBMP_Context;
 struct FXGIF_Context;
@@ -45,7 +45,7 @@
   explicit CCodec_ProgressiveDecoder(CCodec_ModuleMgr* pCodecMgr);
   ~CCodec_ProgressiveDecoder();
 
-  FXCODEC_STATUS LoadImageInfo(IFX_FileRead* pFile,
+  FXCODEC_STATUS LoadImageInfo(IFX_SeekableReadStream* pFile,
                                FXCODEC_IMAGE_TYPE imageType,
                                CFX_DIBAttribute* pAttribute,
                                bool bSkipImageTypeCheck);
@@ -125,7 +125,7 @@
     std::vector<uint8_t> m_pWeightTables;
   };
 
-  IFX_FileRead* m_pFile;
+  IFX_SeekableReadStream* m_pFile;
   CCodec_ModuleMgr* m_pCodecMgr;
   FXJPEG_Context* m_pJpegContext;
   FXPNG_Context* m_pPngContext;
diff --git a/core/fxcodec/codec/ccodec_tiffmodule.h b/core/fxcodec/codec/ccodec_tiffmodule.h
index c6525f3..37d4082 100644
--- a/core/fxcodec/codec/ccodec_tiffmodule.h
+++ b/core/fxcodec/codec/ccodec_tiffmodule.h
@@ -12,13 +12,13 @@
 class CCodec_TiffContext;
 class CFX_DIBAttribute;
 class CFX_DIBitmap;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 
 class CCodec_TiffModule {
  public:
   ~CCodec_TiffModule() {}
 
-  CCodec_TiffContext* CreateDecoder(IFX_FileRead* file_ptr);
+  CCodec_TiffContext* CreateDecoder(IFX_SeekableReadStream* file_ptr);
 
   bool LoadFrameInfo(CCodec_TiffContext* ctx,
                      int32_t frame,
diff --git a/core/fxcodec/codec/fx_codec_progress.cpp b/core/fxcodec/codec/fx_codec_progress.cpp
index 605e1b5..4de62ba 100644
--- a/core/fxcodec/codec/fx_codec_progress.cpp
+++ b/core/fxcodec/codec/fx_codec_progress.cpp
@@ -1296,7 +1296,7 @@
 }
 
 FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo(
-    IFX_FileRead* pFile,
+    IFX_SeekableReadStream* pFile,
     FXCODEC_IMAGE_TYPE imageType,
     CFX_DIBAttribute* pAttribute,
     bool bSkipImageTypeCheck) {
diff --git a/core/fxcodec/codec/fx_codec_tiff.cpp b/core/fxcodec/codec/fx_codec_tiff.cpp
index f4fa01a..c76a604 100644
--- a/core/fxcodec/codec/fx_codec_tiff.cpp
+++ b/core/fxcodec/codec/fx_codec_tiff.cpp
@@ -17,7 +17,7 @@
   CCodec_TiffContext();
   ~CCodec_TiffContext();
 
-  bool InitDecoder(IFX_FileRead* file_ptr);
+  bool InitDecoder(IFX_SeekableReadStream* file_ptr);
   bool LoadFrameInfo(int32_t frame,
                      int32_t* width,
                      int32_t* height,
@@ -26,7 +26,7 @@
                      CFX_DIBAttribute* pAttribute);
   bool Decode(CFX_DIBitmap* pDIBitmap);
 
-  IFX_FileRead* io_in() const { return m_io_in; }
+  IFX_SeekableReadStream* io_in() const { return m_io_in; }
   uint32_t offset() const { return m_offset; }
   void set_offset(uint32_t offset) { m_offset = offset; }
   void increment_offset(uint32_t offset) { m_offset += offset; }
@@ -50,7 +50,7 @@
                       uint16_t bps,
                       uint16_t spp);
 
-  IFX_FileRead* m_io_in;
+  IFX_SeekableReadStream* m_io_in;
   uint32_t m_offset;
   TIFF* m_tif_ctx;
 };
@@ -193,7 +193,7 @@
     TIFFClose(m_tif_ctx);
 }
 
-bool CCodec_TiffContext::InitDecoder(IFX_FileRead* file_ptr) {
+bool CCodec_TiffContext::InitDecoder(IFX_SeekableReadStream* file_ptr) {
   m_io_in = file_ptr;
   m_tif_ctx = tiff_open(this, "r");
   return !!m_tif_ctx;
@@ -435,7 +435,8 @@
   return false;
 }
 
-CCodec_TiffContext* CCodec_TiffModule::CreateDecoder(IFX_FileRead* file_ptr) {
+CCodec_TiffContext* CCodec_TiffModule::CreateDecoder(
+    IFX_SeekableReadStream* file_ptr) {
   CCodec_TiffContext* pDecoder = new CCodec_TiffContext;
   if (!pDecoder->InitDecoder(file_ptr)) {
     delete pDecoder;
diff --git a/core/fxcrt/extension.h b/core/fxcrt/extension.h
index 6a437db..45f6d4f 100644
--- a/core/fxcrt/extension.h
+++ b/core/fxcrt/extension.h
@@ -44,7 +44,7 @@
   void Release() override;
   IFX_FileAccess* Retain() override;
   void GetPath(CFX_WideString& wsPath) override;
-  IFX_FileStream* CreateFileStream(uint32_t dwModes) override;
+  IFX_SeekableStream* CreateFileStream(uint32_t dwModes) override;
 
   FX_BOOL Init(const CFX_WideStringC& wsPath);
 
@@ -54,13 +54,13 @@
 };
 #endif  // PDF_ENABLE_XFA
 
-class CFX_CRTFileStream final : public IFX_FileStream {
+class CFX_CRTFileStream final : public IFX_SeekableStream {
  public:
   explicit CFX_CRTFileStream(std::unique_ptr<IFXCRT_FileAccess> pFA);
   ~CFX_CRTFileStream() override;
 
-  // IFX_FileStream:
-  IFX_FileStream* Retain() override;
+  // IFX_SeekableStream:
+  IFX_SeekableStream* Retain() override;
   void Release() override;
   FX_FILESIZE GetSize() override;
   FX_BOOL IsEOF() override;
@@ -87,7 +87,7 @@
   ~CFX_MemoryStream() override;
 
   // IFX_MemoryStream
-  IFX_FileStream* Retain() override;
+  IFX_SeekableStream* Retain() override;
   void Release() override;
   FX_FILESIZE GetSize() override;
   FX_BOOL IsEOF() override;
diff --git a/core/fxcrt/fx_basic.h b/core/fxcrt/fx_basic.h
index 4cf69f8..6643d33 100644
--- a/core/fxcrt/fx_basic.h
+++ b/core/fxcrt/fx_basic.h
@@ -121,14 +121,14 @@
   int32_t AppendString(const CFX_ByteStringC& lpsz);
 
   // |pFile| must outlive the CFX_FileBufferArchive.
-  void AttachFile(IFX_StreamWrite* pFile);
+  void AttachFile(IFX_WriteStream* pFile);
 
  private:
   static const size_t kBufSize = 32768;
 
   size_t m_Length;
   std::unique_ptr<uint8_t, FxFreeDeleter> m_pBuffer;
-  IFX_StreamWrite* m_pFile;
+  IFX_WriteStream* m_pFile;
 };
 
 class CFX_CharMap {
diff --git a/core/fxcrt/fx_basic_buffer.cpp b/core/fxcrt/fx_basic_buffer.cpp
index d441f6c..e954224 100644
--- a/core/fxcrt/fx_basic_buffer.cpp
+++ b/core/fxcrt/fx_basic_buffer.cpp
@@ -285,7 +285,7 @@
   return AppendBlock(lpsz.raw_str(), lpsz.GetLength());
 }
 
-void CFX_FileBufferArchive::AttachFile(IFX_StreamWrite* pFile) {
+void CFX_FileBufferArchive::AttachFile(IFX_WriteStream* pFile) {
   ASSERT(pFile);
   m_pFile = pFile;
 }
diff --git a/core/fxcrt/fx_ext.h b/core/fxcrt/fx_ext.h
index 959a26b..cca80b1 100644
--- a/core/fxcrt/fx_ext.h
+++ b/core/fxcrt/fx_ext.h
@@ -18,7 +18,7 @@
 // Come up or wait for something better. This appears in this file rather
 // than fx_stream.h due to include ordering restrictions.
 using ScopedFileStream =
-    std::unique_ptr<IFX_FileStream, ReleaseDeleter<IFX_FileStream>>;
+    std::unique_ptr<IFX_SeekableStream, ReleaseDeleter<IFX_SeekableStream>>;
 
 FX_FLOAT FXSYS_tan(FX_FLOAT a);
 FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x);
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index ca6b6d4..5ac22bd 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -36,7 +36,7 @@
   wsPath = m_path;
 }
 
-IFX_FileStream* CFX_CRTFileAccess::CreateFileStream(uint32_t dwModes) {
+IFX_SeekableStream* CFX_CRTFileAccess::CreateFileStream(uint32_t dwModes) {
   return FX_CreateFileStream(m_path.c_str(), dwModes);
 }
 
@@ -85,7 +85,7 @@
   m_Blocks.RemoveAll();
 }
 
-IFX_FileStream* CFX_MemoryStream::Retain() {
+IFX_SeekableStream* CFX_MemoryStream::Retain() {
   m_dwCount++;
   return this;
 }
@@ -281,7 +281,7 @@
   return TRUE;
 }
 
-IFX_FileStream* CFX_CRTFileStream::Retain() {
+IFX_SeekableStream* CFX_CRTFileStream::Retain() {
   m_dwCount++;
   return this;
 }
@@ -336,24 +336,25 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, uint32_t dwModes) {
+IFX_SeekableStream* FX_CreateFileStream(const FX_CHAR* filename,
+                                        uint32_t dwModes) {
   std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create());
   if (!pFA->Open(filename, dwModes))
     return nullptr;
   return new CFX_CRTFileStream(std::move(pFA));
 }
 
-IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename,
-                                    uint32_t dwModes) {
+IFX_SeekableStream* FX_CreateFileStream(const FX_WCHAR* filename,
+                                        uint32_t dwModes) {
   std::unique_ptr<IFXCRT_FileAccess> pFA(IFXCRT_FileAccess::Create());
   if (!pFA->Open(filename, dwModes))
     return nullptr;
   return new CFX_CRTFileStream(std::move(pFA));
 }
-IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename) {
+IFX_SeekableReadStream* FX_CreateFileRead(const FX_CHAR* filename) {
   return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
 }
-IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename) {
+IFX_SeekableReadStream* FX_CreateFileRead(const FX_WCHAR* filename) {
   return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
 }
 IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer,
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index 047fedf..2509ec2 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -55,16 +55,26 @@
 #define FX_FILEMODE_ReadOnly 1
 #define FX_FILEMODE_Truncate 2
 
-class IFX_StreamWrite {
+class IFX_WriteStream {
  public:
-  virtual ~IFX_StreamWrite() {}
+  virtual ~IFX_WriteStream() {}
   virtual void Release() = 0;
   virtual FX_BOOL WriteBlock(const void* pData, size_t size) = 0;
 };
 
-class IFX_FileWrite : public IFX_StreamWrite {
+class IFX_ReadStream {
  public:
-  // IFX_StreamWrite:
+  virtual ~IFX_ReadStream() {}
+
+  virtual void Release() = 0;
+  virtual FX_BOOL IsEOF() = 0;
+  virtual FX_FILESIZE GetPosition() = 0;
+  virtual size_t ReadBlock(void* buffer, size_t size) = 0;
+};
+
+class IFX_SeekableWriteStream : public IFX_WriteStream {
+ public:
+  // IFX_WriteStream:
   FX_BOOL WriteBlock(const void* pData, size_t size) override;
   virtual FX_FILESIZE GetSize() = 0;
   virtual FX_BOOL Flush() = 0;
@@ -73,19 +83,9 @@
                              size_t size) = 0;
 };
 
-class IFX_StreamRead {
+class IFX_SeekableReadStream : public IFX_ReadStream {
  public:
-  virtual ~IFX_StreamRead() {}
-
-  virtual void Release() = 0;
-  virtual FX_BOOL IsEOF() = 0;
-  virtual FX_FILESIZE GetPosition() = 0;
-  virtual size_t ReadBlock(void* buffer, size_t size) = 0;
-};
-
-class IFX_FileRead : public IFX_StreamRead {
- public:
-  // IFX_StreamRead:
+  // IFX_ReadStream:
   void Release() override = 0;
   FX_BOOL IsEOF() override;
   FX_FILESIZE GetPosition() override;
@@ -95,14 +95,15 @@
   virtual FX_FILESIZE GetSize() = 0;
 };
 
-IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename);
-IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename);
+IFX_SeekableReadStream* FX_CreateFileRead(const FX_CHAR* filename);
+IFX_SeekableReadStream* FX_CreateFileRead(const FX_WCHAR* filename);
 
-class IFX_FileStream : public IFX_FileRead, public IFX_FileWrite {
+class IFX_SeekableStream : public IFX_SeekableReadStream,
+                           public IFX_SeekableWriteStream {
  public:
-  virtual IFX_FileStream* Retain() = 0;
+  virtual IFX_SeekableStream* Retain() = 0;
 
-  // IFX_FileRead:
+  // IFX_SeekableReadStream:
   void Release() override = 0;
   FX_BOOL IsEOF() override = 0;
   FX_FILESIZE GetPosition() override = 0;
@@ -110,7 +111,7 @@
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override = 0;
   FX_FILESIZE GetSize() override = 0;
 
-  // IFX_FileWrite:
+  // IFX_SeekableWriteStream:
   FX_BOOL WriteBlock(const void* buffer,
                      FX_FILESIZE offset,
                      size_t size) override = 0;
@@ -118,8 +119,10 @@
   FX_BOOL Flush() override = 0;
 };
 
-IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, uint32_t dwModes);
-IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, uint32_t dwModes);
+IFX_SeekableStream* FX_CreateFileStream(const FX_CHAR* filename,
+                                        uint32_t dwModes);
+IFX_SeekableStream* FX_CreateFileStream(const FX_WCHAR* filename,
+                                        uint32_t dwModes);
 
 #ifdef PDF_ENABLE_XFA
 class IFX_FileAccess {
@@ -128,12 +131,12 @@
   virtual void Release() = 0;
   virtual IFX_FileAccess* Retain() = 0;
   virtual void GetPath(CFX_WideString& wsPath) = 0;
-  virtual IFX_FileStream* CreateFileStream(uint32_t dwModes) = 0;
+  virtual IFX_SeekableStream* CreateFileStream(uint32_t dwModes) = 0;
 };
 IFX_FileAccess* FX_CreateDefaultFileAccess(const CFX_WideStringC& wsPath);
 #endif  // PDF_ENABLE_XFA
 
-class IFX_MemoryStream : public IFX_FileStream {
+class IFX_MemoryStream : public IFX_SeekableStream {
  public:
   virtual FX_BOOL IsConsecutive() const = 0;
   virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;
@@ -149,9 +152,9 @@
                                         FX_BOOL bTakeOver = FALSE);
 IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive = FALSE);
 
-class IFX_BufferRead : public IFX_StreamRead {
+class IFX_BufferRead : public IFX_ReadStream {
  public:
-  // IFX_StreamRead:
+  // IFX_ReadStream:
   void Release() override = 0;
   FX_BOOL IsEOF() override = 0;
   FX_FILESIZE GetPosition() override = 0;
diff --git a/core/fxcrt/fx_xml.h b/core/fxcrt/fx_xml.h
index 78f1625..4ab28f6 100644
--- a/core/fxcrt/fx_xml.h
+++ b/core/fxcrt/fx_xml.h
@@ -58,7 +58,7 @@
                              size_t size,
                              FX_BOOL bSaveSpaceChars = FALSE,
                              FX_FILESIZE* pParsedSize = nullptr);
-  static CXML_Element* Parse(IFX_FileRead* pFile,
+  static CXML_Element* Parse(IFX_SeekableReadStream* pFile,
                              FX_BOOL bSaveSpaceChars = FALSE,
                              FX_FILESIZE* pParsedSize = nullptr);
   static CXML_Element* Parse(IFX_BufferRead* pBuffer,
diff --git a/core/fxcrt/fx_xml_parser.cpp b/core/fxcrt/fx_xml_parser.cpp
index 563e1c9..e6c3543 100644
--- a/core/fxcrt/fx_xml_parser.cpp
+++ b/core/fxcrt/fx_xml_parser.cpp
@@ -57,7 +57,7 @@
   return 0;
 }
 
-CXML_DataStmAcc::CXML_DataStmAcc(IFX_FileRead* pFileRead)
+CXML_DataStmAcc::CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead)
     : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) {
   ASSERT(m_pFileRead);
 }
@@ -132,7 +132,7 @@
   m_pDataAcc = new CXML_DataBufAcc(pBuffer, size);
   return Init(TRUE);
 }
-FX_BOOL CXML_Parser::Init(IFX_FileRead* pFileRead) {
+FX_BOOL CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) {
   m_pDataAcc = new CXML_DataStmAcc(pFileRead);
   return Init(TRUE);
 }
@@ -651,7 +651,7 @@
   }
   return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
 }
-CXML_Element* CXML_Element::Parse(IFX_FileRead* pFile,
+CXML_Element* CXML_Element::Parse(IFX_SeekableReadStream* pFile,
                                   FX_BOOL bSaveSpaceChars,
                                   FX_FILESIZE* pParsedSize) {
   CXML_Parser parser;
diff --git a/core/fxcrt/fxcrt_stream.cpp b/core/fxcrt/fxcrt_stream.cpp
index a8c96bf..638a183 100644
--- a/core/fxcrt/fxcrt_stream.cpp
+++ b/core/fxcrt/fxcrt_stream.cpp
@@ -6,22 +6,22 @@
 
 #include "core/fxcrt/fx_stream.h"
 
-FX_BOOL IFX_FileWrite::WriteBlock(const void* pData, size_t size) {
+FX_BOOL IFX_SeekableWriteStream::WriteBlock(const void* pData, size_t size) {
   return WriteBlock(pData, GetSize(), size);
 }
 
-FX_BOOL IFX_FileRead::IsEOF() {
+FX_BOOL IFX_SeekableReadStream::IsEOF() {
   return FALSE;
 }
 
-FX_FILESIZE IFX_FileRead::GetPosition() {
+FX_FILESIZE IFX_SeekableReadStream::GetPosition() {
   return 0;
 }
 
-size_t IFX_FileRead::ReadBlock(void* buffer, size_t size) {
+size_t IFX_SeekableReadStream::ReadBlock(void* buffer, size_t size) {
   return 0;
 }
 
-FX_BOOL IFX_FileStream::WriteBlock(const void* buffer, size_t size) {
+FX_BOOL IFX_SeekableStream::WriteBlock(const void* buffer, size_t size) {
   return WriteBlock(buffer, GetSize(), size);
 }
diff --git a/core/fxcrt/xml_int.h b/core/fxcrt/xml_int.h
index 4799706..aa157c2 100644
--- a/core/fxcrt/xml_int.h
+++ b/core/fxcrt/xml_int.h
@@ -37,7 +37,7 @@
 
 class CXML_DataStmAcc : public IFX_BufferRead {
  public:
-  explicit CXML_DataStmAcc(IFX_FileRead* pFileRead);
+  explicit CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead);
   ~CXML_DataStmAcc() override;
 
   // IFX_BufferRead
@@ -51,7 +51,7 @@
   FX_FILESIZE GetBlockOffset() override;
 
  protected:
-  IFX_FileRead* m_pFileRead;
+  IFX_SeekableReadStream* m_pFileRead;
   uint8_t* m_pBuffer;
   FX_FILESIZE m_nStart;
   size_t m_dwSize;
@@ -63,7 +63,7 @@
   ~CXML_Parser();
 
   FX_BOOL Init(uint8_t* pBuffer, size_t size);
-  FX_BOOL Init(IFX_FileRead* pFileRead);
+  FX_BOOL Init(IFX_SeekableReadStream* pFileRead);
   FX_BOOL Init(IFX_BufferRead* pBuffer);
   FX_BOOL Init(FX_BOOL bOwndedStream);
   FX_BOOL ReadNextBlock();
diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp
index 290551b..2deb327 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -26,7 +26,8 @@
                                          unsigned long offset,
                                          unsigned char* buffer,
                                          unsigned long count) {
-  IFX_FileRead* pFileRead = (IFX_FileRead*)stream->descriptor.pointer;
+  IFX_SeekableReadStream* pFileRead =
+      (IFX_SeekableReadStream*)stream->descriptor.pointer;
   if (!pFileRead)
     return 0;
   if (count > 0) {
@@ -355,7 +356,7 @@
   return nullptr;
 }
 
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_FileRead* pFileRead,
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_SeekableReadStream* pFileRead,
                                         int32_t iFaceIndex) {
   if (!pFileRead)
     return nullptr;
diff --git a/core/fxge/android/fpf_skiafontmgr.h b/core/fxge/android/fpf_skiafontmgr.h
index bd58620..74e7ade 100644
--- a/core/fxge/android/fpf_skiafontmgr.h
+++ b/core/fxge/android/fpf_skiafontmgr.h
@@ -75,7 +75,7 @@
 
   // CFPF_SkiaFontDescriptor
   int32_t GetType() const override { return FPF_SKIAFONTTYPE_File; }
-  IFX_FileRead* m_pFile;
+  IFX_SeekableReadStream* m_pFile;
 };
 
 class CFPF_SkiaBufferFont : public CFPF_SkiaFontDescriptor {
@@ -101,7 +101,8 @@
                             uint32_t dwMatch = 0);
 
   bool InitFTLibrary();
-  FXFT_Face GetFontFace(IFX_FileRead* pFileRead, int32_t iFaceIndex = 0);
+  FXFT_Face GetFontFace(IFX_SeekableReadStream* pFileRead,
+                        int32_t iFaceIndex = 0);
   FXFT_Face GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
   FXFT_Face GetFontFace(const uint8_t* pBuffer,
                         size_t szBuffer,
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index 8dda12a..a562795 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -110,7 +110,7 @@
   CFX_SubstFont* GetSubstFont() const { return m_pSubstFont.get(); }
 
 #ifdef PDF_ENABLE_XFA
-  FX_BOOL LoadFile(IFX_FileRead* pFile,
+  FX_BOOL LoadFile(IFX_SeekableReadStream* pFile,
                    int nFaceIndex = 0,
                    int* pFaceCount = nullptr);
 
diff --git a/core/fxge/ge/cfx_font.cpp b/core/fxge/ge/cfx_font.cpp
index f584624..d1c31d0 100644
--- a/core/fxge/ge/cfx_font.cpp
+++ b/core/fxge/ge/cfx_font.cpp
@@ -39,7 +39,8 @@
   if (count == 0)
     return 0;
 
-  IFX_FileRead* pFile = static_cast<IFX_FileRead*>(stream->descriptor.pointer);
+  IFX_SeekableReadStream* pFile =
+      static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer);
   return pFile->ReadBlock(buffer, offset, count) ? count : 0;
 }
 
@@ -47,7 +48,7 @@
 
 FX_BOOL LoadFileImp(FXFT_Library library,
                     FXFT_Face* Face,
-                    IFX_FileRead* pFile,
+                    IFX_SeekableReadStream* pFile,
                     int32_t faceIndex,
                     std::unique_ptr<FXFT_StreamRec>* stream) {
   std::unique_ptr<FXFT_StreamRec> stream1(new FXFT_StreamRec());
@@ -331,7 +332,7 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile,
+FX_BOOL CFX_Font::LoadFile(IFX_SeekableReadStream* pFile,
                            int nFaceIndex,
                            int* pFaceCount) {
   m_bEmbedded = FALSE;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 71b83b2..d93e309 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -470,7 +470,7 @@
   return nullptr;
 }
 
-IFX_FileRead* CPDFSDK_FormFillEnvironment::DownloadFromURL(
+IFX_SeekableReadStream* CPDFSDK_FormFillEnvironment::DownloadFromURL(
     const FX_WCHAR* url) {
   if (!m_pInfo || !m_pInfo->FFI_DownloadFromURL)
     return nullptr;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index f59999f..4cdbda3 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -147,7 +147,7 @@
   FPDF_FILEHANDLER* OpenFile(int fileType,
                              FPDF_WIDESTRING wsURL,
                              const char* mode);
-  IFX_FileRead* DownloadFromURL(const FX_WCHAR* url);
+  IFX_SeekableReadStream* DownloadFromURL(const FX_WCHAR* url);
   CFX_WideString PostRequestURL(const FX_WCHAR* wsURL,
                                 const FX_WCHAR* wsData,
                                 const FX_WCHAR* wsContentType,
diff --git a/fpdfsdk/fpdf_dataavail.cpp b/fpdfsdk/fpdf_dataavail.cpp
index fb866ec..0bf67e9 100644
--- a/fpdfsdk/fpdf_dataavail.cpp
+++ b/fpdfsdk/fpdf_dataavail.cpp
@@ -57,14 +57,14 @@
   FX_FILEAVAIL* m_pfileAvail;
 };
 
-class CFPDF_FileAccessWrap : public IFX_FileRead {
+class CFPDF_FileAccessWrap : public IFX_SeekableReadStream {
  public:
   CFPDF_FileAccessWrap() { m_pFileAccess = nullptr; }
   ~CFPDF_FileAccessWrap() override {}
 
   void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; }
 
-  // IFX_FileRead
+  // IFX_SeekableReadStream
   FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; }
 
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
diff --git a/fpdfsdk/fpdfeditimg.cpp b/fpdfsdk/fpdfeditimg.cpp
index 042ad2b..2822449 100644
--- a/fpdfsdk/fpdfeditimg.cpp
+++ b/fpdfsdk/fpdfeditimg.cpp
@@ -32,7 +32,7 @@
   if (!image_object || !fileAccess || !pages)
     return FALSE;
 
-  IFX_FileRead* pFile = new CPDF_CustomAccess(fileAccess);
+  IFX_SeekableReadStream* pFile = new CPDF_CustomAccess(fileAccess);
   CPDF_ImageObject* pImgObj = reinterpret_cast<CPDF_ImageObject*>(image_object);
   for (int index = 0; index < nCount; index++) {
     CPDF_Page* pPage = CPDFPageFromFPDFPage(pages[index]);
diff --git a/fpdfsdk/fpdfsave.cpp b/fpdfsdk/fpdfsave.cpp
index 364f4d2..9cdc714 100644
--- a/fpdfsdk/fpdfsave.cpp
+++ b/fpdfsdk/fpdfsave.cpp
@@ -36,7 +36,7 @@
 #include <ctime>
 #endif
 
-class CFX_IFileWrite final : public IFX_StreamWrite {
+class CFX_IFileWrite final : public IFX_WriteStream {
  public:
   CFX_IFileWrite();
   FX_BOOL Init(FPDF_FILEWRITE* pFileWriteStruct);
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index e0c24ec..92ca34e 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -96,7 +96,7 @@
   m_nCurPos = 0;
 }
 
-IFX_FileStream* CFPDF_FileStream::Retain() {
+IFX_SeekableStream* CFPDF_FileStream::Retain() {
   return this;
 }
 
@@ -325,7 +325,8 @@
                                                   FPDF_BYTESTRING password) {
   // NOTE: the creation of the file needs to be by the embedder on the
   // other side of this API.
-  IFX_FileRead* pFileAccess = FX_CreateFileRead((const FX_CHAR*)file_path);
+  IFX_SeekableReadStream* pFileAccess =
+      FX_CreateFileRead((const FX_CHAR*)file_path);
   if (!pFileAccess) {
     return nullptr;
   }
@@ -381,7 +382,7 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-class CMemFile final : public IFX_FileRead {
+class CMemFile final : public IFX_SeekableReadStream {
  public:
   CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {}
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_app.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_app.cpp
index 61694d0..dc5c4be 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_app.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_app.cpp
@@ -187,7 +187,7 @@
   return wsAnswer;
 }
 
-IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) {
+IFX_SeekableReadStream* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) {
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
   return pFormFillEnv ? pFormFillEnv->DownloadFromURL(wsURL.c_str()) : nullptr;
 }
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_app.h b/fpdfsdk/fpdfxfa/cpdfxfa_app.h
index 78184d1..9ec045f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_app.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_app.h
@@ -48,7 +48,7 @@
                           const CFX_WideString& wsDefaultAnswer,
                           FX_BOOL bMark) override;
 
-  IFX_FileRead* DownloadURL(const CFX_WideString& wsURL) override;
+  IFX_SeekableReadStream* DownloadURL(const CFX_WideString& wsURL) override;
   FX_BOOL PostRequestURL(const CFX_WideString& wsURL,
                          const CFX_WideString& wsData,
                          const CFX_WideString& wsContentType,
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 7e7ee50..13b79ba 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -704,7 +704,7 @@
   return ret;
 }
 
-IFX_FileRead* CPDFXFA_DocEnvironment::OpenLinkedFile(
+IFX_SeekableReadStream* CPDFXFA_DocEnvironment::OpenLinkedFile(
     CXFA_FFDoc* hDoc,
     const CFX_WideString& wsLink) {
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pDocument->GetFormFillEnv();
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
index 537e1eb..999d445 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
@@ -85,8 +85,8 @@
                             const CFX_ByteStringC& szPropName,
                             CFXJSE_Value* pValue) override;
 
-  IFX_FileRead* OpenLinkedFile(CXFA_FFDoc* hDoc,
-                               const CFX_WideString& wsLink) override;
+  IFX_SeekableReadStream* OpenLinkedFile(CXFA_FFDoc* hDoc,
+                                         const CFX_WideString& wsLink) override;
 
  private:
   FX_BOOL OnBeforeNotifySubmit();
diff --git a/fpdfsdk/fsdk_define.h b/fpdfsdk/fsdk_define.h
index b59a3c2..4fea138 100644
--- a/fpdfsdk/fsdk_define.h
+++ b/fpdfsdk/fsdk_define.h
@@ -25,12 +25,12 @@
 class CPDF_PageRenderContext;
 class IFSDK_PAUSE_Adapter;
 
-class CPDF_CustomAccess final : public IFX_FileRead {
+class CPDF_CustomAccess final : public IFX_SeekableReadStream {
  public:
   explicit CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess);
   ~CPDF_CustomAccess() override {}
 
-  // IFX_FileRead
+  // IFX_SeekableReadStream
   FX_FILESIZE GetSize() override;
   void Release() override;
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
@@ -40,13 +40,13 @@
 };
 
 #ifdef PDF_ENABLE_XFA
-class CFPDF_FileStream : public IFX_FileStream {
+class CFPDF_FileStream : public IFX_SeekableStream {
  public:
   explicit CFPDF_FileStream(FPDF_FILEHANDLER* pFS);
   ~CFPDF_FileStream() override {}
 
-  // IFX_FileStream:
-  IFX_FileStream* Retain() override;
+  // IFX_SeekableStream:
+  IFX_SeekableStream* Retain() override;
   void Release() override;
   FX_FILESIZE GetSize() override;
   FX_BOOL IsEOF() override;
diff --git a/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc b/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
index 501c4ff..b32a182 100644
--- a/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
+++ b/testing/libfuzzer/pdf_cfx_saxreader_fuzzer.cc
@@ -16,8 +16,9 @@
   if (!stream)
     return 0;
 
-  std::unique_ptr<IFX_FileRead, ReleaseDeleter<IFX_FileRead>> fileRead(
-      FX_CreateFileRead(stream.get(), false));
+  std::unique_ptr<IFX_SeekableReadStream,
+                  ReleaseDeleter<IFX_SeekableReadStream>>
+      fileRead(FX_CreateFileRead(stream.get(), false));
   if (!fileRead)
     return 0;
 
diff --git a/testing/libfuzzer/xfa_codec_fuzzer.h b/testing/libfuzzer/xfa_codec_fuzzer.h
index 13a467e..c317618 100644
--- a/testing/libfuzzer/xfa_codec_fuzzer.h
+++ b/testing/libfuzzer/xfa_codec_fuzzer.h
@@ -41,7 +41,7 @@
   }
 
  private:
-  class Reader : public IFX_FileRead {
+  class Reader : public IFX_SeekableReadStream {
    public:
     Reader(const uint8_t* data, size_t size) : m_data(data), m_size(size) {}
     ~Reader() {}
diff --git a/xfa/fde/xml/cfx_saxreader.cpp b/xfa/fde/xml/cfx_saxreader.cpp
index 187d14e..8f18451 100644
--- a/xfa/fde/xml/cfx_saxreader.cpp
+++ b/xfa/fde/xml/cfx_saxreader.cpp
@@ -70,7 +70,7 @@
       m_pBuf(nullptr),
       m_dwBufSize(0),
       m_dwBufIndex(0) {}
-FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile,
+FX_BOOL CFX_SAXFile::StartFile(IFX_SeekableReadStream* pFile,
                                uint32_t dwStart,
                                uint32_t dwLen) {
   ASSERT(!m_pFile && pFile);
@@ -214,7 +214,7 @@
   return (m_dwParseMode & CFX_SaxParseMode_NotSkipSpace) == 0 && ch < 0x21;
 }
 
-int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile,
+int32_t CFX_SAXReader::StartParse(IFX_SeekableReadStream* pFile,
                                   uint32_t dwStart,
                                   uint32_t dwLen,
                                   uint32_t dwParseMode) {
diff --git a/xfa/fde/xml/cfx_saxreader.h b/xfa/fde/xml/cfx_saxreader.h
index b6bedfe..10ba69f 100644
--- a/xfa/fde/xml/cfx_saxreader.h
+++ b/xfa/fde/xml/cfx_saxreader.h
@@ -38,10 +38,12 @@
 class CFX_SAXFile {
  public:
   CFX_SAXFile();
-  FX_BOOL StartFile(IFX_FileRead* pFile, uint32_t dwStart, uint32_t dwLen);
+  FX_BOOL StartFile(IFX_SeekableReadStream* pFile,
+                    uint32_t dwStart,
+                    uint32_t dwLen);
   FX_BOOL ReadNextBlock();
   void Reset();
-  IFX_FileRead* m_pFile;
+  IFX_SeekableReadStream* m_pFile;
   uint32_t m_dwStart;
   uint32_t m_dwEnd;
   uint32_t m_dwCur;
@@ -70,7 +72,7 @@
   CFX_SAXReader();
   ~CFX_SAXReader();
 
-  int32_t StartParse(IFX_FileRead* pFile,
+  int32_t StartParse(IFX_SeekableReadStream* pFile,
                      uint32_t dwStart = 0,
                      uint32_t dwLen = -1,
                      uint32_t dwParseMode = 0);
diff --git a/xfa/fgas/crt/fgas_stream.cpp b/xfa/fgas/crt/fgas_stream.cpp
index 74c19ea..f0a2a88 100644
--- a/xfa/fgas/crt/fgas_stream.cpp
+++ b/xfa/fgas/crt/fgas_stream.cpp
@@ -104,7 +104,7 @@
   CFX_FileReadStreamImp();
   ~CFX_FileReadStreamImp() override {}
 
-  FX_BOOL LoadFileRead(IFX_FileRead* pFileRead, uint32_t dwAccess);
+  FX_BOOL LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess);
 
   // IFX_StreamImp:
   int32_t GetLength() const override;
@@ -125,7 +125,7 @@
   FX_BOOL SetLength(int32_t iLength) override { return FALSE; }
 
  protected:
-  IFX_FileRead* m_pFileRead;
+  IFX_SeekableReadStream* m_pFileRead;
   int32_t m_iPosition;
   int32_t m_iLength;
 };
@@ -170,7 +170,7 @@
   CFX_FileWriteStreamImp();
   ~CFX_FileWriteStreamImp() override {}
 
-  FX_BOOL LoadFileWrite(IFX_FileWrite* pFileWrite, uint32_t dwAccess);
+  FX_BOOL LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess);
 
   // IFX_StreamImp:
   int32_t GetLength() const override;
@@ -189,7 +189,7 @@
   FX_BOOL SetLength(int32_t iLength) override { return FALSE; }
 
  protected:
-  IFX_FileWrite* m_pFileWrite;
+  IFX_SeekableWriteStream* m_pFileWrite;
   int32_t m_iPosition;
 };
 
@@ -208,8 +208,8 @@
 
   FX_BOOL LoadFile(const FX_WCHAR* pszSrcFileName, uint32_t dwAccess);
   FX_BOOL LoadBuffer(uint8_t* pData, int32_t iTotalSize, uint32_t dwAccess);
-  FX_BOOL LoadFileRead(IFX_FileRead* pFileRead, uint32_t dwAccess);
-  FX_BOOL LoadFileWrite(IFX_FileWrite* pFileWrite, uint32_t dwAccess);
+  FX_BOOL LoadFileRead(IFX_SeekableReadStream* pFileRead, uint32_t dwAccess);
+  FX_BOOL LoadFileWrite(IFX_SeekableWriteStream* pFileWrite, uint32_t dwAccess);
   FX_BOOL LoadBufferRead(IFX_BufferRead* pBufferRead,
                          int32_t iFileSize,
                          uint32_t dwAccess,
@@ -289,12 +289,12 @@
   void InitStream();
 };
 
-class CFGAS_FileRead : public IFX_FileRead {
+class CFGAS_FileRead : public IFX_SeekableReadStream {
  public:
   CFGAS_FileRead(IFX_Stream* pStream, FX_BOOL bReleaseStream);
   ~CFGAS_FileRead() override;
 
-  // IFX_FileRead
+  // IFX_SeekableReadStream
   void Release() override;
   FX_FILESIZE GetSize() override;
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
@@ -336,7 +336,7 @@
 }  // namespace
 
 // static
-IFX_Stream* IFX_Stream::CreateStream(IFX_FileRead* pFileRead,
+IFX_Stream* IFX_Stream::CreateStream(IFX_SeekableReadStream* pFileRead,
                                      uint32_t dwAccess) {
   CFX_Stream* pSR = new CFX_Stream;
   if (!pSR->LoadFileRead(pFileRead, dwAccess)) {
@@ -350,7 +350,7 @@
 }
 
 // static
-IFX_Stream* IFX_Stream::CreateStream(IFX_FileWrite* pFileWrite,
+IFX_Stream* IFX_Stream::CreateStream(IFX_SeekableWriteStream* pFileWrite,
                                      uint32_t dwAccess) {
   CFX_Stream* pSR = new CFX_Stream;
   if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) {
@@ -549,7 +549,7 @@
 }
 CFX_FileReadStreamImp::CFX_FileReadStreamImp()
     : m_pFileRead(nullptr), m_iPosition(0), m_iLength(0) {}
-FX_BOOL CFX_FileReadStreamImp::LoadFileRead(IFX_FileRead* pFileRead,
+FX_BOOL CFX_FileReadStreamImp::LoadFileRead(IFX_SeekableReadStream* pFileRead,
                                             uint32_t dwAccess) {
   ASSERT(!m_pFileRead && pFileRead);
   if (dwAccess & FX_STREAMACCESS_Write) {
@@ -744,8 +744,9 @@
 }
 CFX_FileWriteStreamImp::CFX_FileWriteStreamImp()
     : m_pFileWrite(nullptr), m_iPosition(0) {}
-FX_BOOL CFX_FileWriteStreamImp::LoadFileWrite(IFX_FileWrite* pFileWrite,
-                                              uint32_t dwAccess) {
+FX_BOOL CFX_FileWriteStreamImp::LoadFileWrite(
+    IFX_SeekableWriteStream* pFileWrite,
+    uint32_t dwAccess) {
   ASSERT(!m_pFileWrite && pFileWrite);
   if (dwAccess & FX_STREAMACCESS_Read) {
     return FALSE;
@@ -1152,7 +1153,8 @@
   return TRUE;
 }
 
-FX_BOOL CFX_Stream::LoadFileRead(IFX_FileRead* pFileRead, uint32_t dwAccess) {
+FX_BOOL CFX_Stream::LoadFileRead(IFX_SeekableReadStream* pFileRead,
+                                 uint32_t dwAccess) {
   if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
     return FALSE;
 
@@ -1170,7 +1172,7 @@
   return TRUE;
 }
 
-FX_BOOL CFX_Stream::LoadFileWrite(IFX_FileWrite* pFileWrite,
+FX_BOOL CFX_Stream::LoadFileWrite(IFX_SeekableWriteStream* pFileWrite,
                                   uint32_t dwAccess) {
   if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp)
     return FALSE;
@@ -1467,8 +1469,8 @@
   }
   return pShared;
 }
-IFX_FileRead* FX_CreateFileRead(IFX_Stream* pBaseStream,
-                                FX_BOOL bReleaseStream) {
+IFX_SeekableReadStream* FX_CreateFileRead(IFX_Stream* pBaseStream,
+                                          FX_BOOL bReleaseStream) {
   ASSERT(pBaseStream);
   return new CFGAS_FileRead(pBaseStream, bReleaseStream);
 }
diff --git a/xfa/fgas/crt/fgas_stream.h b/xfa/fgas/crt/fgas_stream.h
index 637402f..c61688d 100644
--- a/xfa/fgas/crt/fgas_stream.h
+++ b/xfa/fgas/crt/fgas_stream.h
@@ -12,8 +12,8 @@
 
 class IFX_Stream;
 
-IFX_FileRead* FX_CreateFileRead(IFX_Stream* pBaseStream,
-                                FX_BOOL bReleaseStream);
+IFX_SeekableReadStream* FX_CreateFileRead(IFX_Stream* pBaseStream,
+                                          FX_BOOL bReleaseStream);
 
 enum FX_STREAMACCESS {
   FX_STREAMACCESS_Binary = 0x00,
@@ -33,8 +33,10 @@
 
 class IFX_Stream {
  public:
-  static IFX_Stream* CreateStream(IFX_FileRead* pFileRead, uint32_t dwAccess);
-  static IFX_Stream* CreateStream(IFX_FileWrite* pFileWrite, uint32_t dwAccess);
+  static IFX_Stream* CreateStream(IFX_SeekableReadStream* pFileRead,
+                                  uint32_t dwAccess);
+  static IFX_Stream* CreateStream(IFX_SeekableWriteStream* pFileWrite,
+                                  uint32_t dwAccess);
   static IFX_Stream* CreateStream(uint8_t* pData,
                                   int32_t length,
                                   uint32_t dwAccess);
diff --git a/xfa/fgas/font/fgas_gefont.h b/xfa/fgas/font/fgas_gefont.h
index 5a13aec..7245e83 100644
--- a/xfa/fgas/font/fgas_gefont.h
+++ b/xfa/fgas/font/fgas_gefont.h
@@ -101,7 +101,9 @@
   int32_t m_iRefCount;
   bool m_bExternalFont;
   std::unique_ptr<IFX_Stream, ReleaseDeleter<IFX_Stream>> m_pStream;
-  std::unique_ptr<IFX_FileRead, ReleaseDeleter<IFX_FileRead>> m_pFileRead;
+  std::unique_ptr<IFX_SeekableReadStream,
+                  ReleaseDeleter<IFX_SeekableReadStream>>
+      m_pFileRead;
   std::unique_ptr<CFX_UnicodeEncoding> m_pFontEncoding;
   std::unique_ptr<CFX_DiscreteArrayTemplate<uint16_t>> m_pCharWidthMap;
   std::unique_ptr<CFX_MassArrayTemplate<CFX_Rect>> m_pRectArray;
diff --git a/xfa/fgas/font/fgas_stdfontmgr.cpp b/xfa/fgas/font/fgas_stdfontmgr.cpp
index 59bd272..646eb94 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.cpp
+++ b/xfa/fgas/font/fgas_stdfontmgr.cpp
@@ -591,7 +591,7 @@
   pos = m_IFXFont2FileRead.GetStartPosition();
   while (pos) {
     CFGAS_GEFont* pFont;
-    IFX_FileRead* pFileRead;
+    IFX_SeekableReadStream* pFileRead;
     m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
     pFileRead->Release();
   }
@@ -609,7 +609,7 @@
 
   pSystemFontInfo->EnumFontList(pFontMapper);
   for (int32_t i = 0; i < pFontMapper->GetFaceSize(); ++i) {
-    IFX_FileRead* pFontStream =
+    IFX_SeekableReadStream* pFontStream =
         CreateFontStream(pFontMapper, pSystemFontInfo, i);
     if (!pFontStream)
       continue;
@@ -629,7 +629,7 @@
   CFX_GEModule::Get()->GetFontMgr()->InitFTLibrary();
   FX_POSITION pos = m_pFontSource->GetStartPosition();
   IFX_FileAccess* pFontSource = nullptr;
-  IFX_FileRead* pFontStream = nullptr;
+  IFX_SeekableReadStream* pFontStream = nullptr;
   while (pos) {
     pFontSource = m_pFontSource->GetNext(pos);
     pFontStream = pFontSource->CreateFileStream(FX_FILEMODE_ReadOnly);
@@ -783,7 +783,8 @@
 
 FX_BOOL CFGAS_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc,
                                         FX_WCHAR wcUnicode) {
-  IFX_FileRead* pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
+  IFX_SeekableReadStream* pFileRead =
+      CreateFontStream(pDesc->m_wsFaceName.UTF8Encode());
   if (!pFileRead)
     return FALSE;
   FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex);
@@ -835,7 +836,8 @@
   if (!pSystemFontInfo)
     return nullptr;
 
-  IFX_FileRead* pFontStream = CreateFontStream(wsFaceName.UTF8Encode());
+  IFX_SeekableReadStream* pFontStream =
+      CreateFontStream(wsFaceName.UTF8Encode());
   if (!pFontStream)
     return nullptr;
 
@@ -867,7 +869,8 @@
   if (count == 0)
     return 0;
 
-  IFX_FileRead* pFile = (IFX_FileRead*)stream->descriptor.pointer;
+  IFX_SeekableReadStream* pFile =
+      (IFX_SeekableReadStream*)stream->descriptor.pointer;
   int res = pFile->ReadBlock(buffer, offset, count);
   if (res)
     return count;
@@ -878,7 +881,7 @@
 
 };  // extern "C"
 
-FXFT_Face CFGAS_FontMgrImp::LoadFace(IFX_FileRead* pFontStream,
+FXFT_Face CFGAS_FontMgrImp::LoadFace(IFX_SeekableReadStream* pFontStream,
                                      int32_t iFaceIndex) {
   if (!pFontStream)
     return nullptr;
@@ -913,7 +916,7 @@
   return pFace;
 }
 
-IFX_FileRead* CFGAS_FontMgrImp::CreateFontStream(
+IFX_SeekableReadStream* CFGAS_FontMgrImp::CreateFontStream(
     CFX_FontMapper* pFontMapper,
     IFX_SystemFontInfo* pSystemFontInfo,
     uint32_t index) {
@@ -934,7 +937,7 @@
   return FX_CreateMemoryStream(pBuffer, dwFileSize, TRUE);
 }
 
-IFX_FileRead* CFGAS_FontMgrImp::CreateFontStream(
+IFX_SeekableReadStream* CFGAS_FontMgrImp::CreateFontStream(
     const CFX_ByteString& bsFaceName) {
   CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
   CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
@@ -1111,7 +1114,7 @@
   pos = m_IFXFont2FileRead.GetStartPosition();
   while (pos) {
     CFGAS_GEFont* pFont;
-    IFX_FileRead* pFileRead;
+    IFX_SeekableReadStream* pFileRead;
     m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead);
     pFileRead->Release();
   }
@@ -1121,7 +1124,7 @@
   if (!pEFont) {
     return;
   }
-  IFX_FileRead* pFileRead;
+  IFX_SeekableReadStream* pFileRead;
   if (m_IFXFont2FileRead.Lookup(pEFont, pFileRead)) {
     pFileRead->Release();
     m_IFXFont2FileRead.RemoveKey(pEFont);
@@ -1179,7 +1182,7 @@
   m_InstalledFonts.Add(pFont.release());
 }
 
-void CFGAS_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream,
+void CFGAS_FontMgrImp::RegisterFaces(IFX_SeekableReadStream* pFontStream,
                                      const CFX_WideString* pFaceName) {
   int32_t index = 0;
   int32_t num_faces = 0;
diff --git a/xfa/fgas/font/fgas_stdfontmgr.h b/xfa/fgas/font/fgas_stdfontmgr.h
index 785a47f..fd7f9cd 100644
--- a/xfa/fgas/font/fgas_stdfontmgr.h
+++ b/xfa/fgas/font/fgas_stdfontmgr.h
@@ -185,7 +185,7 @@
  protected:
   void RegisterFace(FXFT_Face pFace,
                     const CFX_WideString* pFaceName);
-  void RegisterFaces(IFX_FileRead* pFontStream,
+  void RegisterFaces(IFX_SeekableReadStream* pFontStream,
                      const CFX_WideString* pFaceName);
   void GetNames(const uint8_t* name_table, CFX_WideStringArray& Names);
   std::vector<uint16_t> GetCharsets(FXFT_Face pFace) const;
@@ -204,16 +204,16 @@
                       uint32_t dwFontStyles,
                       const CFX_WideString& FontName,
                       FX_WCHAR wcUnicode = 0xFFFE);
-  FXFT_Face LoadFace(IFX_FileRead* pFontStream, int32_t iFaceIndex);
-  IFX_FileRead* CreateFontStream(CFX_FontMapper* pFontMapper,
-                                 IFX_SystemFontInfo* pSystemFontInfo,
-                                 uint32_t index);
-  IFX_FileRead* CreateFontStream(const CFX_ByteString& bsFaceName);
+  FXFT_Face LoadFace(IFX_SeekableReadStream* pFontStream, int32_t iFaceIndex);
+  IFX_SeekableReadStream* CreateFontStream(CFX_FontMapper* pFontMapper,
+                                           IFX_SystemFontInfo* pSystemFontInfo,
+                                           uint32_t index);
+  IFX_SeekableReadStream* CreateFontStream(const CFX_ByteString& bsFaceName);
 
   CFX_FontDescriptors m_InstalledFonts;
   CFX_MapPtrTemplate<uint32_t, CFX_FontDescriptorInfos*> m_Hash2CandidateList;
   CFX_MapPtrTemplate<uint32_t, CFX_ArrayTemplate<CFGAS_GEFont*>*> m_Hash2Fonts;
-  CFX_MapPtrTemplate<CFGAS_GEFont*, IFX_FileRead*> m_IFXFont2FileRead;
+  CFX_MapPtrTemplate<CFGAS_GEFont*, IFX_SeekableReadStream*> m_IFXFont2FileRead;
   CFX_MapPtrTemplate<FX_WCHAR, CFGAS_GEFont*> m_FailedUnicodes2Nullptr;
   CFX_FontSourceEnum_File* const m_pFontSource;
 };
diff --git a/xfa/fxfa/app/xfa_checksum.cpp b/xfa/fxfa/app/xfa_checksum.cpp
index 5e2b1fe..351ae73 100644
--- a/xfa/fxfa/app/xfa_checksum.cpp
+++ b/xfa/fxfa/app/xfa_checksum.cpp
@@ -225,7 +225,7 @@
   m_pSAXReader = new CFX_SAXReader;
 }
 
-FX_BOOL CXFA_ChecksumContext::UpdateChecksum(IFX_FileRead* pSrcFile,
+FX_BOOL CXFA_ChecksumContext::UpdateChecksum(IFX_SeekableReadStream* pSrcFile,
                                              FX_FILESIZE offset,
                                              size_t size) {
   if (!m_pSAXReader || !pSrcFile)
diff --git a/xfa/fxfa/app/xfa_ffapp.cpp b/xfa/fxfa/app/xfa_ffapp.cpp
index f233ecc..d60d48f 100644
--- a/xfa/fxfa/app/xfa_ffapp.cpp
+++ b/xfa/fxfa/app/xfa_ffapp.cpp
@@ -90,7 +90,7 @@
 }
 
 CXFA_FFDoc* CXFA_FFApp::CreateDoc(IXFA_DocEnvironment* pDocEnvironment,
-                                  IFX_FileRead* pStream,
+                                  IFX_SeekableReadStream* pStream,
                                   FX_BOOL bTakeOverFile) {
   std::unique_ptr<CXFA_FFDoc> pDoc(new CXFA_FFDoc(this, pDocEnvironment));
   FX_BOOL bSuccess = pDoc->OpenDoc(pStream, bTakeOverFile);
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp
index 25c78bd..494091b 100644
--- a/xfa/fxfa/app/xfa_ffdoc.cpp
+++ b/xfa/fxfa/app/xfa_ffdoc.cpp
@@ -290,7 +290,8 @@
   return it != m_TypeToDocViewMap.end() ? it->second.get() : nullptr;
 }
 
-FX_BOOL CXFA_FFDoc::OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile) {
+FX_BOOL CXFA_FFDoc::OpenDoc(IFX_SeekableReadStream* pStream,
+                            FX_BOOL bTakeOverFile) {
   m_bOwnStream = bTakeOverFile;
   m_pStream = pStream;
   return TRUE;
@@ -324,7 +325,7 @@
   if (xfaStreams.empty())
     return FALSE;
 
-  IFX_FileRead* pFileRead = new CXFA_FileRead(xfaStreams);
+  IFX_SeekableReadStream* pFileRead = new CXFA_FileRead(xfaStreams);
   m_pPDFDoc = pPDFDoc;
   if (m_pStream) {
     m_pStream->Release();
@@ -416,7 +417,7 @@
   CPDF_StreamAcc streamAcc;
   streamAcc.LoadAllData(pStream);
 
-  IFX_FileRead* pImageFileRead =
+  IFX_SeekableReadStream* pImageFileRead =
       FX_CreateMemoryStream((uint8_t*)streamAcc.GetData(), streamAcc.GetSize());
 
   CFX_DIBitmap* pDibSource = XFA_LoadImageFromBuffer(
@@ -427,7 +428,7 @@
 }
 
 bool CXFA_FFDoc::SavePackage(XFA_HashCode code,
-                             IFX_FileWrite* pFile,
+                             IFX_SeekableWriteStream* pFile,
                              CXFA_ChecksumContext* pCSContext) {
   CXFA_Document* doc = m_pDocumentParser->GetDocument();
 
@@ -445,7 +446,7 @@
       pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr);
 }
 
-FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) {
+FX_BOOL CXFA_FFDoc::ImportData(IFX_SeekableReadStream* pStream, FX_BOOL bXDP) {
   std::unique_ptr<CXFA_DataImporter> importer(
       new CXFA_DataImporter(m_pDocumentParser->GetDocument()));
   return importer->ImportData(pStream);
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index 0e84ad6..c0c559a 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -1056,7 +1056,7 @@
   FXCODEC_IMAGE_TYPE type = XFA_GetImageType(wsContentType);
   CFX_ByteString bsContent;
   uint8_t* pImageBuffer = nullptr;
-  IFX_FileRead* pImageFileRead = nullptr;
+  IFX_SeekableReadStream* pImageFileRead = nullptr;
   if (wsImage.GetLength() > 0) {
     XFA_ATTRIBUTEENUM iEncoding =
         (XFA_ATTRIBUTEENUM)pImage->GetTransferEncoding();
@@ -1117,7 +1117,7 @@
   }
   return dibFormat;
 }
-CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
+CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_SeekableReadStream* pImageFileRead,
                                       FXCODEC_IMAGE_TYPE type,
                                       int32_t& iImageXDpi,
                                       int32_t& iImageYDpi) {
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
index 59bbc89..b5ba3f7 100644
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
@@ -4920,7 +4920,7 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
   CFX_ByteString urlString;
   ValueToUTF8String(argOne.get(), urlString);
-  IFX_FileRead* pFile = pAppProvider->DownloadURL(
+  IFX_SeekableReadStream* pFile = pAppProvider->DownloadURL(
       CFX_WideString::FromUTF8(urlString.AsStringC()));
   if (!pFile)
     return;
diff --git a/xfa/fxfa/fxfa.h b/xfa/fxfa/fxfa.h
index a86fb63..8abee52 100644
--- a/xfa/fxfa/fxfa.h
+++ b/xfa/fxfa/fxfa.h
@@ -230,7 +230,7 @@
    * @param[in] wsURL - http, ftp, such as
    * "http://www.w3.org/TR/REC-xml-names/".
    */
-  virtual IFX_FileRead* DownloadURL(const CFX_WideString& wsURL) = 0;
+  virtual IFX_SeekableReadStream* DownloadURL(const CFX_WideString& wsURL) = 0;
 
   /**
    * POST data to the given url.
@@ -320,8 +320,9 @@
   virtual FX_BOOL SetGlobalProperty(CXFA_FFDoc* hDoc,
                                     const CFX_ByteStringC& szPropName,
                                     CFXJSE_Value* pValue) = 0;
-  virtual IFX_FileRead* OpenLinkedFile(CXFA_FFDoc* hDoc,
-                                       const CFX_WideString& wsLink) = 0;
+  virtual IFX_SeekableReadStream* OpenLinkedFile(
+      CXFA_FFDoc* hDoc,
+      const CFX_WideString& wsLink) = 0;
 };
 
 class IXFA_WidgetIterator {
diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp
index 8f47b53..de2d08b 100644
--- a/xfa/fxfa/parser/cxfa_dataexporter.cpp
+++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp
@@ -199,9 +199,9 @@
 
         IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE);
         IFX_Stream* pTempStream = IFX_Stream::CreateStream(
-            (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text |
-                                            FX_STREAMACCESS_Write |
-                                            FX_STREAMACCESS_Append);
+            (IFX_SeekableWriteStream*)pMemStream, FX_STREAMACCESS_Text |
+                                                      FX_STREAMACCESS_Write |
+                                                      FX_STREAMACCESS_Append);
         pTempStream->SetCodePage(FX_CODEPAGE_UTF8);
         pRichTextXML->SaveXMLNode(pTempStream);
         wsChildren += CFX_WideString::FromUTF8(
@@ -444,11 +444,11 @@
   ASSERT(m_pDocument);
 }
 
-FX_BOOL CXFA_DataExporter::Export(IFX_FileWrite* pWrite) {
+FX_BOOL CXFA_DataExporter::Export(IFX_SeekableWriteStream* pWrite) {
   return Export(pWrite, m_pDocument->GetRoot(), 0, nullptr);
 }
 
-FX_BOOL CXFA_DataExporter::Export(IFX_FileWrite* pWrite,
+FX_BOOL CXFA_DataExporter::Export(IFX_SeekableWriteStream* pWrite,
                                   CXFA_Node* pNode,
                                   uint32_t dwFlag,
                                   const FX_CHAR* pChecksum) {
diff --git a/xfa/fxfa/parser/cxfa_dataexporter.h b/xfa/fxfa/parser/cxfa_dataexporter.h
index 868c20e..c1123d1 100644
--- a/xfa/fxfa/parser/cxfa_dataexporter.h
+++ b/xfa/fxfa/parser/cxfa_dataexporter.h
@@ -11,15 +11,15 @@
 
 class CXFA_Document;
 class CXFA_Node;
-class IFX_FileWrite;
+class IFX_SeekableWriteStream;
 class IFX_Stream;
 
 class CXFA_DataExporter {
  public:
   explicit CXFA_DataExporter(CXFA_Document* pDocument);
 
-  FX_BOOL Export(IFX_FileWrite* pWrite);
-  FX_BOOL Export(IFX_FileWrite* pWrite,
+  FX_BOOL Export(IFX_SeekableWriteStream* pWrite);
+  FX_BOOL Export(IFX_SeekableWriteStream* pWrite,
                  CXFA_Node* pNode,
                  uint32_t dwFlag,
                  const FX_CHAR* pChecksum);
diff --git a/xfa/fxfa/parser/cxfa_dataimporter.cpp b/xfa/fxfa/parser/cxfa_dataimporter.cpp
index 92559a1..62c6536 100644
--- a/xfa/fxfa/parser/cxfa_dataimporter.cpp
+++ b/xfa/fxfa/parser/cxfa_dataimporter.cpp
@@ -21,7 +21,7 @@
   ASSERT(m_pDocument);
 }
 
-FX_BOOL CXFA_DataImporter::ImportData(IFX_FileRead* pDataDocument) {
+FX_BOOL CXFA_DataImporter::ImportData(IFX_SeekableReadStream* pDataDocument) {
   std::unique_ptr<CXFA_SimpleParser> pDataDocumentParser(
       new CXFA_SimpleParser(m_pDocument, false));
   if (pDataDocumentParser->StartParse(pDataDocument, XFA_XDPPACKET_Datasets) !=
diff --git a/xfa/fxfa/parser/cxfa_dataimporter.h b/xfa/fxfa/parser/cxfa_dataimporter.h
index 519fef4..d01f24c 100644
--- a/xfa/fxfa/parser/cxfa_dataimporter.h
+++ b/xfa/fxfa/parser/cxfa_dataimporter.h
@@ -10,13 +10,13 @@
 #include "core/fxcrt/fx_system.h"
 
 class CXFA_Document;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 
 class CXFA_DataImporter {
  public:
   explicit CXFA_DataImporter(CXFA_Document* pDocument);
 
-  FX_BOOL ImportData(IFX_FileRead* pDataDocument);
+  FX_BOOL ImportData(IFX_SeekableReadStream* pDataDocument);
 
  protected:
   CXFA_Document* const m_pDocument;
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index 459edfa..ea38b3e 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -15,7 +15,7 @@
 CXFA_DocumentParser::~CXFA_DocumentParser() {
 }
 
-int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream,
+int32_t CXFA_DocumentParser::StartParse(IFX_SeekableReadStream* pStream,
                                         XFA_XDPPACKET ePacketID) {
   m_pDocument.reset();
   m_nodeParser.CloseParser();
diff --git a/xfa/fxfa/parser/cxfa_document_parser.h b/xfa/fxfa/parser/cxfa_document_parser.h
index 3e72f9b..29aeca3 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.h
+++ b/xfa/fxfa/parser/cxfa_document_parser.h
@@ -15,7 +15,7 @@
 class CXFA_Document;
 class CXFA_FFNotify;
 class CXFA_Notify;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 class IFX_Pause;
 
 class CXFA_DocumentParser {
@@ -23,7 +23,7 @@
   explicit CXFA_DocumentParser(CXFA_FFNotify* pNotify);
   ~CXFA_DocumentParser();
 
-  int32_t StartParse(IFX_FileRead* pStream, XFA_XDPPACKET ePacketID);
+  int32_t StartParse(IFX_SeekableReadStream* pStream, XFA_XDPPACKET ePacketID);
   int32_t DoParse(IFX_Pause* pPause);
 
   CFDE_XMLDoc* GetXMLDoc() const;
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index bf5b6bf..9c209b2 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -1444,7 +1444,7 @@
         pMemoryStream(FX_CreateMemoryStream(TRUE));
     std::unique_ptr<IFX_Stream, ReleaseDeleter<IFX_Stream>> pStream(
         IFX_Stream::CreateStream(
-            static_cast<IFX_FileWrite*>(pMemoryStream.get()),
+            static_cast<IFX_SeekableWriteStream*>(pMemoryStream.get()),
             FX_STREAMACCESS_Text | FX_STREAMACCESS_Write |
                 FX_STREAMACCESS_Append));
     if (!pStream) {
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp
index b8d9fcb..f40060b 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp
@@ -277,7 +277,7 @@
   m_pFactory = pFactory;
 }
 
-int32_t CXFA_SimpleParser::StartParse(IFX_FileRead* pStream,
+int32_t CXFA_SimpleParser::StartParse(IFX_SeekableReadStream* pStream,
                                       XFA_XDPPACKET ePacketID) {
   CloseParser();
   m_pFileRead = pStream;
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.h b/xfa/fxfa/parser/cxfa_simple_parser.h
index f4d0095..2b1e192 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.h
+++ b/xfa/fxfa/parser/cxfa_simple_parser.h
@@ -15,7 +15,7 @@
 class CXFA_Document;
 class CXFA_Node;
 class CXFA_XMLParser;
-class IFX_FileRead;
+class IFX_SeekableReadStream;
 class IFX_Pause;
 class IFX_Stream;
 
@@ -24,7 +24,7 @@
   CXFA_SimpleParser(CXFA_Document* pFactory, bool bDocumentParser);
   ~CXFA_SimpleParser();
 
-  int32_t StartParse(IFX_FileRead* pStream, XFA_XDPPACKET ePacketID);
+  int32_t StartParse(IFX_SeekableReadStream* pStream, XFA_XDPPACKET ePacketID);
   int32_t DoParse(IFX_Pause* pPause);
   int32_t ParseXMLData(const CFX_WideString& wsXML,
                        CFDE_XMLNode*& pXMLNode,
@@ -78,7 +78,7 @@
   CXFA_XMLParser* m_pXMLParser;
   std::unique_ptr<CFDE_XMLDoc> m_pXMLDoc;
   std::unique_ptr<IFX_Stream, ReleaseDeleter<IFX_Stream>> m_pStream;
-  IFX_FileRead* m_pFileRead;
+  IFX_SeekableReadStream* m_pFileRead;
   CXFA_Document* m_pFactory;
   CXFA_Node* m_pRootNode;
   XFA_XDPPACKET m_ePacketID;
diff --git a/xfa/fxfa/xfa_checksum.h b/xfa/fxfa/xfa_checksum.h
index 69adc0a..6031277 100644
--- a/xfa/fxfa/xfa_checksum.h
+++ b/xfa/fxfa/xfa_checksum.h
@@ -62,7 +62,7 @@
 
   void StartChecksum();
   void Update(const CFX_ByteStringC& bsText);
-  FX_BOOL UpdateChecksum(IFX_FileRead* pSrcFile,
+  FX_BOOL UpdateChecksum(IFX_SeekableReadStream* pSrcFile,
                          FX_FILESIZE offset = 0,
                          size_t size = 0);
   void FinishChecksum();
diff --git a/xfa/fxfa/xfa_ffapp.h b/xfa/fxfa/xfa_ffapp.h
index dd670b8..5e82895 100644
--- a/xfa/fxfa/xfa_ffapp.h
+++ b/xfa/fxfa/xfa_ffapp.h
@@ -24,12 +24,12 @@
 class CXFA_FontMgr;
 class IFWL_AdapterTimerMgr;
 
-class CXFA_FileRead : public IFX_FileRead {
+class CXFA_FileRead : public IFX_SeekableReadStream {
  public:
   explicit CXFA_FileRead(const std::vector<CPDF_Stream*>& streams);
   ~CXFA_FileRead() override;
 
-  // IFX_FileRead
+  // IFX_SeekableReadStream
   FX_FILESIZE GetSize() override;
   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
   void Release() override;
@@ -44,7 +44,7 @@
   ~CXFA_FFApp();
 
   CXFA_FFDoc* CreateDoc(IXFA_DocEnvironment* pDocEnvironment,
-                        IFX_FileRead* pStream,
+                        IFX_SeekableReadStream* pStream,
                         FX_BOOL bTakeOverFile);
   CXFA_FFDoc* CreateDoc(IXFA_DocEnvironment* pDocEnvironment,
                         CPDF_Document* pPDFDoc);
diff --git a/xfa/fxfa/xfa_ffdoc.h b/xfa/fxfa/xfa_ffdoc.h
index 26b56fa..f1ecd90 100644
--- a/xfa/fxfa/xfa_ffdoc.h
+++ b/xfa/fxfa/xfa_ffdoc.h
@@ -35,7 +35,7 @@
   int32_t DoLoad(IFX_Pause* pPause = nullptr);
   void StopLoad();
   CXFA_FFDocView* CreateDocView(uint32_t dwView = 0);
-  FX_BOOL OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile);
+  FX_BOOL OpenDoc(IFX_SeekableReadStream* pStream, FX_BOOL bTakeOverFile);
   FX_BOOL OpenDoc(CPDF_Document* pPDFDoc);
   FX_BOOL CloseDoc();
   void SetDocType(uint32_t dwType);
@@ -49,14 +49,14 @@
                                  int32_t& iImageYDpi);
 
   bool SavePackage(XFA_HashCode code,
-                   IFX_FileWrite* pFile,
+                   IFX_SeekableWriteStream* pFile,
                    CXFA_ChecksumContext* pCSContext);
-  FX_BOOL ImportData(IFX_FileRead* pStream, FX_BOOL bXDP = TRUE);
+  FX_BOOL ImportData(IFX_SeekableReadStream* pStream, FX_BOOL bXDP = TRUE);
 
  protected:
   IXFA_DocEnvironment* const m_pDocEnvironment;
   std::unique_ptr<CXFA_DocumentParser> m_pDocumentParser;
-  IFX_FileRead* m_pStream;
+  IFX_SeekableReadStream* m_pStream;
   CXFA_FFApp* m_pApp;
   std::unique_ptr<CXFA_FFNotify> m_pNotify;
   CPDF_Document* m_pPDFDoc;
diff --git a/xfa/fxfa/xfa_ffwidget.h b/xfa/fxfa/xfa_ffwidget.h
index fe7c136..1a09ad1 100644
--- a/xfa/fxfa/xfa_ffwidget.h
+++ b/xfa/fxfa/xfa_ffwidget.h
@@ -164,7 +164,7 @@
                                 FX_BOOL& bNameImage,
                                 int32_t& iImageXDpi,
                                 int32_t& iImageYDpi);
-CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
+CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_SeekableReadStream* pImageFileRead,
                                       FXCODEC_IMAGE_TYPE type,
                                       int32_t& iImageXDpi,
                                       int32_t& iImageYDpi);
