Use UnownedPtr<CXFA_Node> or comment raw pointers as tree nodes.

Part 2.

Change-Id: I26fe434dac3c3f5186414440acc2a495a5f14091
Reviewed-on: https://pdfium-review.googlesource.com/36670
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index e448aea..4918349 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -222,27 +222,27 @@
 
   std::vector<CXFA_Node*> retArray;
   if (wsType == L"pageArea") {
-    if (pLayoutPage->m_pFormNode)
-      retArray.push_back(pLayoutPage->m_pFormNode);
+    if (pLayoutPage->GetFormNode())
+      retArray.push_back(pLayoutPage->GetFormNode());
     return retArray;
   }
   if (wsType == L"contentArea") {
     for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
          pItem = pItem->m_pNextSibling) {
-      if (pItem->m_pFormNode->GetElementType() == XFA_Element::ContentArea)
-        retArray.push_back(pItem->m_pFormNode);
+      if (pItem->GetFormNode()->GetElementType() == XFA_Element::ContentArea)
+        retArray.push_back(pItem->GetFormNode());
     }
     return retArray;
   }
   std::set<CXFA_Node*> formItems;
   if (wsType.IsEmpty()) {
-    if (pLayoutPage->m_pFormNode)
-      retArray.push_back(pLayoutPage->m_pFormNode);
+    if (pLayoutPage->GetFormNode())
+      retArray.push_back(pLayoutPage->GetFormNode());
 
     for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
          pItem = pItem->m_pNextSibling) {
-      if (pItem->m_pFormNode->GetElementType() == XFA_Element::ContentArea) {
-        retArray.push_back(pItem->m_pFormNode);
+      if (pItem->GetFormNode()->GetElementType() == XFA_Element::ContentArea) {
+        retArray.push_back(pItem->GetFormNode());
         if (!bOnPageArea) {
           CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
                                     CXFA_TraverseStrategy_ContentLayoutItem>
@@ -252,16 +252,16 @@
             if (!pItemChild->IsContentLayoutItem()) {
               continue;
             }
-            XFA_Element eType = pItemChild->m_pFormNode->GetElementType();
+            XFA_Element eType = pItemChild->GetFormNode()->GetElementType();
             if (eType != XFA_Element::Field && eType != XFA_Element::Draw &&
                 eType != XFA_Element::Subform && eType != XFA_Element::Area) {
               continue;
             }
-            if (pdfium::ContainsValue(formItems, pItemChild->m_pFormNode))
+            if (pdfium::ContainsValue(formItems, pItemChild->GetFormNode()))
               continue;
 
-            formItems.insert(pItemChild->m_pFormNode);
-            retArray.push_back(pItemChild->m_pFormNode);
+            formItems.insert(pItemChild->GetFormNode());
+            retArray.push_back(pItemChild->GetFormNode());
           }
         }
       } else {
@@ -274,15 +274,15 @@
             if (!pItemChild->IsContentLayoutItem()) {
               continue;
             }
-            XFA_Element eType = pItemChild->m_pFormNode->GetElementType();
+            XFA_Element eType = pItemChild->GetFormNode()->GetElementType();
             if (eType != XFA_Element::Field && eType != XFA_Element::Draw &&
                 eType != XFA_Element::Subform && eType != XFA_Element::Area) {
               continue;
             }
-            if (pdfium::ContainsValue(formItems, pItemChild->m_pFormNode))
+            if (pdfium::ContainsValue(formItems, pItemChild->GetFormNode()))
               continue;
-            formItems.insert(pItemChild->m_pFormNode);
-            retArray.push_back(pItemChild->m_pFormNode);
+            formItems.insert(pItemChild->GetFormNode());
+            retArray.push_back(pItemChild->GetFormNode());
           }
         }
       }
@@ -303,7 +303,7 @@
   if (eType != XFA_Element::Unknown) {
     for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
          pItem = pItem->m_pNextSibling) {
-      if (pItem->m_pFormNode->GetElementType() == XFA_Element::ContentArea) {
+      if (pItem->GetFormNode()->GetElementType() == XFA_Element::ContentArea) {
         if (!bOnPageArea) {
           CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
                                     CXFA_TraverseStrategy_ContentLayoutItem>
@@ -312,13 +312,13 @@
                pItemChild; pItemChild = iterator.MoveToNext()) {
             if (!pItemChild->IsContentLayoutItem())
               continue;
-            if (pItemChild->m_pFormNode->GetElementType() != eType)
+            if (pItemChild->GetFormNode()->GetElementType() != eType)
               continue;
-            if (pdfium::ContainsValue(formItems, pItemChild->m_pFormNode))
+            if (pdfium::ContainsValue(formItems, pItemChild->GetFormNode()))
               continue;
 
-            formItems.insert(pItemChild->m_pFormNode);
-            retArray.push_back(pItemChild->m_pFormNode);
+            formItems.insert(pItemChild->GetFormNode());
+            retArray.push_back(pItemChild->GetFormNode());
           }
         }
       } else {
@@ -330,13 +330,13 @@
                pItemChild; pItemChild = iterator.MoveToNext()) {
             if (!pItemChild->IsContentLayoutItem())
               continue;
-            if (pItemChild->m_pFormNode->GetElementType() != eType)
+            if (pItemChild->GetFormNode()->GetElementType() != eType)
               continue;
-            if (pdfium::ContainsValue(formItems, pItemChild->m_pFormNode))
+            if (pdfium::ContainsValue(formItems, pItemChild->GetFormNode()))
               continue;
 
-            formItems.insert(pItemChild->m_pFormNode);
-            retArray.push_back(pItemChild->m_pFormNode);
+            formItems.insert(pItemChild->GetFormNode());
+            retArray.push_back(pItemChild->GetFormNode());
           }
         }
       }
diff --git a/xfa/fxfa/cxfa_textprovider.h b/xfa/fxfa/cxfa_textprovider.h
index 7746dc7..8c69227 100644
--- a/xfa/fxfa/cxfa_textprovider.h
+++ b/xfa/fxfa/cxfa_textprovider.h
@@ -40,7 +40,7 @@
                     WideString& wsValue);
 
  private:
-  CXFA_Node* m_pNode;
+  CXFA_Node* m_pNode;  // Raw, this class owned by tree node.
   XFA_TEXTPROVIDERTYPE m_eType;
 };
 
diff --git a/xfa/fxfa/parser/cxfa_attachnodelist.cpp b/xfa/fxfa/parser/cxfa_attachnodelist.cpp
index 4e6a678..e7d4c1d 100644
--- a/xfa/fxfa/parser/cxfa_attachnodelist.cpp
+++ b/xfa/fxfa/parser/cxfa_attachnodelist.cpp
@@ -11,9 +11,9 @@
 
 CXFA_AttachNodeList::CXFA_AttachNodeList(CXFA_Document* pDocument,
                                          CXFA_Node* pAttachNode)
-    : CXFA_TreeList(pDocument) {
-  m_pAttachNode = pAttachNode;
-}
+    : CXFA_TreeList(pDocument), m_pAttachNode(pAttachNode) {}
+
+CXFA_AttachNodeList::~CXFA_AttachNodeList() = default;
 
 size_t CXFA_AttachNodeList::GetLength() {
   return m_pAttachNode->CountChildren(
diff --git a/xfa/fxfa/parser/cxfa_attachnodelist.h b/xfa/fxfa/parser/cxfa_attachnodelist.h
index cb41b73..f4cebe4 100644
--- a/xfa/fxfa/parser/cxfa_attachnodelist.h
+++ b/xfa/fxfa/parser/cxfa_attachnodelist.h
@@ -15,6 +15,7 @@
 class CXFA_AttachNodeList : public CXFA_TreeList {
  public:
   CXFA_AttachNodeList(CXFA_Document* pDocument, CXFA_Node* pAttachNode);
+  ~CXFA_AttachNodeList() override;
 
   // From CXFA_TreeList.
   size_t GetLength() override;
@@ -24,7 +25,7 @@
   CXFA_Node* Item(size_t iIndex) override;
 
  private:
-  CXFA_Node* m_pAttachNode;
+  UnownedPtr<CXFA_Node> const m_pAttachNode;
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_ATTACHNODELIST_H_
diff --git a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
index ee122b6..47da2b1 100644
--- a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
@@ -14,7 +14,9 @@
 #include "xfa/fxfa/parser/cxfa_node.h"
 
 CXFA_ContainerLayoutItem::CXFA_ContainerLayoutItem(CXFA_Node* pNode)
-    : CXFA_LayoutItem(pNode, false), m_pOldSubform(nullptr) {}
+    : CXFA_LayoutItem(pNode, false) {}
+
+CXFA_ContainerLayoutItem::~CXFA_ContainerLayoutItem() = default;
 
 CXFA_LayoutProcessor* CXFA_ContainerLayoutItem::GetLayout() const {
   return m_pFormNode->GetDocument()->GetLayoutProcessor();
@@ -48,5 +50,5 @@
 }
 
 CXFA_Node* CXFA_ContainerLayoutItem::GetMasterPage() const {
-  return m_pFormNode;
+  return m_pFormNode.Get();
 }
diff --git a/xfa/fxfa/parser/cxfa_containerlayoutitem.h b/xfa/fxfa/parser/cxfa_containerlayoutitem.h
index 3c8a8af..4a02333 100644
--- a/xfa/fxfa/parser/cxfa_containerlayoutitem.h
+++ b/xfa/fxfa/parser/cxfa_containerlayoutitem.h
@@ -12,13 +12,14 @@
 class CXFA_ContainerLayoutItem : public CXFA_LayoutItem {
  public:
   explicit CXFA_ContainerLayoutItem(CXFA_Node* pNode);
+  ~CXFA_ContainerLayoutItem() override;
 
   CXFA_LayoutProcessor* GetLayout() const;
   int32_t GetPageIndex() const;
   CFX_SizeF GetPageSize() const;
   CXFA_Node* GetMasterPage() const;
 
-  CXFA_Node* m_pOldSubform;
+  UnownedPtr<CXFA_Node> m_pOldSubform;
 };
 
 inline CXFA_ContainerLayoutItem* ToContainerLayoutItem(CXFA_LayoutItem* pItem) {
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
index f4f1ceb..2dfa956 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
@@ -62,7 +62,7 @@
 void UpdateWidgetSize(CXFA_ContentLayoutItem* pLayoutItem,
                       float* pWidth,
                       float* pHeight) {
-  CXFA_Node* pNode = pLayoutItem->m_pFormNode;
+  CXFA_Node* pNode = pLayoutItem->GetFormNode();
   switch (pNode->GetElementType()) {
     case XFA_Element::Subform:
     case XFA_Element::Area:
@@ -177,10 +177,10 @@
   bool bContainerWidthAutoSize = true;
   bool bContainerHeightAutoSize = true;
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
-      pLayoutRow->m_pFormNode, &bContainerWidthAutoSize,
+      pLayoutRow->GetFormNode(), &bContainerWidthAutoSize,
       &bContainerHeightAutoSize);
   CXFA_Margin* pMarginNode =
-      pLayoutRow->m_pFormNode->GetFirstChildByClass<CXFA_Margin>(
+      pLayoutRow->GetFormNode()->GetFirstChildByClass<CXFA_Margin>(
           XFA_Element::Margin);
   float fLeftInset = 0;
   float fTopInset = 0;
@@ -217,7 +217,7 @@
        pLayoutChild; pLayoutChild = static_cast<CXFA_ContentLayoutItem*>(
                          pLayoutChild->m_pNextSibling)) {
     int32_t nOriginalColSpan =
-        pLayoutChild->m_pFormNode->JSObject()->GetInteger(
+        pLayoutChild->GetFormNode()->JSObject()->GetInteger(
             XFA_Attribute::ColSpan);
     int32_t nColSpan = nOriginalColSpan;
     float fColSpanWidth = 0;
@@ -240,7 +240,7 @@
 
     pLayoutChild->m_sPos = CFX_PointF(fCurrentColX, 0);
     pLayoutChild->m_sSize.width = fColSpanWidth;
-    if (!pLayoutChild->m_pFormNode->PresenceRequiresSpace())
+    if (!pLayoutChild->GetFormNode()->PresenceRequiresSpace())
       continue;
 
     fCurrentColX += fColSpanWidth;
@@ -263,7 +263,7 @@
       float fOldChildHeight = pLayoutChild->m_sSize.height;
       pLayoutChild->m_sSize.height = fContentCalculatedHeight;
       CXFA_Para* pParaNode =
-          pLayoutChild->m_pFormNode->GetFirstChildByClass<CXFA_Para>(
+          pLayoutChild->GetFormNode()->GetFirstChildByClass<CXFA_Para>(
               XFA_Element::Para);
       if (pParaNode && pLayoutChild->m_pFirstChild) {
         float fOffHeight = fContentCalculatedHeight - fOldChildHeight;
@@ -303,7 +303,7 @@
     fContentCalculatedWidth = containerSize.width - fLeftInset - fRightInset;
   }
 
-  if (pLayoutRow->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout) ==
+  if (pLayoutRow->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout) ==
       XFA_AttributeEnum::Rl_row) {
     for (CXFA_LayoutItem* pIter = pLayoutRow->m_pFirstChild; pIter;
          pIter = pIter->m_pNextSibling) {
@@ -314,8 +314,9 @@
     }
   }
   pLayoutRow->m_sSize = CalculateContainerComponentSizeFromContentSize(
-      pLayoutRow->m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
-      bContainerHeightAutoSize, fContentCalculatedHeight, containerSize);
+      pLayoutRow->GetFormNode(), bContainerWidthAutoSize,
+      fContentCalculatedWidth, bContainerHeightAutoSize,
+      fContentCalculatedHeight, containerSize);
 }
 
 XFA_AttributeEnum GetLayout(CXFA_Node* pFormNode, bool* bRootForceTb) {
@@ -465,7 +466,7 @@
                             float* fProposedSplitPos,
                             bool* bAppChange,
                             bool bCalculateMargin) {
-  CXFA_Node* pFormNode = pLayoutItem->m_pFormNode;
+  CXFA_Node* pFormNode = pLayoutItem->GetFormNode();
   if (*fProposedSplitPos <= fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION ||
       *fProposedSplitPos > fCurVerticalOffset + pLayoutItem->m_sSize.height -
                                XFA_LAYOUT_FLOAT_PERCISION) {
@@ -619,10 +620,11 @@
 CXFA_ItemLayoutProcessor::CXFA_ItemLayoutProcessor(CXFA_Node* pNode,
                                                    CXFA_LayoutPageMgr* pPageMgr)
     : m_pFormNode(pNode), m_pPageMgr(pPageMgr) {
-  ASSERT(m_pFormNode && (m_pFormNode->IsContainerNode() ||
-                         m_pFormNode->GetElementType() == XFA_Element::Form));
+  ASSERT(GetFormNode());
+  ASSERT(GetFormNode()->IsContainerNode() ||
+         GetFormNode()->GetElementType() == XFA_Element::Form);
   m_pOldLayoutItem = static_cast<CXFA_ContentLayoutItem*>(
-      m_pFormNode->JSObject()->GetLayoutItem());
+      GetFormNode()->JSObject()->GetLayoutItem());
 }
 
 CXFA_ItemLayoutProcessor::~CXFA_ItemLayoutProcessor() {}
@@ -658,7 +660,8 @@
 
 float CXFA_ItemLayoutProcessor::FindSplitPos(float fProposedSplitPos) {
   ASSERT(m_pLayoutItem);
-  XFA_AttributeEnum eLayout = m_pFormNode->JSObject()
+  XFA_AttributeEnum eLayout = GetFormNode()
+                                  ->JSObject()
                                   ->TryEnum(XFA_Attribute::Layout, true)
                                   .value_or(XFA_AttributeEnum::Position);
   bool bCalculateMargin = eLayout != XFA_AttributeEnum::Position;
@@ -677,7 +680,8 @@
     CXFA_ContentLayoutItem* pSecondParent,
     float fSplitPos) {
   float fCurTopMargin = 0, fCurBottomMargin = 0;
-  XFA_AttributeEnum eLayout = m_pFormNode->JSObject()
+  XFA_AttributeEnum eLayout = GetFormNode()
+                                  ->JSObject()
                                   ->TryEnum(XFA_Attribute::Layout, true)
                                   .value_or(XFA_AttributeEnum::Position);
   bool bCalculateMargin = true;
@@ -685,7 +689,7 @@
     bCalculateMargin = false;
 
   CXFA_Margin* pMarginNode =
-      pLayoutItem->m_pFormNode->GetFirstChildByClass<CXFA_Margin>(
+      pLayoutItem->GetFormNode()->GetFirstChildByClass<CXFA_Margin>(
           XFA_Element::Margin);
   if (pMarginNode && bCalculateMargin) {
     fCurTopMargin = pMarginNode->JSObject()
@@ -698,11 +702,11 @@
 
   CXFA_ContentLayoutItem* pSecondLayoutItem = nullptr;
   if (m_pCurChildPreprocessor &&
-      m_pCurChildPreprocessor->m_pFormNode == pLayoutItem->m_pFormNode) {
+      m_pCurChildPreprocessor->GetFormNode() == pLayoutItem->GetFormNode()) {
     pSecondLayoutItem = m_pCurChildPreprocessor->CreateContentLayoutItem(
-        pLayoutItem->m_pFormNode);
+        pLayoutItem->GetFormNode());
   } else {
-    pSecondLayoutItem = CreateContentLayoutItem(pLayoutItem->m_pFormNode);
+    pSecondLayoutItem = CreateContentLayoutItem(pLayoutItem->GetFormNode());
   }
   pSecondLayoutItem->m_sPos.x = pLayoutItem->m_sPos.x;
   pSecondLayoutItem->m_sSize.width = pLayoutItem->m_sSize.width;
@@ -742,7 +746,7 @@
     pChildItem->m_pNextSibling = nullptr;
     if (fSplitPos <= fCurTopMargin + pChildItem->m_sPos.y + fCurBottomMargin +
                          XFA_LAYOUT_FLOAT_PERCISION) {
-      if (!ExistContainerKeep(pChildItem->m_pFormNode, true)) {
+      if (!ExistContainerKeep(pChildItem->GetFormNode(), true)) {
         pChildItem->m_sPos.y -= fSplitPos - fCurBottomMargin;
         pChildItem->m_sPos.y += lHeightForKeep;
         pChildItem->m_sPos.y += fAddMarginHeight;
@@ -775,7 +779,7 @@
         fCurTopMargin + fCurBottomMargin + pChildItem->m_sPos.y +
             pChildItem->m_sSize.height) {
       pLayoutItem->AddChild(pChildItem);
-      if (ExistContainerKeep(pChildItem->m_pFormNode, false))
+      if (ExistContainerKeep(pChildItem->GetFormNode(), false))
         keepLayoutItems.push_back(pChildItem);
       else
         keepLayoutItems.clear();
@@ -813,9 +817,9 @@
     m_pOldLayoutItem->m_pPrev->m_pNext = nullptr;
 
   CXFA_FFNotify* pNotify =
-      m_pOldLayoutItem->m_pFormNode->GetDocument()->GetNotify();
+      m_pOldLayoutItem->GetFormNode()->GetDocument()->GetNotify();
   CXFA_LayoutProcessor* pDocLayout =
-      m_pOldLayoutItem->m_pFormNode->GetDocument()->GetLayoutProcessor();
+      m_pOldLayoutItem->GetFormNode()->GetDocument()->GetLayoutProcessor();
   CXFA_ContentLayoutItem* pOldLayoutItem = m_pOldLayoutItem;
   while (pOldLayoutItem) {
     CXFA_ContentLayoutItem* pNextOldLayoutItem = pOldLayoutItem->m_pNext;
@@ -1044,7 +1048,7 @@
 
 void CXFA_ItemLayoutProcessor::DoLayoutPageArea(
     CXFA_ContainerLayoutItem* pPageAreaLayoutItem) {
-  CXFA_Node* pFormNode = pPageAreaLayoutItem->m_pFormNode;
+  CXFA_Node* pFormNode = pPageAreaLayoutItem->GetFormNode();
   CXFA_Node* pCurChildNode = XFA_LAYOUT_INVALIDNODE;
   XFA_ItemLayoutProcessorStages nCurChildNodeStage =
       XFA_ItemLayoutProcessorStages::None;
@@ -1079,11 +1083,11 @@
   CXFA_LayoutItem* pLayoutItem = pPageAreaLayoutItem->m_pFirstChild;
   while (pLayoutItem) {
     if (!pLayoutItem->IsContentLayoutItem() ||
-        pLayoutItem->m_pFormNode->GetElementType() != XFA_Element::Draw) {
+        pLayoutItem->GetFormNode()->GetElementType() != XFA_Element::Draw) {
       pLayoutItem = pLayoutItem->m_pNextSibling;
       continue;
     }
-    if (pLayoutItem->m_pFormNode->GetElementType() != XFA_Element::Draw)
+    if (pLayoutItem->GetFormNode()->GetElementType() != XFA_Element::Draw)
       continue;
 
     CXFA_LayoutItem* pNextLayoutItem = pLayoutItem->m_pNextSibling;
@@ -1103,28 +1107,29 @@
   if (m_pLayoutItem)
     return;
 
-  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
-  bool bIgnoreXY = (m_pFormNode->JSObject()
+  m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
+  bool bIgnoreXY = (GetFormNode()
+                        ->JSObject()
                         ->TryEnum(XFA_Attribute::Layout, true)
                         .value_or(XFA_AttributeEnum::Position) !=
                     XFA_AttributeEnum::Position);
   bool bContainerWidthAutoSize = true;
   bool bContainerHeightAutoSize = true;
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
-      m_pFormNode, &bContainerWidthAutoSize, &bContainerHeightAutoSize);
+      GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize);
 
   float fContentCalculatedWidth = 0;
   float fContentCalculatedHeight = 0;
   float fHiddenContentCalculatedWidth = 0;
   float fHiddenContentCalculatedHeight = 0;
   if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) {
-    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode,
+    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(),
                           false);
   }
 
   int32_t iColIndex = 0;
   for (; m_pCurChildNode; GotoNextContainerNode(
-           m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode, false)) {
+           m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(), false)) {
     if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages::Container)
       continue;
     if (m_pCurChildNode->GetElementType() == XFA_Element::Variables)
@@ -1197,14 +1202,14 @@
     m_pLayoutItem->AddChild(pProcessor->ExtractLayoutItem());
   }
 
-  XFA_VERSION eVersion = m_pFormNode->GetDocument()->GetCurVersionMode();
+  XFA_VERSION eVersion = GetFormNode()->GetDocument()->GetCurVersionMode();
   if (fContentCalculatedWidth == 0 && eVersion < XFA_VERSION_207)
     fContentCalculatedWidth = fHiddenContentCalculatedWidth;
   if (fContentCalculatedHeight == 0 && eVersion < XFA_VERSION_207)
     fContentCalculatedHeight = fHiddenContentCalculatedHeight;
 
   containerSize = CalculateContainerComponentSizeFromContentSize(
-      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
+      GetFormNode(), bContainerWidthAutoSize, fContentCalculatedWidth,
       bContainerHeightAutoSize, fContentCalculatedHeight, containerSize);
   SetCurrentComponentSize(containerSize);
 }
@@ -1213,19 +1218,19 @@
   if (m_pLayoutItem)
     return;
   if (!pLayoutNode)
-    pLayoutNode = m_pFormNode;
+    pLayoutNode = GetFormNode();
 
   ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE);
 
-  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
+  m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
   bool bContainerWidthAutoSize = true;
   bool bContainerHeightAutoSize = true;
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
-      m_pFormNode, &bContainerWidthAutoSize, &bContainerHeightAutoSize);
+      GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize);
   float fContentCalculatedWidth = 0;
   float fContentCalculatedHeight = 0;
   CXFA_Margin* pMarginNode =
-      m_pFormNode->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
+      GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
@@ -1262,12 +1267,12 @@
   CXFA_LayoutContext* pLayoutContext =
       iSpecifiedColumnCount > 0 ? &layoutContext : nullptr;
   if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) {
-    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode,
+    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(),
                           false);
   }
 
   for (; m_pCurChildNode; GotoNextContainerNode(
-           m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode, false)) {
+           m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(), false)) {
     layoutContext.m_bCurColumnWidthAvaiable = false;
     layoutContext.m_fCurColumnWidth = 0;
     if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages::Container)
@@ -1292,13 +1297,14 @@
              static_cast<CXFA_ContentLayoutItem*>(m_pLayoutItem->m_pFirstChild);
          pLayoutChild; pLayoutChild = static_cast<CXFA_ContentLayoutItem*>(
                            pLayoutChild->m_pNextSibling)) {
-      if (pLayoutChild->m_pFormNode->GetElementType() != XFA_Element::Subform)
+      if (pLayoutChild->GetFormNode()->GetElementType() != XFA_Element::Subform)
         continue;
-      if (!pLayoutChild->m_pFormNode->PresenceRequiresSpace())
+      if (!pLayoutChild->GetFormNode()->PresenceRequiresSpace())
         continue;
 
       XFA_AttributeEnum eLayout =
-          pLayoutChild->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
+          pLayoutChild->GetFormNode()->JSObject()->GetEnum(
+              XFA_Attribute::Layout);
       if (eLayout != XFA_AttributeEnum::Row &&
           eLayout != XFA_AttributeEnum::Rl_row) {
         continue;
@@ -1307,8 +1313,9 @@
           static_cast<CXFA_ContentLayoutItem*>(pLayoutChild->m_pFirstChild);
       if (pRowLayoutCell) {
         rgRowItems.push_back(pRowLayoutCell);
-        int32_t iColSpan = pRowLayoutCell->m_pFormNode->JSObject()->GetInteger(
-            XFA_Attribute::ColSpan);
+        int32_t iColSpan =
+            pRowLayoutCell->GetFormNode()->JSObject()->GetInteger(
+                XFA_Attribute::ColSpan);
         rgRowItemsSpan.push_back(iColSpan);
         rgRowItemsWidth.push_back(pRowLayoutCell->m_sSize.width);
       }
@@ -1323,16 +1330,16 @@
       for (int32_t i = 0; i < iRowCount; i++) {
         while (rgRowItems[i] &&
                (rgRowItemsSpan[i] <= 0 ||
-                !rgRowItems[i]->m_pFormNode->PresenceRequiresSpace())) {
+                !rgRowItems[i]->GetFormNode()->PresenceRequiresSpace())) {
           auto* pNewCell = static_cast<CXFA_ContentLayoutItem*>(
               rgRowItems[i]->m_pNextSibling);
           if (rgRowItemsSpan[i] < 0 &&
-              rgRowItems[i]->m_pFormNode->PresenceRequiresSpace()) {
+              rgRowItems[i]->GetFormNode()->PresenceRequiresSpace()) {
             pNewCell = nullptr;
           }
           rgRowItems[i] = pNewCell;
           rgRowItemsSpan[i] =
-              pNewCell ? pNewCell->m_pFormNode->JSObject()->GetInteger(
+              pNewCell ? pNewCell->GetFormNode()->JSObject()->GetInteger(
                              XFA_Attribute::ColSpan)
                        : 0;
           rgRowItemsWidth[i] = pNewCell ? pNewCell->m_sSize.width : 0;
@@ -1381,12 +1388,13 @@
   for (CXFA_LayoutItem* pIter = m_pLayoutItem->m_pFirstChild; pIter;
        pIter = pIter->m_pNextSibling) {
     auto* pLayoutChild = static_cast<CXFA_ContentLayoutItem*>(pIter);
-    if (!pLayoutChild->m_pFormNode->PresenceRequiresSpace())
+    if (!pLayoutChild->GetFormNode()->PresenceRequiresSpace())
       continue;
 
-    if (pLayoutChild->m_pFormNode->GetElementType() == XFA_Element::Subform) {
+    if (pLayoutChild->GetFormNode()->GetElementType() == XFA_Element::Subform) {
       XFA_AttributeEnum eSubformLayout =
-          pLayoutChild->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
+          pLayoutChild->GetFormNode()->JSObject()->GetEnum(
+              XFA_Attribute::Layout);
       if (eSubformLayout == XFA_AttributeEnum::Row ||
           eSubformLayout == XFA_AttributeEnum::Rl_row) {
         RelocateTableRowCells(pLayoutChild, m_rgSpecifiedColumnWidths,
@@ -1398,7 +1406,7 @@
     if (bContainerWidthAutoSize) {
       pLayoutChild->m_sPos.x = 0;
     } else {
-      switch (pLayoutChild->m_pFormNode->JSObject()->GetEnum(
+      switch (pLayoutChild->GetFormNode()->JSObject()->GetEnum(
           XFA_Attribute::HAlign)) {
         case XFA_AttributeEnum::Center:
           pLayoutChild->m_sPos.x =
@@ -1432,7 +1440,7 @@
     fContentCalculatedHeight = std::max(fContentCalculatedHeight, fCurrentRowY);
 
   containerSize = CalculateContainerComponentSizeFromContentSize(
-      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
+      GetFormNode(), bContainerWidthAutoSize, fContentCalculatedWidth,
       bContainerHeightAutoSize, fContentCalculatedHeight, containerSize);
   SetCurrentComponentSize(containerSize);
 }
@@ -1444,7 +1452,7 @@
 
   float fWidth = pTrailerItem->m_sSize.width;
   XFA_AttributeEnum eLayout =
-      m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
+      GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
   return eLayout == XFA_AttributeEnum::Tb || m_fWidthLimite <= fWidth;
 }
 
@@ -1453,7 +1461,7 @@
     return 0;
 
   if (!m_pLayoutItem) {
-    m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
+    m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
     m_pLayoutItem->m_sSize.clear();
   }
 
@@ -1524,7 +1532,7 @@
   for (CXFA_LayoutItem* pIter = pParentLayoutItem->m_pFirstChild; pIter;
        pIter = pIter->m_pNextSibling) {
     auto* pChildLayoutItem = static_cast<CXFA_ContentLayoutItem*>(pIter);
-    if (ExistContainerKeep(pChildLayoutItem->m_pFormNode, false)) {
+    if (ExistContainerKeep(pChildLayoutItem->GetFormNode(), false)) {
       pKeepItems->push_back(pChildLayoutItem);
       fItemsHeight += pChildLayoutItem->m_sSize.height;
     } else {
@@ -1596,7 +1604,7 @@
   }
 
   CFX_SizeF containerSize = CalculateContainerSpecifiedSize(
-      m_pFormNode, &bContainerWidthAutoSize, &bContainerHeightAutoSize);
+      GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize);
   if (pContext && pContext->m_bCurColumnWidthAvaiable) {
     bContainerWidthAutoSize = false;
     containerSize.width = pContext->m_fCurColumnWidth;
@@ -1605,11 +1613,11 @@
     containerSize.height -= m_fUsedSize;
 
   if (!bContainerHeightAutoSize) {
-    CXFA_Node* pParentNode = m_pFormNode->GetParent();
+    CXFA_Node* pParentNode = GetFormNode()->GetParent();
     bool bFocrTb = false;
     if (pParentNode &&
         GetLayout(pParentNode, &bFocrTb) == XFA_AttributeEnum::Row) {
-      CXFA_Node* pChildContainer = m_pFormNode->GetFirstContainerChild();
+      CXFA_Node* pChildContainer = GetFormNode()->GetFirstContainerChild();
       if (pChildContainer && pChildContainer->GetNextContainerSibling()) {
         containerSize.height = 0;
         bContainerHeightAutoSize = true;
@@ -1618,7 +1626,7 @@
   }
 
   CXFA_Margin* pMarginNode =
-      m_pFormNode->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
+      GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
   float fLeftInset = 0;
   float fTopInset = 0;
   float fRightInset = 0;
@@ -1667,7 +1675,7 @@
          pLayoutTempChild != pLayoutChild;
          pLayoutTempChild = static_cast<CXFA_ContentLayoutItem*>(
              pLayoutTempChild->m_pNextSibling)) {
-      if (!pLayoutTempChild->m_pFormNode->PresenceRequiresSpace())
+      if (!pLayoutTempChild->GetFormNode()->PresenceRequiresSpace())
         continue;
 
       fContentCalculatedWidth = std::max(
@@ -1686,11 +1694,11 @@
 
   fContentCurRowY += InsertKeepLayoutItems();
   if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages::None) {
-    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode,
+    GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(),
                           true);
   }
 
-  fContentCurRowY += InsertPendingItems(m_pFormNode);
+  fContentCurRowY += InsertPendingItems(GetFormNode());
   if (m_pCurChildPreprocessor &&
       m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages::Container) {
     if (ExistContainerKeep(m_pCurChildPreprocessor->GetFormNode(), false)) {
@@ -1712,13 +1720,14 @@
            pLayoutNext = static_cast<CXFA_ContentLayoutItem*>(
                pLayoutNext->m_pNextSibling)) {
         if (!pLayoutNext->m_pNextSibling && m_pCurChildPreprocessor &&
-            m_pCurChildPreprocessor->m_pFormNode == pLayoutNext->m_pFormNode) {
+            m_pCurChildPreprocessor->GetFormNode() ==
+                pLayoutNext->GetFormNode()) {
           pLayoutNext->m_pNext = m_pCurChildPreprocessor->m_pLayoutItem;
           m_pCurChildPreprocessor->m_pLayoutItem = pLayoutNext;
           break;
         }
         uint8_t uHAlign =
-            HAlignEnumToInt(pLayoutNext->m_pFormNode->JSObject()->GetEnum(
+            HAlignEnumToInt(pLayoutNext->GetFormNode()->JSObject()->GetEnum(
                 XFA_Attribute::HAlign));
         rgCurLineLayoutItems[uHAlign].push_back(pLayoutNext);
         if (eFlowStrategy == XFA_AttributeEnum::Lr_tb) {
@@ -1727,7 +1736,7 @@
         } else if (uHAlign < uCurHAlignState) {
           uCurHAlignState = uHAlign;
         }
-        if (pLayoutNext->m_pFormNode->PresenceRequiresSpace()) {
+        if (pLayoutNext->GetFormNode()->PresenceRequiresSpace()) {
           if (pLayoutNext->m_sSize.height > fContentCurRowHeight)
             fContentCurRowHeight = pLayoutNext->m_sSize.height;
           fContentCurRowAvailWidth -= pLayoutNext->m_sSize.width;
@@ -1763,7 +1772,7 @@
     while (m_pCurChildNode) {
       std::unique_ptr<CXFA_ItemLayoutProcessor> pProcessor;
       bool bAddedItemInRow = false;
-      fContentCurRowY += InsertPendingItems(m_pFormNode);
+      fContentCurRowY += InsertPendingItems(GetFormNode());
       switch (m_nCurChildNodeStage) {
         case XFA_ItemLayoutProcessorStages::Keep:
         case XFA_ItemLayoutProcessorStages::None:
@@ -1781,7 +1790,7 @@
               !m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, true,
                                                      pLeaderNode, pTrailerNode,
                                                      bCreatePage) ||
-              m_pFormNode->GetElementType() == XFA_Element::Form ||
+              GetFormNode()->GetElementType() == XFA_Element::Form ||
               !bCreatePage) {
             break;
           }
@@ -1790,7 +1799,7 @@
             AddPendingNode(pLeaderNode, true);
 
           if (JudgeLeaderOrTrailerForOccur(pTrailerNode)) {
-            if (m_pFormNode->GetParent()->GetElementType() ==
+            if (GetFormNode()->GetParent()->GetElementType() ==
                     XFA_Element::Form &&
                 !m_pLayoutItem) {
               AddPendingNode(pTrailerNode, true);
@@ -1808,7 +1817,7 @@
             }
           }
           GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage,
-                                m_pFormNode, true);
+                                GetFormNode(), true);
           bForceEndPage = true;
           bIsManualBreak = true;
           goto SuspendAndCreateNewRow;
@@ -1821,7 +1830,7 @@
               !m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, false,
                                                      pLeaderNode, pTrailerNode,
                                                      bCreatePage) ||
-              m_pFormNode->GetElementType() == XFA_Element::Form) {
+              GetFormNode()->GetElementType() == XFA_Element::Form) {
             break;
           }
 
@@ -1861,7 +1870,7 @@
           }
 
           GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage,
-                                m_pFormNode, true);
+                                GetFormNode(), true);
           if (bCreatePage) {
             bForceEndPage = true;
             bIsManualBreak = true;
@@ -1978,8 +1987,8 @@
         default:
           break;
       }
-      GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage, m_pFormNode,
-                            true);
+      GotoNextContainerNode(m_pCurChildNode, &m_nCurChildNodeStage,
+                            GetFormNode(), true);
       if (bAddedItemInRow && eFlowStrategy == XFA_AttributeEnum::Tb)
         break;
       continue;
@@ -2006,13 +2015,13 @@
     bRetValue = false;
 
   containerSize = CalculateContainerComponentSizeFromContentSize(
-      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
+      GetFormNode(), bContainerWidthAutoSize, fContentCalculatedWidth,
       bContainerHeightAutoSize, fContentCalculatedHeight, containerSize);
 
   if (containerSize.height >= XFA_LAYOUT_FLOAT_PERCISION || m_pLayoutItem ||
       bRetValue) {
     if (!m_pLayoutItem)
-      m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
+      m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
     containerSize.height = std::max(containerSize.height, 0.f);
 
     SetCurrentComponentSize(containerSize);
@@ -2046,7 +2055,7 @@
     nGroupLengths[i] = pdfium::CollectionSize<int32_t>(rgCurLineLayoutItems[i]);
     for (int32_t c = nGroupLengths[i], j = 0; j < c; j++) {
       nTotalLength++;
-      if (rgCurLineLayoutItems[i][j]->m_pFormNode->PresenceRequiresSpace())
+      if (rgCurLineLayoutItems[i][j]->GetFormNode()->PresenceRequiresSpace())
         fGroupWidths[i] += rgCurLineLayoutItems[i][j]->m_sSize.width;
     }
   }
@@ -2058,7 +2067,7 @@
     return false;
   }
   if (!m_pLayoutItem)
-    m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
+    m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
 
   if (eFlowStrategy != XFA_AttributeEnum::Rl_tb) {
     float fCurPos;
@@ -2066,12 +2075,12 @@
     for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) {
       if (bRootForceTb) {
         rgCurLineLayoutItems[0][j]->m_sPos = CalculatePositionedContainerPos(
-            rgCurLineLayoutItems[0][j]->m_pFormNode,
+            rgCurLineLayoutItems[0][j]->GetFormNode(),
             rgCurLineLayoutItems[0][j]->m_sSize);
       } else {
         rgCurLineLayoutItems[0][j]->m_sPos =
             CFX_PointF(fCurPos, *fContentCurRowY);
-        if (rgCurLineLayoutItems[0][j]->m_pFormNode->PresenceRequiresSpace())
+        if (rgCurLineLayoutItems[0][j]->GetFormNode()->PresenceRequiresSpace())
           fCurPos += rgCurLineLayoutItems[0][j]->m_sSize.width;
       }
       m_pLayoutItem->AddChild(rgCurLineLayoutItems[0][j]);
@@ -2083,12 +2092,12 @@
     for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) {
       if (bRootForceTb) {
         rgCurLineLayoutItems[1][j]->m_sPos = CalculatePositionedContainerPos(
-            rgCurLineLayoutItems[1][j]->m_pFormNode,
+            rgCurLineLayoutItems[1][j]->GetFormNode(),
             rgCurLineLayoutItems[1][j]->m_sSize);
       } else {
         rgCurLineLayoutItems[1][j]->m_sPos =
             CFX_PointF(fCurPos, *fContentCurRowY);
-        if (rgCurLineLayoutItems[1][j]->m_pFormNode->PresenceRequiresSpace())
+        if (rgCurLineLayoutItems[1][j]->GetFormNode()->PresenceRequiresSpace())
           fCurPos += rgCurLineLayoutItems[1][j]->m_sSize.width;
       }
       m_pLayoutItem->AddChild(rgCurLineLayoutItems[1][j]);
@@ -2098,12 +2107,12 @@
     for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) {
       if (bRootForceTb) {
         rgCurLineLayoutItems[2][j]->m_sPos = CalculatePositionedContainerPos(
-            rgCurLineLayoutItems[2][j]->m_pFormNode,
+            rgCurLineLayoutItems[2][j]->GetFormNode(),
             rgCurLineLayoutItems[2][j]->m_sSize);
       } else {
         rgCurLineLayoutItems[2][j]->m_sPos =
             CFX_PointF(fCurPos, *fContentCurRowY);
-        if (rgCurLineLayoutItems[2][j]->m_pFormNode->PresenceRequiresSpace())
+        if (rgCurLineLayoutItems[2][j]->GetFormNode()->PresenceRequiresSpace())
           fCurPos += rgCurLineLayoutItems[2][j]->m_sSize.width;
       }
       m_pLayoutItem->AddChild(rgCurLineLayoutItems[2][j]);
@@ -2113,7 +2122,7 @@
     float fCurPos;
     fCurPos = fGroupWidths[0];
     for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) {
-      if (rgCurLineLayoutItems[0][j]->m_pFormNode->PresenceRequiresSpace())
+      if (rgCurLineLayoutItems[0][j]->GetFormNode()->PresenceRequiresSpace())
         fCurPos -= rgCurLineLayoutItems[0][j]->m_sSize.width;
 
       rgCurLineLayoutItems[0][j]->m_sPos =
@@ -2125,7 +2134,7 @@
                fGroupWidths[2]) /
               2;
     for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) {
-      if (rgCurLineLayoutItems[1][j]->m_pFormNode->PresenceRequiresSpace())
+      if (rgCurLineLayoutItems[1][j]->GetFormNode()->PresenceRequiresSpace())
         fCurPos -= rgCurLineLayoutItems[1][j]->m_sSize.width;
 
       rgCurLineLayoutItems[1][j]->m_sPos =
@@ -2135,7 +2144,7 @@
     }
     fCurPos = fContentWidthLimit;
     for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) {
-      if (rgCurLineLayoutItems[2][j]->m_pFormNode->PresenceRequiresSpace())
+      if (rgCurLineLayoutItems[2][j]->GetFormNode()->PresenceRequiresSpace())
         fCurPos -= rgCurLineLayoutItems[2][j]->m_sSize.width;
 
       rgCurLineLayoutItems[2][j]->m_sPos =
@@ -2180,17 +2189,17 @@
     return;
 
   ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE);
-  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
+  m_pLayoutItem = CreateContentLayoutItem(GetFormNode());
   if (!m_pLayoutItem)
     return;
 
-  CXFA_Document* pDocument = m_pFormNode->GetDocument();
+  CXFA_Document* pDocument = GetFormNode()->GetDocument();
   CXFA_FFNotify* pNotify = pDocument->GetNotify();
   CFX_SizeF size(-1, -1);
-  pNotify->StartFieldDrawLayout(m_pFormNode, &size.width, &size.height);
+  pNotify->StartFieldDrawLayout(GetFormNode(), &size.width, &size.height);
 
   int32_t nRotate = XFA_MapRotation(
-      m_pFormNode->JSObject()->GetInteger(XFA_Attribute::Rotate));
+      GetFormNode()->JSObject()->GetInteger(XFA_Attribute::Rotate));
   if (nRotate == 90 || nRotate == 270)
     std::swap(size.width, size.height);
 
@@ -2202,13 +2211,13 @@
     float fHeightLimit,
     float fRealHeight,
     CXFA_LayoutContext* pContext) {
-  switch (m_pFormNode->GetElementType()) {
+  switch (GetFormNode()->GetElementType()) {
     case XFA_Element::Subform:
     case XFA_Element::Area:
     case XFA_Element::ExclGroup:
     case XFA_Element::SubformSet: {
       bool bRootForceTb = false;
-      CXFA_Node* pLayoutNode = GetSubformSetParent(m_pFormNode);
+      CXFA_Node* pLayoutNode = GetSubformSetParent(GetFormNode());
       XFA_AttributeEnum eLayoutStrategy = GetLayout(pLayoutNode, &bRootForceTb);
       switch (eLayoutStrategy) {
         case XFA_AttributeEnum::Tb:
@@ -2279,7 +2288,7 @@
 void CXFA_ItemLayoutProcessor::UpdatePendingItemLayout(
     CXFA_ContentLayoutItem* pLayoutItem) {
   XFA_AttributeEnum eLayout =
-      pLayoutItem->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
+      pLayoutItem->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
   switch (eLayout) {
     case XFA_AttributeEnum::Row:
     case XFA_AttributeEnum::Rl_row:
@@ -2309,7 +2318,7 @@
 
   UpdatePendingItemLayout(pTrailerLayoutItem);
   CXFA_Margin* pMarginNode =
-      m_pFormNode->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
+      GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
   float fLeftInset = 0;
   float fTopInset = 0;
   float fRightInset = 0;
@@ -2348,7 +2357,7 @@
     pTrailerLayoutItem->m_sPos.y = fSplitPos - fTopInset - fBottomInset;
   }
 
-  switch (pTrailerLayoutItem->m_pFormNode->JSObject()->GetEnum(
+  switch (pTrailerLayoutItem->GetFormNode()->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
     case XFA_AttributeEnum::Right:
       pTrailerLayoutItem->m_sPos.x = m_pLayoutItem->m_sSize.width -
@@ -2375,7 +2384,7 @@
   UpdatePendingItemLayout(pLeaderLayoutItem);
 
   CXFA_Margin* pMarginNode =
-      m_pFormNode->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
+      GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
@@ -2394,7 +2403,7 @@
   }
   pLeaderLayoutItem->m_sPos.y = 0;
 
-  switch (pLeaderLayoutItem->m_pFormNode->JSObject()->GetEnum(
+  switch (pLeaderLayoutItem->GetFormNode()->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
     case XFA_AttributeEnum::Right:
       pLeaderLayoutItem->m_sPos.x = m_pLayoutItem->m_sSize.width - fRightInset -
@@ -2468,7 +2477,7 @@
     bool* bForceEndPage,
     CXFA_LayoutContext* pLayoutContext,
     bool bNewRow) {
-  bool bTakeSpace = pProcessor->m_pFormNode->PresenceRequiresSpace();
+  bool bTakeSpace = pProcessor->GetFormNode()->PresenceRequiresSpace();
   uint8_t uHAlign = HAlignEnumToInt(
       m_pCurChildNode->JSObject()->GetEnum(XFA_Attribute::HAlign));
   if (bContainerWidthAutoSize)
@@ -2483,15 +2492,15 @@
 
   *uCurHAlignState = uHAlign;
   bool bIsOwnSplit =
-      pProcessor->m_pFormNode->GetIntact() == XFA_AttributeEnum::None;
+      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None;
   bool bUseRealHeight = bTakeSpace && bContainerHeightAutoSize && bIsOwnSplit &&
-                        pProcessor->m_pFormNode->GetParent()->GetIntact() ==
+                        pProcessor->GetFormNode()->GetParent()->GetIntact() ==
                             XFA_AttributeEnum::None;
   bool bIsTransHeight = bTakeSpace;
   if (bIsTransHeight && !bIsOwnSplit) {
     bool bRootForceTb = false;
     XFA_AttributeEnum eLayoutStrategy =
-        GetLayout(pProcessor->m_pFormNode, &bRootForceTb);
+        GetLayout(pProcessor->GetFormNode(), &bRootForceTb);
     if (eLayoutStrategy == XFA_AttributeEnum::Lr_tb ||
         eLayoutStrategy == XFA_AttributeEnum::Rl_tb) {
       bIsTransHeight = false;
@@ -2501,7 +2510,7 @@
   bool bUseInherited = false;
   CXFA_LayoutContext layoutContext;
   if (m_pPageMgr) {
-    CXFA_Node* pOverflowNode = m_pPageMgr->QueryOverflow(m_pFormNode);
+    CXFA_Node* pOverflowNode = m_pPageMgr->QueryOverflow(GetFormNode());
     if (pOverflowNode) {
       layoutContext.m_pOverflowNode = pOverflowNode;
       layoutContext.m_pOverflowProcessor = this;
@@ -2544,8 +2553,8 @@
   CXFA_ContentLayoutItem* pTrailerLayoutItem = nullptr;
   bool bIsAddTrailerHeight = false;
   if (m_pPageMgr &&
-      pProcessor->m_pFormNode->GetIntact() == XFA_AttributeEnum::None) {
-    pFormNode = m_pPageMgr->QueryOverflow(pProcessor->m_pFormNode);
+      pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None) {
+    pFormNode = m_pPageMgr->QueryOverflow(pProcessor->GetFormNode());
     if (!pFormNode && pLayoutContext && pLayoutContext->m_pOverflowProcessor) {
       pFormNode = pLayoutContext->m_pOverflowNode;
       bUseInherited = true;
@@ -2602,8 +2611,8 @@
 
       CXFA_ContentLayoutItem* pChildLayoutItem =
           pProcessor->ExtractLayoutItem();
-      if (ExistContainerKeep(pProcessor->m_pFormNode, false) &&
-          pProcessor->m_pFormNode->GetIntact() == XFA_AttributeEnum::None) {
+      if (ExistContainerKeep(pProcessor->GetFormNode(), false) &&
+          pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None) {
         m_arrayKeepItems.push_back(pChildLayoutItem);
       } else {
         m_arrayKeepItems.clear();
@@ -2656,7 +2665,7 @@
   float fSplitPos = pProcessor->FindSplitPos(fAvailHeight - *fContentCurRowY);
   if (fSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
     XFA_AttributeEnum eLayout =
-        pProcessor->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
+        pProcessor->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
     if (eLayout == XFA_AttributeEnum::Tb &&
         eRetValue == XFA_ItemLayoutProcessorResult::Done) {
       pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
@@ -2694,7 +2703,7 @@
     } else {
       CXFA_LayoutItem* firstChild = pProcessor->m_pLayoutItem->m_pFirstChild;
       if (firstChild && !firstChild->m_pNextSibling &&
-          firstChild->m_pFormNode->IsLayoutGeneratedNode()) {
+          firstChild->GetFormNode()->IsLayoutGeneratedNode()) {
         pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
                                          pOverflowTrailerNode,
                                          pTrailerLayoutItem, pFormNode);
@@ -2724,7 +2733,7 @@
       CXFA_Node* pTempTrailerNode = nullptr;
       if (m_pPageMgr) {
         if (!pFormNode && pLayoutContext)
-          pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode;
+          pFormNode = pLayoutContext->m_pOverflowProcessor->GetFormNode();
 
         m_pPageMgr->ProcessOverflow(pFormNode, pTempLeaderNode,
                                     pTempTrailerNode, false, true);
@@ -2751,8 +2760,8 @@
   }
 
   XFA_AttributeEnum eLayout =
-      pProcessor->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
-  if (pProcessor->m_pFormNode->GetIntact() == XFA_AttributeEnum::None &&
+      pProcessor->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout);
+  if (pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None &&
       eLayout == XFA_AttributeEnum::Tb) {
     if (m_pPageMgr) {
       m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
@@ -2770,7 +2779,7 @@
     return XFA_ItemLayoutProcessorResult::PageFullBreak;
 
   if (!pFormNode && pLayoutContext)
-    pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode;
+    pFormNode = pLayoutContext->m_pOverflowProcessor->GetFormNode();
   if (m_pPageMgr) {
     m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
                                 pOverflowTrailerNode, false, true);
diff --git a/xfa/fxfa/parser/cxfa_layoutitem.cpp b/xfa/fxfa/parser/cxfa_layoutitem.cpp
index bd8ca2a..aac7e5d 100644
--- a/xfa/fxfa/parser/cxfa_layoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutitem.cpp
@@ -16,9 +16,9 @@
 
 void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem) {
   CXFA_LayoutItem* pNode = pLayoutItem->m_pFirstChild;
-  CXFA_FFNotify* pNotify = pLayoutItem->m_pFormNode->GetDocument()->GetNotify();
-  CXFA_LayoutProcessor* pDocLayout =
-      pLayoutItem->m_pFormNode->GetDocument()->GetLayoutProcessor();
+  CXFA_Document* pDocument = pLayoutItem->GetFormNode()->GetDocument();
+  CXFA_FFNotify* pNotify = pDocument->GetNotify();
+  CXFA_LayoutProcessor* pDocLayout = pDocument->GetLayoutProcessor();
   while (pNode) {
     CXFA_LayoutItem* pNext = pNode->m_pNextSibling;
     pNode->m_pParent = nullptr;
@@ -27,7 +27,7 @@
     pNode = pNext;
   }
   pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem);
-  if (pLayoutItem->m_pFormNode->GetElementType() == XFA_Element::PageArea) {
+  if (pLayoutItem->GetFormNode()->GetElementType() == XFA_Element::PageArea) {
     pNotify->OnPageEvent(static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem),
                          XFA_PAGEVIEWEVENT_PostRemoved);
   }
@@ -35,13 +35,9 @@
 }
 
 CXFA_LayoutItem::CXFA_LayoutItem(CXFA_Node* pNode, bool bIsContentLayoutItem)
-    : m_pFormNode(pNode),
-      m_pParent(nullptr),
-      m_pNextSibling(nullptr),
-      m_pFirstChild(nullptr),
-      m_bIsContentLayoutItem(bIsContentLayoutItem) {}
+    : m_bIsContentLayoutItem(bIsContentLayoutItem), m_pFormNode(pNode) {}
 
-CXFA_LayoutItem::~CXFA_LayoutItem() {}
+CXFA_LayoutItem::~CXFA_LayoutItem() = default;
 
 CXFA_ContainerLayoutItem* CXFA_LayoutItem::AsContainerLayoutItem() {
   return IsContainerLayoutItem() ? static_cast<CXFA_ContainerLayoutItem*>(this)
diff --git a/xfa/fxfa/parser/cxfa_layoutitem.h b/xfa/fxfa/parser/cxfa_layoutitem.h
index e03f455..6e51a05 100644
--- a/xfa/fxfa/parser/cxfa_layoutitem.h
+++ b/xfa/fxfa/parser/cxfa_layoutitem.h
@@ -7,6 +7,7 @@
 #ifndef XFA_FXFA_PARSER_CXFA_LAYOUTITEM_H_
 #define XFA_FXFA_PARSER_CXFA_LAYOUTITEM_H_
 
+#include "core/fxcrt/unowned_ptr.h"
 #include "xfa/fxfa/parser/cxfa_document.h"
 
 class CXFA_ContainerLayoutItem;
@@ -23,9 +24,11 @@
   CXFA_ContentLayoutItem* AsContentLayoutItem();
 
   CXFA_ContainerLayoutItem* GetPage() const;
-  CXFA_Node* GetFormNode() const { return m_pFormNode; }
   CFX_RectF GetRect(bool bRelative) const;
 
+  CXFA_Node* GetFormNode() const { return m_pFormNode.Get(); }
+  void SetFormNode(CXFA_Node* pNode) { m_pFormNode = pNode; }
+
   int32_t GetIndex() const;
   int32_t GetCount() const;
 
@@ -40,15 +43,15 @@
   void RemoveChild(CXFA_LayoutItem* pChildItem);
   void InsertChild(CXFA_LayoutItem* pBeforeItem, CXFA_LayoutItem* pChildItem);
 
-  CXFA_Node* m_pFormNode;
-  CXFA_LayoutItem* m_pParent;
-  CXFA_LayoutItem* m_pNextSibling;
-  CXFA_LayoutItem* m_pFirstChild;
+  CXFA_LayoutItem* m_pParent = nullptr;       // Raw, intra-tree pointer.
+  CXFA_LayoutItem* m_pNextSibling = nullptr;  // Raw, intra-tree pointer.
+  CXFA_LayoutItem* m_pFirstChild = nullptr;   // Raw, intra-tree pointer.
 
  protected:
   CXFA_LayoutItem(CXFA_Node* pNode, bool bIsContentLayoutItem);
 
   bool m_bIsContentLayoutItem;
+  UnownedPtr<CXFA_Node> m_pFormNode;
 };
 
 void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem);
diff --git a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
index c6b76b8..b6c95c1 100644
--- a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
@@ -38,13 +38,13 @@
  public:
   static CXFA_ContainerLayoutItem* GetFirstChild(
       CXFA_ContainerLayoutItem* pLayoutItem) {
-    if (pLayoutItem->m_pFormNode->GetElementType() != XFA_Element::PageSet)
+    if (pLayoutItem->GetFormNode()->GetElementType() != XFA_Element::PageSet)
       return nullptr;
 
     CXFA_ContainerLayoutItem* pChildItem =
         static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem->m_pFirstChild);
-    while (pChildItem &&
-           pChildItem->m_pFormNode->GetElementType() != XFA_Element::PageSet) {
+    while (pChildItem && pChildItem->GetFormNode()->GetElementType() !=
+                             XFA_Element::PageSet) {
       pChildItem =
           static_cast<CXFA_ContainerLayoutItem*>(pChildItem->m_pNextSibling);
     }
@@ -55,8 +55,8 @@
       CXFA_ContainerLayoutItem* pLayoutItem) {
     CXFA_ContainerLayoutItem* pChildItem =
         static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem->m_pNextSibling);
-    while (pChildItem &&
-           pChildItem->m_pFormNode->GetElementType() != XFA_Element::PageSet) {
+    while (pChildItem && pChildItem->GetFormNode()->GetElementType() !=
+                             XFA_Element::PageSet) {
       pChildItem =
           static_cast<CXFA_ContainerLayoutItem*>(pChildItem->m_pNextSibling);
     }
@@ -103,13 +103,15 @@
   uint32_t dwRelevantContainer = 0;
   if (bVisible) {
     XFA_AttributeEnum eAttributeValue =
-        pContainerItem->m_pFormNode->JSObject()
+        pContainerItem->GetFormNode()
+            ->JSObject()
             ->TryEnum(XFA_Attribute::Presence, true)
             .value_or(XFA_AttributeEnum::Visible);
     if (eAttributeValue == XFA_AttributeEnum::Visible)
       bVisibleItem = true;
 
-    dwRelevantContainer = GetRelevant(pContainerItem->m_pFormNode, dwRelevant);
+    dwRelevantContainer =
+        GetRelevant(pContainerItem->GetFormNode(), dwRelevant);
     dwStatus =
         (bVisibleItem ? XFA_WidgetStatus_Visible : 0) | dwRelevantContainer;
   }
@@ -211,7 +213,7 @@
                pPageAreaLayoutItem->m_pFirstChild);
        pLayoutItem; pLayoutItem = static_cast<CXFA_ContainerLayoutItem*>(
                         pLayoutItem->m_pNextSibling)) {
-    if (pLayoutItem->m_pFormNode == pContentArea) {
+    if (pLayoutItem->GetFormNode() == pContentArea) {
       if (!pLayoutItem->m_pFirstChild) {
         pContentAreaLayoutItem = pLayoutItem;
         return true;
@@ -299,7 +301,7 @@
     m_pPageSetLayoutItemRoot->m_pParent = nullptr;
     m_pPageSetLayoutItemRoot->m_pFirstChild = nullptr;
     m_pPageSetLayoutItemRoot->m_pNextSibling = nullptr;
-    m_pPageSetLayoutItemRoot->m_pFormNode = m_pTemplatePageSetRoot;
+    m_pPageSetLayoutItemRoot->SetFormNode(m_pTemplatePageSetRoot);
   } else {
     m_pPageSetLayoutItemRoot =
         new CXFA_ContainerLayoutItem(m_pTemplatePageSetRoot);
@@ -480,17 +482,18 @@
       AppendNewPage();
     }
     m_CurrentContainerRecordIter = GetTailPosition();
-    m_pCurPageArea = GetCurrentContainerRecord()->pCurPageArea->m_pFormNode;
+    m_pCurPageArea = GetCurrentContainerRecord()->pCurPageArea->GetFormNode();
   }
 }
 
 float CXFA_LayoutPageMgr::GetAvailHeight() {
   CXFA_ContainerLayoutItem* pLayoutItem =
       GetCurrentContainerRecord()->pCurContentArea;
-  if (!pLayoutItem || !pLayoutItem->m_pFormNode)
+  if (!pLayoutItem || !pLayoutItem->GetFormNode())
     return 0.0f;
 
-  float fAvailHeight = pLayoutItem->m_pFormNode->JSObject()
+  float fAvailHeight = pLayoutItem->GetFormNode()
+                           ->JSObject()
                            ->GetMeasure(XFA_Attribute::H)
                            .ToUnit(XFA_Unit::Pt);
   if (fAvailHeight >= XFA_LAYOUT_FLOAT_PERCISION)
@@ -525,7 +528,7 @@
       }
     } else {
       CXFA_ContainerLayoutItem* pParentPageSetLayout = nullptr;
-      if (pPageSet == GetCurrentContainerRecord()->pCurPageSet->m_pFormNode) {
+      if (pPageSet == GetCurrentContainerRecord()->pCurPageSet->GetFormNode()) {
         pParentPageSetLayout = static_cast<CXFA_ContainerLayoutItem*>(
             GetCurrentContainerRecord()->pCurPageSet->m_pParent);
       } else {
@@ -574,7 +577,7 @@
   CXFA_ContainerLayoutItem* pNewPageAreaLayoutItem = nullptr;
   if (pdfium::IndexInBounds(m_PageArray, m_nAvailPages)) {
     CXFA_ContainerLayoutItem* pContainerItem = m_PageArray[m_nAvailPages];
-    pContainerItem->m_pFormNode = pNewPageArea;
+    pContainerItem->SetFormNode(pNewPageArea);
     m_nAvailPages++;
     pNewPageAreaLayoutItem = pContainerItem;
   } else {
@@ -615,7 +618,7 @@
     for (CXFA_ContainerLayoutItem* pPageSetLayoutItem = sIterator.GetCurrent();
          pPageSetLayoutItem; pPageSetLayoutItem = sIterator.MoveToNext()) {
       XFA_AttributeEnum ePageRelation =
-          pPageSetLayoutItem->m_pFormNode->JSObject()->GetEnum(
+          pPageSetLayoutItem->GetFormNode()->JSObject()->GetEnum(
               XFA_Attribute::Relation);
       switch (ePageRelation) {
         case XFA_AttributeEnum::OrderedOccurrence:
@@ -628,7 +631,7 @@
                    pPageSetLayoutItem->m_pFirstChild;
                pPageAreaLayoutItem;
                pPageAreaLayoutItem = pPageAreaLayoutItem->m_pNextSibling) {
-            if (pPageAreaLayoutItem->m_pFormNode->GetElementType() !=
+            if (pPageAreaLayoutItem->GetFormNode()->GetElementType() !=
                 XFA_Element::PageArea) {
               continue;
             }
@@ -639,13 +642,13 @@
             break;
 
           if (!FindPageAreaFromPageSet_SimplexDuplex(
-                  pPageSetLayoutItem->m_pFormNode, nullptr, nullptr, nullptr,
+                  pPageSetLayoutItem->GetFormNode(), nullptr, nullptr, nullptr,
                   true, true,
                   nPageAreaCount == 1 ? XFA_AttributeEnum::Only
                                       : XFA_AttributeEnum::Last) &&
               (nPageAreaCount == 1 &&
                !FindPageAreaFromPageSet_SimplexDuplex(
-                   pPageSetLayoutItem->m_pFormNode, nullptr, nullptr, nullptr,
+                   pPageSetLayoutItem->GetFormNode(), nullptr, nullptr, nullptr,
                    true, true, XFA_AttributeEnum::Last))) {
             break;
           }
@@ -656,7 +659,7 @@
             XFA_AttributeEnum eOddOrEven =
                 pNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven);
             XFA_AttributeEnum eLastChoice =
-                pLastPageAreaLayoutItem->m_pFormNode->JSObject()->GetEnum(
+                pLastPageAreaLayoutItem->GetFormNode()->JSObject()->GetEnum(
                     XFA_Attribute::PagePosition);
             if (eLastChoice == XFA_AttributeEnum::First &&
                 (ePageRelation == XFA_AttributeEnum::SimplexPaginated ||
@@ -672,7 +675,7 @@
                    pLastPageAreaLayoutItem->m_pFirstChild;
                pChildLayoutItem;
                pChildLayoutItem = pChildLayoutItem->m_pNextSibling) {
-            if (pChildLayoutItem->m_pFormNode->GetElementType() !=
+            if (pChildLayoutItem->GetFormNode()->GetElementType() !=
                 XFA_Element::ContentArea) {
               continue;
             }
@@ -711,9 +714,9 @@
             CXFA_LayoutItem* pChildLayoutItem =
                 pLastPageAreaLayoutItem->m_pFirstChild;
             CXFA_Node* pContentAreaNode = pNode->GetFirstChild();
-            pLastPageAreaLayoutItem->m_pFormNode = pNode;
+            pLastPageAreaLayoutItem->SetFormNode(pNode);
             while (pChildLayoutItem && pContentAreaNode) {
-              if (pChildLayoutItem->m_pFormNode->GetElementType() !=
+              if (pChildLayoutItem->GetFormNode()->GetElementType() !=
                   XFA_Element::ContentArea) {
                 pChildLayoutItem = pChildLayoutItem->m_pNextSibling;
                 continue;
@@ -723,7 +726,7 @@
                 pContentAreaNode = pContentAreaNode->GetNextSibling();
                 continue;
               }
-              pChildLayoutItem->m_pFormNode = pContentAreaNode;
+              pChildLayoutItem->SetFormNode(pContentAreaNode);
               pChildLayoutItem = pChildLayoutItem->m_pNextSibling;
               pContentAreaNode = pContentAreaNode->GetNextSibling();
             }
@@ -766,7 +769,7 @@
       if (!pTarget ||
           m_CurrentContainerRecordIter == m_ProposedContainerRecords.end() ||
           pTarget !=
-              GetCurrentContainerRecord()->pCurContentArea->m_pFormNode ||
+              GetCurrentContainerRecord()->pCurContentArea->GetFormNode() ||
           bStartNew) {
         CXFA_Node* pPageArea = nullptr;
         if (pTarget)
@@ -781,7 +784,7 @@
         pTarget = nullptr;
       if (!pTarget ||
           m_CurrentContainerRecordIter == m_ProposedContainerRecords.end() ||
-          pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode ||
+          pTarget != GetCurrentContainerRecord()->pCurPageArea->GetFormNode() ||
           bStartNew) {
         CXFA_Node* pPageArea = GetNextAvailPageArea(pTarget, nullptr, true);
         bRet = !!pPageArea;
@@ -1385,7 +1388,7 @@
 
 bool CXFA_LayoutPageMgr::GetNextContentArea(CXFA_Node* pContentArea) {
   CXFA_Node* pCurContentNode =
-      GetCurrentContainerRecord()->pCurContentArea->m_pFormNode;
+      GetCurrentContainerRecord()->pCurContentArea->GetFormNode();
   if (!pContentArea) {
     pContentArea = pCurContentNode->GetNextSameClassSibling<CXFA_ContentArea>(
         XFA_Element::ContentArea);
@@ -1401,7 +1404,7 @@
       return false;
     }
     if (pContentAreaLayout) {
-      if (pContentAreaLayout->m_pFormNode != pCurContentNode) {
+      if (pContentAreaLayout->GetFormNode() != pCurContentNode) {
         CXFA_ContainerRecord* pNewRecord = CreateContainerRecord();
         pNewRecord->pCurContentArea = pContentAreaLayout;
         return true;
@@ -1531,7 +1534,7 @@
 
 bool CXFA_LayoutPageMgr::GetNextAvailContentHeight(float fChildHeight) {
   CXFA_Node* pCurContentNode =
-      GetCurrentContainerRecord()->pCurContentArea->m_pFormNode;
+      GetCurrentContainerRecord()->pCurContentArea->GetFormNode();
   if (!pCurContentNode)
     return false;
 
@@ -1544,7 +1547,8 @@
     return fNextContentHeight > fChildHeight;
   }
 
-  CXFA_Node* pPageNode = GetCurrentContainerRecord()->pCurPageArea->m_pFormNode;
+  CXFA_Node* pPageNode =
+      GetCurrentContainerRecord()->pCurPageArea->GetFormNode();
   CXFA_Node* pOccurNode =
       pPageNode->GetFirstChildByClass<CXFA_Occur>(XFA_Element::Occur);
   int32_t iMax = 0;
@@ -1622,7 +1626,7 @@
   while (pCurLayoutItem) {
     pNextLayoutItem = pCurLayoutItem->m_pNextSibling;
     if (pCurLayoutItem->IsContentLayoutItem()) {
-      if (pCurLayoutItem->m_pFormNode->HasRemovedChildren()) {
+      if (pCurLayoutItem->GetFormNode()->HasRemovedChildren()) {
         CXFA_FFNotify* pNotify =
             m_pTemplatePageSetRoot->GetDocument()->GetNotify();
         CXFA_LayoutProcessor* pDocLayout =
@@ -1636,9 +1640,9 @@
         continue;
       }
 
-      if (pCurLayoutItem->m_pFormNode->IsLayoutGeneratedNode()) {
+      if (pCurLayoutItem->GetFormNode()->IsLayoutGeneratedNode()) {
         CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode>
-            sIterator(pCurLayoutItem->m_pFormNode);
+            sIterator(pCurLayoutItem->GetFormNode());
         for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
              pNode = sIterator.MoveToNext()) {
           pNode->SetFlag(XFA_NodeFlag_UnusedNode);
@@ -1653,7 +1657,7 @@
     pCurLayoutItem->m_pNextSibling = nullptr;
     pCurLayoutItem->m_pFirstChild = nullptr;
     if (!pCurLayoutItem->IsContentLayoutItem() &&
-        pCurLayoutItem->m_pFormNode->GetElementType() !=
+        pCurLayoutItem->GetFormNode()->GetElementType() !=
             XFA_Element::PageArea) {
       delete pCurLayoutItem;
     }
@@ -1714,7 +1718,7 @@
         CXFA_TraverseStrategy_ContentAreaContainerLayoutItem>
         iterator(pRootLayout);
     CXFA_ContainerLayoutItem* pRootPageSetContainerItem = iterator.GetCurrent();
-    ASSERT(pRootPageSetContainerItem->m_pFormNode->GetElementType() ==
+    ASSERT(pRootPageSetContainerItem->GetFormNode()->GetElementType() ==
            XFA_Element::PageSet);
     if (iIndex <
         pdfium::CollectionSize<int32_t>(pDocument->m_pPendingPageSet)) {
@@ -1722,44 +1726,45 @@
       iIndex++;
     }
     if (!pPendingPageSet) {
-      if (pRootPageSetContainerItem->m_pFormNode->GetPacketType() ==
+      if (pRootPageSetContainerItem->GetFormNode()->GetPacketType() ==
           XFA_PacketType::Template) {
         pPendingPageSet =
-            pRootPageSetContainerItem->m_pFormNode->CloneTemplateToForm(false);
+            pRootPageSetContainerItem->GetFormNode()->CloneTemplateToForm(
+                false);
       } else {
-        pPendingPageSet = pRootPageSetContainerItem->m_pFormNode;
+        pPendingPageSet = pRootPageSetContainerItem->GetFormNode();
       }
     }
-    if (pRootPageSetContainerItem->m_pFormNode->JSObject()->GetLayoutItem() ==
+    if (pRootPageSetContainerItem->GetFormNode()->JSObject()->GetLayoutItem() ==
         pRootPageSetContainerItem) {
-      pRootPageSetContainerItem->m_pFormNode->JSObject()->SetLayoutItem(
+      pRootPageSetContainerItem->GetFormNode()->JSObject()->SetLayoutItem(
           nullptr);
     }
-    pRootPageSetContainerItem->m_pFormNode = pPendingPageSet;
+    pRootPageSetContainerItem->SetFormNode(pPendingPageSet);
     pPendingPageSet->ClearFlag(XFA_NodeFlag_UnusedNode);
     for (CXFA_ContainerLayoutItem* pContainerItem = iterator.MoveToNext();
          pContainerItem; pContainerItem = iterator.MoveToNext()) {
-      CXFA_Node* pNode = pContainerItem->m_pFormNode;
+      CXFA_Node* pNode = pContainerItem->GetFormNode();
       if (pNode->GetPacketType() != XFA_PacketType::Template)
         continue;
 
       switch (pNode->GetElementType()) {
         case XFA_Element::PageSet: {
-          CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode;
-          pContainerItem->m_pFormNode = XFA_NodeMerge_CloneOrMergeContainer(
-              pDocument, pParentNode, pContainerItem->m_pFormNode, true,
-              nullptr);
+          CXFA_Node* pParentNode = pContainerItem->m_pParent->GetFormNode();
+          pContainerItem->SetFormNode(XFA_NodeMerge_CloneOrMergeContainer(
+              pDocument, pParentNode, pContainerItem->GetFormNode(), true,
+              nullptr));
           break;
         }
         case XFA_Element::PageArea: {
           CXFA_LayoutItem* pFormLayout = pContainerItem;
-          CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode;
+          CXFA_Node* pParentNode = pContainerItem->m_pParent->GetFormNode();
           bool bIsExistForm = true;
           for (int32_t iLevel = 0; iLevel < 3; iLevel++) {
             pFormLayout = pFormLayout->m_pFirstChild;
             if (iLevel == 2) {
               while (pFormLayout &&
-                     !pFormLayout->m_pFormNode->PresenceRequiresSpace()) {
+                     !pFormLayout->GetFormNode()->PresenceRequiresSpace()) {
                 pFormLayout = pFormLayout->m_pNextSibling;
               }
             }
@@ -1769,12 +1774,12 @@
             }
           }
           if (bIsExistForm) {
-            CXFA_Node* pNewSubform = pFormLayout->m_pFormNode;
+            CXFA_Node* pNewSubform = pFormLayout->GetFormNode();
             if (pContainerItem->m_pOldSubform &&
                 pContainerItem->m_pOldSubform != pNewSubform) {
               CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance(
-                  pDocument, pContainerItem->m_pFormNode->GetElementType(),
-                  pContainerItem->m_pFormNode->GetNameHash(), pParentNode);
+                  pDocument, pContainerItem->GetFormNode()->GetElementType(),
+                  pContainerItem->GetFormNode()->GetNameHash(), pParentNode);
               CXFA_ContainerIterator sIterator(pExistingNode);
               for (CXFA_Node* pIter = sIterator.GetCurrent(); pIter;
                    pIter = sIterator.MoveToNext()) {
@@ -1793,21 +1798,21 @@
             }
             pContainerItem->m_pOldSubform = pNewSubform;
           }
-          pContainerItem->m_pFormNode = pDocument->DataMerge_CopyContainer(
-              pContainerItem->m_pFormNode, pParentNode,
+          pContainerItem->SetFormNode(pDocument->DataMerge_CopyContainer(
+              pContainerItem->GetFormNode(), pParentNode,
               ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)), true, true,
-              true);
+              true));
           break;
         }
         case XFA_Element::ContentArea: {
-          CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode;
+          CXFA_Node* pParentNode = pContainerItem->m_pParent->GetFormNode();
           for (CXFA_Node* pChildNode = pParentNode->GetFirstChild(); pChildNode;
                pChildNode = pChildNode->GetNextSibling()) {
             if (pChildNode->GetTemplateNodeIfExists() !=
-                pContainerItem->m_pFormNode) {
+                pContainerItem->GetFormNode()) {
               continue;
             }
-            pContainerItem->m_pFormNode = pChildNode;
+            pContainerItem->SetFormNode(pChildNode);
             break;
           }
           break;
@@ -1827,7 +1832,7 @@
     pPendingPageSet->SetFlagAndNotify(XFA_NodeFlag_Initialized);
   }
 
-  CXFA_Node* pPageSet = GetRootLayoutItem()->m_pFormNode;
+  CXFA_Node* pPageSet = GetRootLayoutItem()->GetFormNode();
   while (pPageSet) {
     CXFA_Node* pNextPageSet =
         pPageSet->GetNextSameClassSibling<CXFA_PageSet>(XFA_Element::PageSet);
@@ -1884,7 +1889,7 @@
         iterator(pRootLayoutItem);
     for (CXFA_ContainerLayoutItem* pContainerItem = iterator.GetCurrent();
          pContainerItem; pContainerItem = iterator.MoveToNext()) {
-      CXFA_Node* pNode = pContainerItem->m_pFormNode;
+      CXFA_Node* pNode = pContainerItem->GetFormNode();
       switch (pNode->GetElementType()) {
         case XFA_Element::PageArea:
           m_pLayoutProcessor->GetRootRootItemLayoutProcessor()
@@ -1912,7 +1917,7 @@
         iteratorParent(pRootLayoutItem);
     for (CXFA_ContainerLayoutItem* pContainerItem = iteratorParent.GetCurrent();
          pContainerItem; pContainerItem = iteratorParent.MoveToNext()) {
-      switch (pContainerItem->m_pFormNode->GetElementType()) {
+      switch (pContainerItem->GetFormNode()->GetElementType()) {
         case XFA_Element::PageArea: {
           nPageIdx++;
           uint32_t dwRelevant =
@@ -1930,12 +1935,13 @@
             }
 
             XFA_AttributeEnum presence =
-                pContentItem->m_pFormNode->JSObject()
+                pContentItem->GetFormNode()
+                    ->JSObject()
                     ->TryEnum(XFA_Attribute::Presence, true)
                     .value_or(XFA_AttributeEnum::Visible);
             bool bVisible = presence == XFA_AttributeEnum::Visible;
             uint32_t dwRelevantChild =
-                GetRelevant(pContentItem->m_pFormNode, dwRelevant);
+                GetRelevant(pContentItem->GetFormNode(), dwRelevant);
             SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
                           dwRelevantChild, bVisible, nPageIdx);
             pChildLayoutItem = iterator.SkipChildrenAndMoveToNext();
@@ -1966,7 +1972,7 @@
     XFA_ReleaseLayoutItem_NoPageArea(pNode);
     pNode = pNext;
   }
-  if (pLayoutItem->m_pFormNode->GetElementType() != XFA_Element::PageArea)
+  if (pLayoutItem->GetFormNode()->GetElementType() != XFA_Element::PageArea)
     delete pLayoutItem;
 }
 
@@ -1980,9 +1986,9 @@
 
   CXFA_ContainerLayoutItem* pRootLayoutItem = m_pPageSetLayoutItemRoot;
   if (pRootLayoutItem &&
-      pRootLayoutItem->m_pFormNode->GetPacketType() == XFA_PacketType::Form) {
-    CXFA_Node* pPageSetFormNode = pRootLayoutItem->m_pFormNode;
-    pRootLayoutItem->m_pFormNode->GetDocument()->m_pPendingPageSet.clear();
+      pRootLayoutItem->GetFormNode()->GetPacketType() == XFA_PacketType::Form) {
+    CXFA_Node* pPageSetFormNode = pRootLayoutItem->GetFormNode();
+    pRootLayoutItem->GetFormNode()->GetDocument()->m_pPendingPageSet.clear();
     if (pPageSetFormNode->HasRemovedChildren()) {
       XFA_ReleaseLayoutItem(pRootLayoutItem);
       m_pPageSetLayoutItemRoot = nullptr;
@@ -1995,8 +2001,9 @@
           pPageSetFormNode->GetNextSameClassSibling<CXFA_PageSet>(
               XFA_Element::PageSet);
       pPageSetFormNode->GetParent()->RemoveChild(pPageSetFormNode, false);
-      pRootLayoutItem->m_pFormNode->GetDocument()->m_pPendingPageSet.push_back(
-          pPageSetFormNode);
+      pRootLayoutItem->GetFormNode()
+          ->GetDocument()
+          ->m_pPendingPageSet.push_back(pPageSetFormNode);
       pPageSetFormNode = pNextPageSet;
     }
   }