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++;
 
