Fold CXFA_LayoutContext into CXFA_ContentLayoutProcessor.

The content layout processor is the only thing that uses the
layout context in the first place, so make it a private
nested class (external callers always pass nullptr where this
type is required).

Change-Id: I7f9274ba5e5c49a1438b38dfae9da945cec62e84
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/57150
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/layout/BUILD.gn b/xfa/fxfa/layout/BUILD.gn
index 9fe47c2..c572120 100644
--- a/xfa/fxfa/layout/BUILD.gn
+++ b/xfa/fxfa/layout/BUILD.gn
@@ -14,8 +14,6 @@
     "cxfa_contentlayoutitem.h",
     "cxfa_contentlayoutprocessor.cpp",
     "cxfa_contentlayoutprocessor.h",
-    "cxfa_layoutcontext.cpp",
-    "cxfa_layoutcontext.h",
     "cxfa_layoutitem.cpp",
     "cxfa_layoutitem.h",
     "cxfa_layoutprocessor.cpp",
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
index 43c1be8..e760b5a 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
@@ -20,7 +20,6 @@
 #include "xfa/fxfa/cxfa_ffnotify.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
 #include "xfa/fxfa/layout/cxfa_contentlayoutitem.h"
-#include "xfa/fxfa/layout/cxfa_layoutcontext.h"
 #include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
 #include "xfa/fxfa/layout/cxfa_viewlayoutitem.h"
 #include "xfa/fxfa/layout/cxfa_viewlayoutprocessor.h"
@@ -989,7 +988,7 @@
 
     auto pProcessor =
         pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(pCurChildNode, nullptr);
-    pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+    pProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
     if (!pProcessor->HasLayoutItem())
       continue;
 
@@ -1028,7 +1027,7 @@
 }
 
 void CXFA_ContentLayoutProcessor::DoLayoutPositionedContainer(
-    CXFA_LayoutContext* pContext) {
+    Context* pContext) {
   if (m_pLayoutItem)
     return;
 
@@ -1079,7 +1078,7 @@
       }
     }
 
-    pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, pContext);
+    pProcessor->DoLayoutInternal(false, FLT_MAX, FLT_MAX, pContext);
     if (!pProcessor->HasLayoutItem())
       continue;
 
@@ -1178,9 +1177,9 @@
 
   int32_t iSpecifiedColumnCount =
       pdfium::CollectionSize<int32_t>(m_rgSpecifiedColumnWidths);
-  CXFA_LayoutContext layoutContext;
+  Context layoutContext;
   layoutContext.m_prgSpecifiedColumnWidths = &m_rgSpecifiedColumnWidths;
-  CXFA_LayoutContext* pLayoutContext =
+  Context* pLayoutContext =
       iSpecifiedColumnCount > 0 ? &layoutContext : nullptr;
   if (!m_pCurChildNode)
     GotoNextContainerNodeSimple(false);
@@ -1192,7 +1191,7 @@
 
     auto pProcessor = pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
         m_pCurChildNode, m_pViewLayoutProcessor.Get());
-    pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, pLayoutContext);
+    pProcessor->DoLayoutInternal(false, FLT_MAX, FLT_MAX, pLayoutContext);
     if (!pProcessor->HasLayoutItem())
       continue;
 
@@ -1507,7 +1506,7 @@
     XFA_AttributeValue eFlowStrategy,
     float fHeightLimit,
     float fRealHeight,
-    CXFA_LayoutContext* pContext,
+    Context* pContext,
     bool bRootForceTb) {
   m_bHasAvailHeight = true;
   if (m_pCurChildPreprocessor)
@@ -2043,8 +2042,15 @@
 CXFA_ContentLayoutProcessor::Result CXFA_ContentLayoutProcessor::DoLayout(
     bool bUseBreakControl,
     float fHeightLimit,
-    float fRealHeight,
-    CXFA_LayoutContext* pContext) {
+    float fRealHeight) {
+  return DoLayoutInternal(bUseBreakControl, fHeightLimit, fRealHeight, nullptr);
+}
+
+CXFA_ContentLayoutProcessor::Result
+CXFA_ContentLayoutProcessor::DoLayoutInternal(bool bUseBreakControl,
+                                              float fHeightLimit,
+                                              float fRealHeight,
+                                              Context* pContext) {
   switch (GetFormNode()->GetElementType()) {
     case XFA_Element::Subform:
     case XFA_Element::Area:
@@ -2269,7 +2275,7 @@
     auto pPendingProcessor = pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
         m_PendingNodes.front(), nullptr);
     m_PendingNodes.pop_front();
-    pPendingProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+    pPendingProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
     CXFA_ContentLayoutItem* pPendingLayoutItem =
         pPendingProcessor->HasLayoutItem()
             ? pPendingProcessor->ExtractLayoutItem()
@@ -2301,7 +2307,7 @@
     float* fContentCurRowHeight,
     bool* bAddedItemInRow,
     bool* bForceEndPage,
-    CXFA_LayoutContext* pLayoutContext,
+    Context* pLayoutContext,
     bool bNewRow) {
   bool bTakeSpace = pProcessor->GetFormNode()->PresenceRequiresSpace();
   uint8_t uHAlign = HAlignEnumToInt(
@@ -2334,7 +2340,7 @@
   }
 
   bool bUseInherited = false;
-  CXFA_LayoutContext layoutContext;
+  Context layoutContext;
   if (m_pViewLayoutProcessor) {
     CXFA_Node* pOverflowNode =
         m_pViewLayoutProcessor->QueryOverflow(GetFormNode());
@@ -2347,7 +2353,7 @@
 
   Result eRetValue = Result::kDone;
   if (!bNewRow || pProcessor->m_ePreProcessRs == Result::kDone) {
-    eRetValue = pProcessor->DoLayout(
+    eRetValue = pProcessor->DoLayoutInternal(
         bTakeSpace ? bUseBreakControl : false,
         bUseRealHeight ? fRealHeight - *fContentCurRowY : FLT_MAX,
         bIsTransHeight ? fRealHeight - *fContentCurRowY : FLT_MAX,
@@ -2394,7 +2400,7 @@
           auto pOverflowLeaderProcessor =
               pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
                   pOverflowTrailerNode, nullptr);
-          pOverflowLeaderProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+          pOverflowLeaderProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
           pTrailerLayoutItem =
               pOverflowLeaderProcessor->HasLayoutItem()
                   ? pOverflowLeaderProcessor->ExtractLayoutItem()
@@ -2739,7 +2745,7 @@
 }
 
 void CXFA_ContentLayoutProcessor::AdjustContainerSpecifiedSize(
-    CXFA_LayoutContext* pContext,
+    Context* pContext,
     CFX_SizeF* pSize,
     bool* pContainerWidthAutoSize,
     bool* pContainerHeightAutoSize) {
@@ -2800,3 +2806,7 @@
   }
   return size;
 }
+
+CXFA_ContentLayoutProcessor::Context::Context() = default;
+
+CXFA_ContentLayoutProcessor::Context::~Context() = default;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
index 32dd9cd..e8a425c 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
+++ b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
@@ -23,7 +23,6 @@
 
 class CXFA_ContentLayoutItem;
 class CXFA_ContentLayoutProcessor;
-class CXFA_LayoutContext;
 class CXFA_LayoutProcessor;
 class CXFA_Node;
 class CXFA_ViewLayoutItem;
@@ -53,16 +52,29 @@
                               CXFA_ViewLayoutProcessor* pViewLayoutProcessor);
   ~CXFA_ContentLayoutProcessor();
 
-  Result DoLayout(bool bUseBreakControl,
-                  float fHeightLimit,
-                  float fRealHeight,
-                  CXFA_LayoutContext* pContext);
+  Result DoLayout(bool bUseBreakControl, float fHeightLimit, float fRealHeight);
   void DoLayoutPageArea(CXFA_ViewLayoutItem* pPageAreaLayoutItem);
 
   CXFA_Node* GetFormNode() { return m_pFormNode; }
   CXFA_ContentLayoutItem* ExtractLayoutItem();
 
  private:
+  class Context {
+   public:
+    Context();
+    ~Context();
+
+    Optional<float> m_fCurColumnWidth;
+    UnownedPtr<std::vector<float>> m_prgSpecifiedColumnWidths;
+    UnownedPtr<CXFA_ContentLayoutProcessor> m_pOverflowProcessor;
+    UnownedPtr<CXFA_Node> m_pOverflowNode;
+  };
+
+  Result DoLayoutInternal(bool bUseBreakControl,
+                          float fHeightLimit,
+                          float fRealHeight,
+                          Context* pContext);
+
   CFX_SizeF GetCurrentComponentSize();
   bool HasLayoutItem() const { return !!m_pLayoutItem; }
   void SplitLayoutItem(float fSplitPos);
@@ -111,13 +123,13 @@
                         float fChildHeight,
                         std::vector<CXFA_ContentLayoutItem*>* pKeepItems);
 
-  void DoLayoutPositionedContainer(CXFA_LayoutContext* pContext);
+  void DoLayoutPositionedContainer(Context* pContext);
   void DoLayoutTableContainer(CXFA_Node* pLayoutNode);
   Result DoLayoutFlowedContainer(bool bUseBreakControl,
                                  XFA_AttributeValue eFlowStrategy,
                                  float fHeightLimit,
                                  float fRealHeight,
-                                 CXFA_LayoutContext* pContext,
+                                 Context* pContext,
                                  bool bRootForceTb);
   void DoLayoutField();
 
@@ -160,7 +172,7 @@
       float* fContentCurRowHeight,
       bool* bAddedItemInRow,
       bool* bForceEndPage,
-      CXFA_LayoutContext* pLayoutContext,
+      Context* pLayoutContext,
       bool bNewRow);
 
   Optional<Stage> HandleKeep(CXFA_Node* pBreakAfterNode,
@@ -177,7 +189,7 @@
   Optional<Stage> HandleBookendTrailer(CXFA_Node* pParentContainer,
                                        CXFA_Node** pCurActionNode);
   void ProcessKeepNodesEnd();
-  void AdjustContainerSpecifiedSize(CXFA_LayoutContext* pContext,
+  void AdjustContainerSpecifiedSize(Context* pContext,
                                     CFX_SizeF* pSize,
                                     bool* pContainerWidthAutoSize,
                                     bool* pContainerHeightAutoSize);
diff --git a/xfa/fxfa/layout/cxfa_layoutcontext.cpp b/xfa/fxfa/layout/cxfa_layoutcontext.cpp
deleted file mode 100644
index cd5d8b1..0000000
--- a/xfa/fxfa/layout/cxfa_layoutcontext.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2018 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/layout/cxfa_layoutcontext.h"
-
-CXFA_LayoutContext::CXFA_LayoutContext() = default;
-
-CXFA_LayoutContext::~CXFA_LayoutContext() = default;
diff --git a/xfa/fxfa/layout/cxfa_layoutcontext.h b/xfa/fxfa/layout/cxfa_layoutcontext.h
deleted file mode 100644
index 76ed06f..0000000
--- a/xfa/fxfa/layout/cxfa_layoutcontext.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
-#define XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
-
-#include <vector>
-
-#include "core/fxcrt/unowned_ptr.h"
-#include "third_party/base/optional.h"
-
-class CXFA_ContentLayoutProcessor;
-class CXFA_Node;
-
-class CXFA_LayoutContext {
- public:
-  CXFA_LayoutContext();
-  ~CXFA_LayoutContext();
-
-  Optional<float> m_fCurColumnWidth;
-  UnownedPtr<std::vector<float>> m_prgSpecifiedColumnWidths;
-  UnownedPtr<CXFA_ContentLayoutProcessor> m_pOverflowProcessor;
-  UnownedPtr<CXFA_Node> m_pOverflowNode;
-};
-
-#endif  // XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
diff --git a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
index fc86a4b..0edfefd 100644
--- a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
@@ -76,8 +76,8 @@
       pFormNode->JSObject()->GetMeasureInUnit(XFA_Attribute::Y, XFA_Unit::Pt);
   do {
     float fAvailHeight = m_pViewLayoutProcessor->GetAvailHeight();
-    eStatus = m_pContentLayoutProcessor->DoLayout(true, fAvailHeight,
-                                                  fAvailHeight, nullptr);
+    eStatus =
+        m_pContentLayoutProcessor->DoLayout(true, fAvailHeight, fAvailHeight);
     if (eStatus != CXFA_ContentLayoutProcessor::Result::kDone)
       m_nProgressCounter++;