Reduce use of CPDF_Document::GetPageData()
Hide the callback interface somewhat behind wrapper methods.
Change-Id: I1d51ea32e1c63d9fa986e7379df7d8d528cfe9f9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99691
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 47ff701..9827752 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -55,11 +55,8 @@
m_BaseFontName(m_pFontDict->GetByteStringFor("BaseFont")) {}
CPDF_Font::~CPDF_Font() {
- if (m_pFontFile) {
- auto* pPageData = m_pDocument->GetPageData();
- if (pPageData)
- pPageData->MaybePurgeFontFileStreamAcc(std::move(m_pFontFile));
- }
+ if (m_pFontFile)
+ m_pDocument->MaybePurgeFontFileStreamAcc(std::move(m_pFontFile));
}
bool CPDF_Font::IsType1Font() const {
@@ -209,13 +206,12 @@
return;
const uint64_t key = pFontFile->KeyForCache();
- auto* pData = m_pDocument->GetPageData();
- m_pFontFile = pData->GetFontFileStreamAcc(std::move(pFontFile));
+ m_pFontFile = m_pDocument->GetFontFileStreamAcc(std::move(pFontFile));
if (!m_pFontFile)
return;
if (!m_Font.LoadEmbedded(m_pFontFile->GetSpan(), IsVertWriting(), key))
- pData->MaybePurgeFontFileStreamAcc(std::move(m_pFontFile));
+ m_pDocument->MaybePurgeFontFileStreamAcc(std::move(m_pFontFile));
}
void CPDF_Font::CheckFontMetrics() {
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 195a0fb..fad0688 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -17,6 +17,7 @@
#include "core/fpdfapi/parser/cpdf_read_validator.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
+#include "core/fpdfapi/parser/cpdf_stream_acc.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fxcodec/jbig2/JBig2_DocumentContext.h"
#include "core/fxcrt/fx_codepage.h"
@@ -388,6 +389,17 @@
return m_pExtension ? m_pExtension->GetUserPermissions() : 0;
}
+RetainPtr<CPDF_StreamAcc> CPDF_Document::GetFontFileStreamAcc(
+ RetainPtr<const CPDF_Stream> pFontStream) {
+ return m_pDocPage->GetFontFileStreamAcc(std::move(pFontStream));
+}
+
+void CPDF_Document::MaybePurgeFontFileStreamAcc(
+ RetainPtr<CPDF_StreamAcc>&& pStreamAcc) {
+ if (m_pDocPage)
+ m_pDocPage->MaybePurgeFontFileStreamAcc(std::move(pStreamAcc));
+}
+
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 f8063b6..ddae290 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -106,6 +106,11 @@
int GetPageIndex(uint32_t objnum);
uint32_t GetUserPermissions() const;
+ // PageDataIface wrappers, try to avoid explicit getter calls.
+ RetainPtr<CPDF_StreamAcc> GetFontFileStreamAcc(
+ RetainPtr<const CPDF_Stream> pFontStream);
+ void MaybePurgeFontFileStreamAcc(RetainPtr<CPDF_StreamAcc>&& pStreamAcc);
+
// Returns a valid pointer, unless it is called during destruction.
PageDataIface* GetPageData() const { return m_pDocPage.get(); }
RenderDataIface* GetRenderData() const { return m_pDocRender.get(); }