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;
