Avoid another use of CPDF_Document::GetPageData().

Change-Id: I5837c5824c234362f41ef7cd53890eb0c85770cd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99694
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 9b34608..8003097 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -44,6 +44,7 @@
       RetainPtr<const CPDF_Stream> pFontStream) override;
   void MaybePurgeFontFileStreamAcc(
       RetainPtr<CPDF_StreamAcc>&& pStreamAcc) override;
+  void MaybePurgeImage(uint32_t dwStreamObjNum) override;
 
   // CPDF_Font::FormFactoryIFace:
   std::unique_ptr<CPDF_Font::FormIface> CreateForm(
@@ -82,7 +83,6 @@
                                             const CFX_Matrix& matrix);
 
   RetainPtr<CPDF_Image> GetImage(uint32_t dwStreamObjNum);
-  void MaybePurgeImage(uint32_t dwStreamObjNum);
 
   RetainPtr<CPDF_IccProfile> GetIccProfile(
       RetainPtr<const CPDF_Stream> pProfileStream);
diff --git a/core/fpdfapi/page/cpdf_imageobject.cpp b/core/fpdfapi/page/cpdf_imageobject.cpp
index 636f2cb..5c043c3 100644
--- a/core/fpdfapi/page/cpdf_imageobject.cpp
+++ b/core/fpdfapi/page/cpdf_imageobject.cpp
@@ -82,8 +82,8 @@
   if (!m_pImage)
     return;
 
-  auto* pPageData = CPDF_DocPageData::FromDocument(m_pImage->GetDocument());
-  if (!pPageData)
+  auto* pDoc = m_pImage->GetDocument();
+  if (!pDoc)
     return;
 
   RetainPtr<const CPDF_Stream> pStream = m_pImage->GetStream();
@@ -95,5 +95,5 @@
     return;
 
   m_pImage.Reset();  // Clear my reference before asking the cache.
-  pPageData->MaybePurgeImage(objnum);
+  pDoc->MaybePurgeImage(objnum);
 }
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index fad0688..547355a 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -400,6 +400,11 @@
     m_pDocPage->MaybePurgeFontFileStreamAcc(std::move(pStreamAcc));
 }
 
+void CPDF_Document::MaybePurgeImage(uint32_t objnum) {
+  if (m_pDocPage)
+    m_pDocPage->MaybePurgeImage(objnum);
+}
+
 void CPDF_Document::CreateNewDoc() {
   DCHECK(!m_pRootDict);
   DCHECK(!m_pInfoDict);
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index ddae290..f67ecda 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -55,6 +55,7 @@
         RetainPtr<const CPDF_Stream> pFontStream) = 0;
     virtual void MaybePurgeFontFileStreamAcc(
         RetainPtr<CPDF_StreamAcc>&& pStreamAcc) = 0;
+    virtual void MaybePurgeImage(uint32_t objnum) = 0;
 
     void SetDocument(CPDF_Document* pDoc) { m_pDoc = pDoc; }
 
@@ -110,6 +111,7 @@
   RetainPtr<CPDF_StreamAcc> GetFontFileStreamAcc(
       RetainPtr<const CPDF_Stream> pFontStream);
   void MaybePurgeFontFileStreamAcc(RetainPtr<CPDF_StreamAcc>&& pStreamAcc);
+  void MaybePurgeImage(uint32_t objnum);
 
   // Returns a valid pointer, unless it is called during destruction.
   PageDataIface* GetPageData() const { return m_pDocPage.get(); }