Make CPDF_Document::StockFontClearer call through PageDataIface

This resolves the circular dependence between fpdfapi/parser and
fpdfapi/page.

Change-Id: If6bf6e531689c2e29a3e9e66d94df1d0b310ab2d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55690
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn
index 5478f83..10384d7 100644
--- a/core/fpdfapi/page/BUILD.gn
+++ b/core/fpdfapi/page/BUILD.gn
@@ -102,10 +102,7 @@
     "../font",
     "../parser",
   ]
-  allow_circular_includes_from = [
-    "../font",
-    "../parser",
-  ]
+  allow_circular_includes_from = [ "../font" ]
   if (pdf_use_skia || pdf_use_skia_paths) {
     allow_circular_includes_from += [ "../../fxge" ]
   }
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 8fe9250..9ad7df8 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -176,6 +176,10 @@
   m_FontMap.clear();
 }
 
+void CPDF_DocPageData::ClearStockFont() {
+  CPDF_PageModule::GetInstance()->ClearStockFont(GetDocument());
+}
+
 void CPDF_DocPageData::Clear(bool bForceRelease) {
   m_bForceClear = bForceRelease;
 
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 674aa1f..5b73f3f 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -35,6 +35,9 @@
   CPDF_DocPageData();
   ~CPDF_DocPageData() override;
 
+  // CPDF_Document::PageDataIface:
+  void ClearStockFont() override;
+
   void Clear(bool bRelease);
   bool IsForceClear() const { return m_bForceClear; }
 
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 8447a41..67e2058 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "build/build_config.h"
-#include "core/fpdfapi/page/cpdf_pagemodule.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_linearized_header.h"
@@ -66,7 +65,7 @@
                              std::unique_ptr<PageDataIface> pPageData)
     : m_pDocRender(std::move(pRenderData)),
       m_pDocPage(std::move(pPageData)),
-      m_StockFontClearer(this) {
+      m_StockFontClearer(m_pDocPage.get()) {
   m_pDocRender->SetDocument(this);
   m_pDocPage->SetDocument(this);
 }
@@ -475,11 +474,12 @@
   m_PageList.erase(m_PageList.begin() + iPage);
 }
 
-CPDF_Document::StockFontClearer::StockFontClearer(CPDF_Document* pDoc)
-    : m_pDoc(pDoc) {}
+CPDF_Document::StockFontClearer::StockFontClearer(
+    CPDF_Document::PageDataIface* pPageData)
+    : m_pPageData(pPageData) {}
 
 CPDF_Document::StockFontClearer::~StockFontClearer() {
-  CPDF_PageModule::GetInstance()->ClearStockFont(m_pDoc.Get());
+  m_pPageData->ClearStockFont();
 }
 
 CPDF_Document::PageDataIface::PageDataIface() = default;
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index 4fadc4f..b5b355f 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -58,6 +58,8 @@
     PageDataIface();
     virtual ~PageDataIface();
 
+    virtual void ClearStockFont() = 0;
+
     void SetDocument(CPDF_Document* pDoc) { m_pDoc = pDoc; }
     CPDF_Document* GetDocument() const { return m_pDoc.Get(); }
 
@@ -136,11 +138,11 @@
  protected:
   class StockFontClearer {
    public:
-    explicit StockFontClearer(CPDF_Document* pDoc);
+    explicit StockFontClearer(CPDF_Document::PageDataIface* pPageData);
     ~StockFontClearer();
 
    private:
-    UnownedPtr<CPDF_Document> const m_pDoc;
+    UnownedPtr<CPDF_Document::PageDataIface> const m_pPageData;
   };
 
   // Retrieve page count information by getting count value from the tree nodes