Encapsulate |CXFA_Document::m_pPendingPageSet|.
Also fix some nits in the caller.
Change-Id: I0584e420cf7547089a8030a8bb6f47c5f523729b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73152
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
index ae3ef5a..349d486 100644
--- a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
@@ -1673,7 +1673,7 @@
auto* pDocLayout = CXFA_LayoutProcessor::FromDocument(pDocument);
CXFA_ViewLayoutItem* pRootLayout = GetRootLayoutItem();
- int32_t iIndex = 0;
+ size_t pending_index = 0;
for (; pRootLayout;
pRootLayout = ToViewLayoutItem(pRootLayout->GetNextSibling())) {
CXFA_Node* pPendingPageSet = nullptr;
@@ -1681,10 +1681,9 @@
CXFA_ViewLayoutItem* pRootPageSetViewItem = iterator.GetCurrent();
ASSERT(pRootPageSetViewItem->GetFormNode()->GetElementType() ==
XFA_Element::PageSet);
- if (iIndex <
- pdfium::CollectionSize<int32_t>(pDocument->m_pPendingPageSet)) {
- pPendingPageSet = pDocument->m_pPendingPageSet[iIndex];
- iIndex++;
+ if (pending_index < pDocument->GetPendingNodesCount()) {
+ pPendingPageSet = pDocument->GetPendingNodeAtIndex(pending_index);
+ ++pending_index;
}
if (!pPendingPageSet) {
if (pRootPageSetViewItem->GetFormNode()->GetPacketType() ==
@@ -1928,8 +1927,10 @@
CXFA_ViewLayoutItem* pRootLayoutItem = m_pPageSetRootLayoutItem;
if (pRootLayoutItem &&
pRootLayoutItem->GetFormNode()->GetPacketType() == XFA_PacketType::Form) {
+ CXFA_Document* const pRootDocument =
+ pRootLayoutItem->GetFormNode()->GetDocument();
CXFA_Node* pPageSetFormNode = pRootLayoutItem->GetFormNode();
- pRootLayoutItem->GetFormNode()->GetDocument()->m_pPendingPageSet.clear();
+ pRootDocument->ClearPendingNodes();
if (pPageSetFormNode->HasRemovedChildren()) {
XFA_ReleaseLayoutItem(pRootLayoutItem);
m_pPageSetRootLayoutItem = nullptr;
@@ -1943,9 +1944,7 @@
XFA_Element::PageSet);
pPageSetFormNode->GetParent()->RemoveChildAndNotify(pPageSetFormNode,
false);
- pRootLayoutItem->GetFormNode()
- ->GetDocument()
- ->m_pPendingPageSet.push_back(pPageSetFormNode);
+ pRootDocument->AppendPendingNode(pPageSetFormNode);
pPageSetFormNode = pNextPageSet;
}
}
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index ff18694..e6e20fe 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -1838,6 +1838,22 @@
m_rgGlobalBinding[dwNameHash] = pDataNode;
}
+size_t CXFA_Document::GetPendingNodesCount() const {
+ return m_pPendingPageSet.size();
+}
+
+CXFA_Node* CXFA_Document::GetPendingNodeAtIndex(size_t index) const {
+ return m_pPendingPageSet[index];
+}
+
+void CXFA_Document::AppendPendingNode(CXFA_Node* node) {
+ m_pPendingPageSet.push_back(node);
+}
+
+void CXFA_Document::ClearPendingNodes() {
+ m_pPendingPageSet.clear();
+}
+
void CXFA_Document::SetPendingNodesUnusedAndUnbound() {
for (CXFA_Node* pPageNode : m_pPendingPageSet) {
CXFA_NodeIterator sIterator(pPageNode);
diff --git a/xfa/fxfa/parser/cxfa_document.h b/xfa/fxfa/parser/cxfa_document.h
index 1cfe70e..bdc08cc 100644
--- a/xfa/fxfa/parser/cxfa_document.h
+++ b/xfa/fxfa/parser/cxfa_document.h
@@ -132,9 +132,12 @@
CXFA_Node* GetGlobalBinding(uint32_t dwNameHash);
void RegisterGlobalBinding(uint32_t dwNameHash, CXFA_Node* pDataNode);
- void SetPendingNodesUnusedAndUnbound();
- std::vector<CXFA_Node*> m_pPendingPageSet;
+ size_t GetPendingNodesCount() const;
+ CXFA_Node* GetPendingNodeAtIndex(size_t index) const;
+ void AppendPendingNode(CXFA_Node* node);
+ void ClearPendingNodes();
+ void SetPendingNodesUnusedAndUnbound();
private:
CXFA_Document(CXFA_FFNotify* notify,
@@ -155,6 +158,7 @@
cppgc::Member<CScript_LogPseudoModel> m_pScriptLog;
cppgc::Member<CScript_LayoutPseudoModel> m_pScriptLayout;
cppgc::Member<CScript_SignaturePseudoModel> m_pScriptSignature;
+ std::vector<CXFA_Node*> m_pPendingPageSet;
XFA_VERSION m_eCurVersionMode = XFA_VERSION_DEFAULT;
Optional<bool> m_Interactive;
bool m_bStrictScoping = false;