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