Rename IFX_ stream names

It's been troubling for some time that an IFX_FileStream might
actually be an in-memory buffer with no backing file.

Review-Url: https://codereview.chromium.org/2443723002
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);