Add IFX_StreamWithSize with just a GetSize() method.

Set up the inheritance tree so IFX_SeekableWriteStream,
IFX_SeekableReadStream, and IFX_SeekableStream do not all need to
declare GetSize() as pure virtual.

Change-Id: If11622bb6032388ff0df152459eeffdf684f4575
Reviewed-on: https://pdfium-review.googlesource.com/c/45557
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index 354cbe4..dfaf51e 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -52,22 +52,28 @@
   virtual FX_FILESIZE CurrentOffset() const = 0;
 };
 
+class IFX_StreamWithSize {
+ public:
+  virtual FX_FILESIZE GetSize() = 0;
+};
+
 class IFX_RetainableWriteStream : virtual public Retainable,
                                   public IFX_WriteStream {};
 
-class IFX_SeekableWriteStream : public IFX_RetainableWriteStream {
+class IFX_SeekableWriteStream : virtual public IFX_StreamWithSize,
+                                public IFX_RetainableWriteStream {
  public:
   // IFX_WriteStream:
   bool WriteBlock(const void* pData, size_t size) override;
 
-  virtual FX_FILESIZE GetSize() = 0;
   virtual bool Flush() = 0;
   virtual bool WriteBlockAtOffset(const void* pData,
                                   FX_FILESIZE offset,
                                   size_t size) = 0;
 };
 
-class IFX_SeekableReadStream : virtual public Retainable {
+class IFX_SeekableReadStream : virtual public Retainable,
+                               virtual public IFX_StreamWithSize {
  public:
   static RetainPtr<IFX_SeekableReadStream> CreateFromFilename(
       const char* filename);
@@ -79,7 +85,6 @@
   virtual bool ReadBlockAtOffset(void* buffer,
                                  FX_FILESIZE offset,
                                  size_t size) = 0;
-  virtual FX_FILESIZE GetSize() = 0;
 };
 
 class IFX_SeekableStream : public IFX_SeekableReadStream,
@@ -92,9 +97,6 @@
       const wchar_t* filename,
       uint32_t dwModes);
 
-  // IFX_SeekableReadStream:
-  FX_FILESIZE GetSize() override = 0;
-
   // IFX_SeekableWriteStream:
   bool WriteBlock(const void* buffer, size_t size) override;
   bool WriteString(const ByteStringView& str) override;