Use early returns in CXFA_LayoutPageMgr::CreateViewRecord().

Remove many levels of nested ifs. Add an AppendNewRecord() helper
method to support this.

Change-Id: I23589b0fd14550996b85870ea60cd4a7df8c1a5a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53050
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index e2f4a74..e953840 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -591,48 +591,7 @@
                                                       bool bCreateNew) {
   ASSERT(pPageNode);
   CXFA_ViewRecord* pNewRecord = new CXFA_ViewRecord();
-  if (HasCurrentViewRecord()) {
-    if (!IsPageSetRootOrderedOccurrence()) {
-      *pNewRecord = *GetCurrentViewRecord();
-      m_ProposedViewRecords.push_back(pNewRecord);
-      return pNewRecord;
-    }
-    CXFA_Node* pPageSet = pPageNode->GetParent();
-    if (!bCreateNew) {
-      if (pPageSet == m_pTemplatePageSetRoot) {
-        pNewRecord->pCurPageSet = m_pPageSetCurRoot;
-      } else {
-        CXFA_ViewLayoutItem* pParentLayoutItem =
-            ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
-        if (!pParentLayoutItem)
-          pParentLayoutItem = m_pPageSetCurRoot;
-
-        pNewRecord->pCurPageSet = pParentLayoutItem;
-      }
-    } else {
-      CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
-      if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
-        pParentPageSetLayout =
-            ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
-      } else {
-        pParentPageSetLayout = ToViewLayoutItem(
-            pPageSet->GetParent()->JSObject()->GetLayoutItem());
-      }
-      auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
-      pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
-      if (!pParentPageSetLayout) {
-        CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
-        while (pPrePageSet->GetNextSibling()) {
-          pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
-        }
-        pPrePageSet->SetNextSibling(pPageSetLayoutItem);
-        m_pPageSetCurRoot = pPageSetLayoutItem;
-      } else {
-        pParentPageSetLayout->AddChild(pPageSetLayoutItem);
-      }
-      pNewRecord->pCurPageSet = pPageSetLayoutItem;
-    }
-  } else {
+  if (!HasCurrentViewRecord()) {
     CXFA_Node* pPageSet = pPageNode->GetParent();
     if (pPageSet == m_pTemplatePageSetRoot) {
       pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
@@ -643,9 +602,51 @@
       m_pPageSetLayoutItemRoot->AddChild(pPageSetLayoutItem);
       pNewRecord->pCurPageSet = pPageSetLayoutItem;
     }
+    return AppendNewRecord(pNewRecord);
   }
-  m_ProposedViewRecords.push_back(pNewRecord);
-  return pNewRecord;
+
+  if (!IsPageSetRootOrderedOccurrence()) {
+    *pNewRecord = *GetCurrentViewRecord();
+    return AppendNewRecord(pNewRecord);
+  }
+
+  CXFA_Node* pPageSet = pPageNode->GetParent();
+  if (!bCreateNew) {
+    if (pPageSet == m_pTemplatePageSetRoot) {
+      pNewRecord->pCurPageSet = m_pPageSetCurRoot;
+    } else {
+      CXFA_ViewLayoutItem* pParentLayoutItem =
+          ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
+      if (!pParentLayoutItem)
+        pParentLayoutItem = m_pPageSetCurRoot;
+
+      pNewRecord->pCurPageSet = pParentLayoutItem;
+    }
+    return AppendNewRecord(pNewRecord);
+  }
+
+  CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
+  if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
+    pParentPageSetLayout =
+        ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
+  } else {
+    pParentPageSetLayout =
+        ToViewLayoutItem(pPageSet->GetParent()->JSObject()->GetLayoutItem());
+  }
+  auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
+  pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
+  if (!pParentPageSetLayout) {
+    CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
+    while (pPrePageSet->GetNextSibling()) {
+      pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
+    }
+    pPrePageSet->SetNextSibling(pPageSetLayoutItem);
+    m_pPageSetCurRoot = pPageSetLayoutItem;
+  } else {
+    pParentPageSetLayout->AddChild(pPageSetLayoutItem);
+  }
+  pNewRecord->pCurPageSet = pPageSetLayoutItem;
+  return AppendNewRecord(pNewRecord);
 }
 
 CXFA_ViewRecord* CXFA_LayoutPageMgr::CreateViewRecordSimple() {
@@ -654,8 +655,7 @@
     *pNewRecord = *GetCurrentViewRecord();
   else
     pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
-  m_ProposedViewRecords.push_back(pNewRecord);
-  return pNewRecord;
+  return AppendNewRecord(pNewRecord);
 }
 
 void CXFA_LayoutPageMgr::AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.h b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
index 55aeb91..d91816a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
@@ -77,6 +77,10 @@
     auto iter = m_ProposedViewRecords.end();
     return !m_ProposedViewRecords.empty() ? std::prev(iter) : iter;
   }
+  CXFA_ViewRecord* AppendNewRecord(CXFA_ViewRecord* pNewRecord) {
+    m_ProposedViewRecords.push_back(pNewRecord);
+    return pNewRecord;
+  }
   CXFA_ViewRecord* CreateViewRecord(CXFA_Node* pPageNode, bool bCreateNew);
   CXFA_ViewRecord* CreateViewRecordSimple();
   void AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,