Break off part of CXFA_LayoutPageMgr::PrepareLayout().

Move part of the code into helper functions.

Change-Id: I85f56adbb41b5280ebb4375ce00a852c5601b806
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/49415
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 761d0ae..8188544 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -6,6 +6,8 @@
 
 #include "xfa/fxfa/layout/cxfa_layoutpagemgr.h"
 
+#include <utility>
+
 #include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cjx_object.h"
 #include "third_party/base/stl_util.h"
@@ -272,6 +274,44 @@
   return heights;
 }
 
+std::pair<size_t, CXFA_LayoutItem*> GetPageAreaCountAndLastPageAreaFromPageSet(
+    CXFA_ContainerLayoutItem* pPageSetLayoutItem) {
+  size_t nCount = 0;
+  CXFA_LayoutItem* pLast = nullptr;
+  for (CXFA_LayoutItem* pPageAreaLayoutItem =
+           pPageSetLayoutItem->GetFirstChild();
+       pPageAreaLayoutItem;
+       pPageAreaLayoutItem = pPageAreaLayoutItem->GetNextSibling()) {
+    if (pPageAreaLayoutItem->GetFormNode()->GetElementType() !=
+        XFA_Element::PageArea) {
+      continue;
+    }
+    ++nCount;
+    pLast = pPageAreaLayoutItem;
+  }
+  return {nCount, pLast};
+}
+
+bool ContentAreasFitInPageAreas(const CXFA_Node* pNode,
+                                const std::vector<float>& rgUsedHeights) {
+  size_t iCurContentAreaIndex = 0;
+  for (const CXFA_Node* pContentAreaNode = pNode->GetFirstChild();
+       pContentAreaNode;
+       pContentAreaNode = pContentAreaNode->GetNextSibling()) {
+    if (pContentAreaNode->GetElementType() != XFA_Element::ContentArea)
+      continue;
+
+    const float fHeight = pContentAreaNode->JSObject()->GetMeasureInUnit(
+                              XFA_Attribute::H, XFA_Unit::Pt) +
+                          kXFALayoutPrecision;
+    if (rgUsedHeights[iCurContentAreaIndex] > fHeight)
+      return false;
+
+    ++iCurContentAreaIndex;
+  }
+  return true;
+}
+
 }  // namespace
 
 class CXFA_ContainerRecord {
@@ -1957,19 +1997,10 @@
 void CXFA_LayoutPageMgr::ProcessSimplexOrDuplexPageSets(
     CXFA_ContainerLayoutItem* pPageSetLayoutItem,
     bool bIsSimplex) {
-  CXFA_LayoutItem* pLastPageAreaLayoutItem = nullptr;
-  int32_t nPageAreaCount = 0;
-  for (CXFA_LayoutItem* pPageAreaLayoutItem =
-           pPageSetLayoutItem->GetFirstChild();
-       pPageAreaLayoutItem;
-       pPageAreaLayoutItem = pPageAreaLayoutItem->GetNextSibling()) {
-    if (pPageAreaLayoutItem->GetFormNode()->GetElementType() !=
-        XFA_Element::PageArea) {
-      continue;
-    }
-    nPageAreaCount++;
-    pLastPageAreaLayoutItem = pPageAreaLayoutItem;
-  }
+  size_t nPageAreaCount;
+  CXFA_LayoutItem* pLastPageAreaLayoutItem;
+  std::tie(nPageAreaCount, pLastPageAreaLayoutItem) =
+      GetPageAreaCountAndLastPageAreaFromPageSet(pPageSetLayoutItem);
   if (!pLastPageAreaLayoutItem)
     return;
 
@@ -1984,6 +2015,7 @@
            true, XFA_AttributeValue::Last))) {
     return;
   }
+
   CXFA_Node* pNode = m_pCurPageArea;
   XFA_AttributeValue eCurChoice =
       pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition);
@@ -2000,25 +2032,10 @@
       return;
     }
   }
-  bool bUsable = true;
+
   std::vector<float> rgUsedHeights =
       GetHeightsForContentAreas(pLastPageAreaLayoutItem);
-  int32_t iCurContentAreaIndex = -1;
-  for (CXFA_Node* pContentAreaNode = pNode->GetFirstChild(); pContentAreaNode;
-       pContentAreaNode = pContentAreaNode->GetNextSibling()) {
-    if (pContentAreaNode->GetElementType() != XFA_Element::ContentArea) {
-      continue;
-    }
-    iCurContentAreaIndex++;
-    const float fHeight = pContentAreaNode->JSObject()->GetMeasureInUnit(
-                              XFA_Attribute::H, XFA_Unit::Pt) +
-                          kXFALayoutPrecision;
-    if (rgUsedHeights[iCurContentAreaIndex] > fHeight) {
-      bUsable = false;
-      break;
-    }
-  }
-  if (bUsable) {
+  if (ContentAreasFitInPageAreas(pNode, rgUsedHeights)) {
     CXFA_LayoutItem* pChildLayoutItem =
         pLastPageAreaLayoutItem->GetFirstChild();
     CXFA_Node* pContentAreaNode = pNode->GetFirstChild();
@@ -2037,8 +2054,11 @@
       pChildLayoutItem = pChildLayoutItem->GetNextSibling();
       pContentAreaNode = pContentAreaNode->GetNextSibling();
     }
-  } else if (pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition) ==
-             XFA_AttributeValue::Last) {
+    return;
+  }
+
+  if (pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition) ==
+      XFA_AttributeValue::Last) {
     CXFA_ContainerRecord* pRecord = CreateContainerRecord(nullptr, false);
     AddPageAreaLayoutItem(pRecord, pNode);
   }