Remove GetXFAPageList().
There's no need to hand out a pointer to a vector in the middle
of an object when we only need to be able to index into it.
-- Rename existing GetXFAPage() to GetOrCreateXFAPage().
-- Then introduce GetXFAPage() that only gets.
-- Rename one variable to get for loop on one line, just because.
Change-Id: Ie7ddf2f8cd061778e164ac078fcbb7bd8af8fd71
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76971
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Hui Yingst <nigi@chromium.org>
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 0d8f687..2883eca 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -357,8 +357,10 @@
#ifdef PDF_ENABLE_XFA
auto* pContext = static_cast<CPDFXFA_Context*>(pDoc->GetExtension());
- if (pContext)
- return FPDFPageFromIPDFPage(pContext->GetXFAPage(page_index).Leak());
+ if (pContext) {
+ return FPDFPageFromIPDFPage(
+ pContext->GetOrCreateXFAPage(page_index).Leak());
+ }
#endif // PDF_ENABLE_XFA
CPDF_Dictionary* pDict = pDoc->GetPageDictionary(page_index);
@@ -901,7 +903,7 @@
auto* pContext = static_cast<CPDFXFA_Context*>(pDoc->GetExtension());
if (pContext) {
- RetainPtr<CPDFXFA_Page> pPage = pContext->GetXFAPage(page_index);
+ RetainPtr<CPDFXFA_Page> pPage = pContext->GetOrCreateXFAPage(page_index);
if (!pPage)
return false;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 3af1a91..469f6d6 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -207,7 +207,7 @@
return 0;
}
-RetainPtr<CPDFXFA_Page> CPDFXFA_Context::GetXFAPage(int page_index) {
+RetainPtr<CPDFXFA_Page> CPDFXFA_Context::GetOrCreateXFAPage(int page_index) {
if (page_index < 0)
return nullptr;
@@ -229,6 +229,13 @@
return pPage;
}
+RetainPtr<CPDFXFA_Page> CPDFXFA_Context::GetXFAPage(int page_index) {
+ if (!pdfium::IndexInBounds(m_XFAPageList, page_index))
+ return nullptr;
+
+ return m_XFAPageList[page_index];
+}
+
RetainPtr<CPDFXFA_Page> CPDFXFA_Context::GetXFAPage(
CXFA_FFPageView* pPage) const {
if (!pPage)
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index 389ba79..7d45c1f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -58,11 +58,9 @@
return m_pFormFillEnv.Get();
}
void SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv);
+ RetainPtr<CPDFXFA_Page> GetOrCreateXFAPage(int page_index);
RetainPtr<CPDFXFA_Page> GetXFAPage(int page_index);
RetainPtr<CPDFXFA_Page> GetXFAPage(CXFA_FFPageView* pPage) const;
- std::vector<RetainPtr<CPDFXFA_Page>>* GetXFAPageList() {
- return &m_XFAPageList;
- }
void ClearChangeMark();
// CPDF_Document::Extension:
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 8a2c576..e6a599c 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -288,14 +288,13 @@
if (!pXFADocView)
return;
- for (int iPageIter = 0; iPageIter < m_pContext->GetOriginalPageCount();
- iPageIter++) {
- RetainPtr<CPDFXFA_Page> pPage = (*m_pContext->GetXFAPageList())[iPageIter];
+ for (int i = 0; i < m_pContext->GetOriginalPageCount(); ++i) {
+ RetainPtr<CPDFXFA_Page> pPage = m_pContext->GetXFAPage(i);
if (!pPage)
continue;
m_pContext->GetFormFillEnv()->RemovePageView(pPage.Get());
- pPage->SetXFAPageViewIndex(iPageIter);
+ pPage->SetXFAPageViewIndex(i);
}
int flag = (nNewCount < m_pContext->GetOriginalPageCount())