Move more logic from fpdf_save.cpp down into CPDFXFA_Context.

Fewer CXFA_FF* objects in the top-level fpdfsdk/ layer.

-- Remove some unused bool return values which were never checked.

Change-Id: I40bb6f3249f1210593aa58c5b588add50061b25a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59131
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp
index 22af561..1776d12 100644
--- a/fpdfsdk/fpdf_save.cpp
+++ b/fpdfsdk/fpdf_save.cpp
@@ -30,11 +30,7 @@
 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h"
 #include "public/fpdf_formfill.h"
-#include "xfa/fxfa/cxfa_eventparam.h"
-#include "xfa/fxfa/cxfa_ffapp.h"
 #include "xfa/fxfa/cxfa_ffdocview.h"
-#include "xfa/fxfa/cxfa_ffwidgethandler.h"
-#include "xfa/fxfa/cxfa_readynodeiterator.h"
 #include "xfa/fxfa/parser/cxfa_object.h"
 #endif
 
@@ -173,49 +169,6 @@
   }
   return true;
 }
-
-bool SendPostSaveToXFADoc(CPDFXFA_Context* pContext) {
-  if (!pContext)
-    return false;
-
-  if (!pContext->ContainsXFAForm())
-    return true;
-
-  CXFA_FFDocView* pXFADocView = pContext->GetXFADocView();
-  if (!pXFADocView)
-    return false;
-
-  CXFA_FFWidgetHandler* pWidgetHandler = pXFADocView->GetWidgetHandler();
-  auto it = pXFADocView->CreateReadyNodeIterator();
-  while (CXFA_Node* pNode = it->MoveToNext()) {
-    CXFA_EventParam preParam;
-    preParam.m_eType = XFA_EVENT_PostSave;
-    pWidgetHandler->ProcessEvent(pNode, &preParam);
-  }
-  pXFADocView->UpdateDocView();
-  pContext->ClearChangeMark();
-  return true;
-}
-
-bool SendPreSaveToXFADoc(CPDFXFA_Context* pContext,
-                         std::vector<RetainPtr<IFX_SeekableStream>>* fileList) {
-  if (!pContext->ContainsXFAForm())
-    return true;
-
-  CXFA_FFDocView* pXFADocView = pContext->GetXFADocView();
-  if (!pXFADocView)
-    return true;
-
-  CXFA_FFWidgetHandler* pWidgetHandler = pXFADocView->GetWidgetHandler();
-  auto it = pXFADocView->CreateReadyNodeIterator();
-  while (CXFA_Node* pNode = it->MoveToNext()) {
-    CXFA_EventParam preParam;
-    preParam.m_eType = XFA_EVENT_PreSave;
-    pWidgetHandler->ProcessEvent(pNode, &preParam);
-  }
-  pXFADocView->UpdateDocView();
-  return SaveXFADocumentData(pContext, fileList);
-}
 #endif  // PDF_ENABLE_XFA
 
 bool DoDocSave(FPDF_DOCUMENT document,
@@ -230,7 +183,8 @@
   auto* pContext = static_cast<CPDFXFA_Context*>(pPDFDoc->GetExtension());
   if (pContext) {
     std::vector<RetainPtr<IFX_SeekableStream>> fileList;
-    SendPreSaveToXFADoc(pContext, &fileList);
+    pContext->SendPreSaveToXFADoc(&fileList);
+    SaveXFADocumentData(pContext, &fileList);
   }
 #endif  // PDF_ENABLE_XFA
 
@@ -249,7 +203,8 @@
   bool bRet = fileMaker.Create(flags);
 
 #ifdef PDF_ENABLE_XFA
-  SendPostSaveToXFADoc(pContext);
+  if (pContext)
+    pContext->SendPostSaveToXFADoc();
 #endif  // PDF_ENABLE_XFA
 
   return bRet;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 0725670..2aeeb52 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -26,6 +26,7 @@
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidgethandler.h"
 #include "xfa/fxfa/cxfa_fontmgr.h"
+#include "xfa/fxfa/cxfa_readynodeiterator.h"
 
 namespace {
 
@@ -306,3 +307,42 @@
   return pdfium::MakeUnique<CXFA_FWLAdapterTimerMgr>(
       m_pFormFillEnv->GetTimerHandler());
 }
+
+void CPDFXFA_Context::SendPostSaveToXFADoc() {
+  if (!ContainsXFAForm())
+    return;
+
+  CXFA_FFDocView* pXFADocView = GetXFADocView();
+  if (!pXFADocView)
+    return;
+
+  CXFA_FFWidgetHandler* pWidgetHandler = pXFADocView->GetWidgetHandler();
+  auto it = pXFADocView->CreateReadyNodeIterator();
+  while (CXFA_Node* pNode = it->MoveToNext()) {
+    CXFA_EventParam preParam;
+    preParam.m_eType = XFA_EVENT_PostSave;
+    pWidgetHandler->ProcessEvent(pNode, &preParam);
+  }
+  pXFADocView->UpdateDocView();
+  ClearChangeMark();
+}
+
+void CPDFXFA_Context::SendPreSaveToXFADoc(
+    std::vector<RetainPtr<IFX_SeekableStream>>* fileList) {
+  if (!ContainsXFAForm())
+    return;
+
+  CXFA_FFDocView* pXFADocView = GetXFADocView();
+  if (!pXFADocView)
+    return;
+
+  CXFA_FFWidgetHandler* pWidgetHandler = pXFADocView->GetWidgetHandler();
+  auto it = pXFADocView->CreateReadyNodeIterator();
+  while (CXFA_Node* pNode = it->MoveToNext()) {
+    CXFA_EventParam preParam;
+    preParam.m_eType = XFA_EVENT_PreSave;
+    pWidgetHandler->ProcessEvent(pNode, &preParam);
+  }
+  pXFADocView->UpdateDocView();
+  return;
+}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index 3f7780b..67404d6 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -90,6 +90,9 @@
                      const WideString& wsEncode) override;
 
   std::unique_ptr<IFWL_AdapterTimerMgr> NewTimerMgr() override;
+  void SendPostSaveToXFADoc();
+  void SendPreSaveToXFADoc(
+      std::vector<RetainPtr<IFX_SeekableStream>>* fileList);
 
  private:
   friend class CPDFXFA_DocEnvironment;