Make CPDF_Font call through CPDF_Document::PageDataIface

Because adding to an interface from a lower layer is better
than casting to an object from an upper layer.

Change-Id: Iaa5b690d23d0725536fe220277b4ea7d3c5d5607
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55711
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 3bcc522..3c476eb 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -19,7 +19,6 @@
 #include "core/fpdfapi/font/cpdf_truetypefont.h"
 #include "core/fpdfapi/font/cpdf_type1font.h"
 #include "core/fpdfapi/font/cpdf_type3font.h"
-#include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
@@ -53,7 +52,7 @@
 
 CPDF_Font::~CPDF_Font() {
   if (m_pFontFile) {
-    auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+    auto* pPageData = m_pDocument->GetPageData();
     if (pPageData) {
       pPageData->MaybePurgeFontFileStreamAcc(
           m_pFontFile->GetStream()->AsStream());
@@ -209,7 +208,7 @@
   if (!pFontFile)
     return;
 
-  auto* pData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+  auto* pData = m_pDocument->GetPageData();
   m_pFontFile = pData->GetFontFileStreamAcc(pFontFile);
   if (!m_pFontFile)
     return;
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 5b73f3f..84d11dd 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -37,6 +37,9 @@
 
   // CPDF_Document::PageDataIface:
   void ClearStockFont() override;
+  RetainPtr<CPDF_StreamAcc> GetFontFileStreamAcc(
+      const CPDF_Stream* pFontStream) override;
+  void MaybePurgeFontFileStreamAcc(const CPDF_Stream* pFontStream) override;
 
   void Clear(bool bRelease);
   bool IsForceClear() const { return m_bForceClear; }
@@ -78,10 +81,6 @@
   RetainPtr<CPDF_IccProfile> GetIccProfile(const CPDF_Stream* pProfileStream);
   void MaybePurgeIccProfile(const CPDF_Stream* pProfileStream);
 
-  RetainPtr<CPDF_StreamAcc> GetFontFileStreamAcc(
-      const CPDF_Stream* pFontStream);
-  void MaybePurgeFontFileStreamAcc(const CPDF_Stream* pFontStream);
-
   RetainPtr<CPDF_ColorSpace> FindColorSpacePtr(const CPDF_Object* pCSObj) const;
   CPDF_CountedPattern* FindPatternPtr(const CPDF_Object* pPatternObj) const;
 
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index b5b355f..918fcfa 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -59,6 +59,10 @@
     virtual ~PageDataIface();
 
     virtual void ClearStockFont() = 0;
+    virtual RetainPtr<CPDF_StreamAcc> GetFontFileStreamAcc(
+        const CPDF_Stream* pFontStream) = 0;
+    virtual void MaybePurgeFontFileStreamAcc(
+        const CPDF_Stream* pFontStream) = 0;
 
     void SetDocument(CPDF_Document* pDoc) { m_pDoc = pDoc; }
     CPDF_Document* GetDocument() const { return m_pDoc.Get(); }