Make CXFA_ItemLayoutProcessor::m_pPageMgr an UnownedPtr<>.
Then re-order members in CXFA_LayoutProcessor to preserve invariant.
Change-Id: I6c9aadd4a16d0c2378b017739635aa7e1866fc81
Reviewed-on: https://pdfium-review.googlesource.com/c/47830
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
index 189e4c4..db24066 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
@@ -1135,7 +1135,7 @@
continue;
auto pProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>(
- m_pCurChildNode, m_pPageMgr);
+ m_pCurChildNode, m_pPageMgr.Get());
if (pContext && pContext->m_prgSpecifiedColumnWidths) {
int32_t iColSpan =
m_pCurChildNode->JSObject()->GetInteger(XFA_Attribute::ColSpan);
@@ -1273,7 +1273,7 @@
continue;
auto pProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>(
- m_pCurChildNode, m_pPageMgr);
+ m_pCurChildNode, m_pPageMgr.Get());
pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, pLayoutContext);
if (!pProcessor->HasLayoutItem())
continue;
@@ -1887,7 +1887,7 @@
} else if (m_pPageMgr && m_pPageMgr->ProcessBookendLeaderOrTrailer(
m_pCurChildNode, true, pLeaderNode)) {
pProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>(
- pLeaderNode, m_pPageMgr);
+ pLeaderNode, m_pPageMgr.Get());
}
if (pProcessor) {
@@ -1915,7 +1915,7 @@
} else if (m_pPageMgr && m_pPageMgr->ProcessBookendLeaderOrTrailer(
m_pCurChildNode, false, pTrailerNode)) {
pProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>(
- pTrailerNode, m_pPageMgr);
+ pTrailerNode, m_pPageMgr.Get());
}
if (pProcessor) {
if (InsertFlowedItem(pProcessor.get(), bContainerWidthAutoSize,
@@ -1953,7 +1953,7 @@
bNewRow = true;
} else {
pProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>(
- m_pCurChildNode, m_pPageMgr);
+ m_pCurChildNode, m_pPageMgr.Get());
}
pProcessor->InsertPendingItems(m_pCurChildNode);
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
index bb86110..4eea23e 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.h
@@ -14,6 +14,7 @@
#include <vector>
#include "core/fxcrt/fx_coordinates.h"
+#include "core/fxcrt/unowned_ptr.h"
#include "xfa/fxfa/fxfa_basic.h"
constexpr float kXFALayoutPrecision = 0.0005f;
@@ -166,7 +167,7 @@
CXFA_ContentLayoutItem* m_pLayoutItem = nullptr;
CXFA_Node* m_pCurChildNode = nullptr;
float m_fUsedSize = 0;
- CXFA_LayoutPageMgr* m_pPageMgr;
+ UnownedPtr<CXFA_LayoutPageMgr> m_pPageMgr;
std::list<CXFA_Node*> m_PendingNodes;
bool m_bBreakPending = true;
std::vector<float> m_rgSpecifiedColumnWidths;
diff --git a/xfa/fxfa/parser/cxfa_layoutprocessor.h b/xfa/fxfa/parser/cxfa_layoutprocessor.h
index bba4357..b5b831e 100644
--- a/xfa/fxfa/parser/cxfa_layoutprocessor.h
+++ b/xfa/fxfa/parser/cxfa_layoutprocessor.h
@@ -46,8 +46,8 @@
bool IsNeedLayout();
UnownedPtr<CXFA_Document> const m_pDocument;
- std::unique_ptr<CXFA_ItemLayoutProcessor> m_pRootItemLayoutProcessor;
std::unique_ptr<CXFA_LayoutPageMgr> m_pLayoutPageMgr;
+ std::unique_ptr<CXFA_ItemLayoutProcessor> m_pRootItemLayoutProcessor;
std::vector<CXFA_Node*> m_rgChangedContainers;
uint32_t m_nProgressCounter;
bool m_bNeedLayout;