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;