Remove bool arg from ResetPWLWindow().
Split into virtual RestorePWLWindow() and ResetPWLWindow() methods.
-- add helper method to invoke one or the other based on age.
-- re-org header to keep virtual methods together.
-- avoid some assignments in conditionals.
-- fix pre-existing IWYU.
Change-Id: I683103f06369fc93087f0654b682ac3672e32afe
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81231
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/formfiller/cffl_formfield.cpp b/fpdfsdk/formfiller/cffl_formfield.cpp
index 90ba187..c87e31c 100644
--- a/fpdfsdk/formfiller/cffl_formfield.cpp
+++ b/fpdfsdk/formfiller/cffl_formfield.cpp
@@ -365,8 +365,8 @@
if (pPrivateData->AppearanceAgeEquals(m_pWidget->GetAppearanceAge()))
return pWnd;
- return ResetPWLWindow(pPageView,
- pPrivateData->ValueAgeEquals(m_pWidget->GetValueAge()));
+ return ResetPWLWindowForValueAge(pPageView, m_pWidget,
+ pPrivateData->GetValueAge());
}
void CFFL_FormField::DestroyPWLWindow(CPDFSDK_PageView* pPageView) {
@@ -469,7 +469,7 @@
nFlag)) {
if (!pObserved)
return false;
- ResetPWLWindow(pPageView, false);
+ ResetPWLWindow(pPageView);
return true;
}
if (!pObserved)
@@ -478,7 +478,7 @@
if (!pInteractiveFormFiller->OnValidate(&pObserved, pPageView, nFlag)) {
if (!pObserved)
return false;
- ResetPWLWindow(pPageView, false);
+ ResetPWLWindow(pPageView);
return true;
}
if (!pObserved)
@@ -529,8 +529,18 @@
void CFFL_FormField::RestoreState(CPDFSDK_PageView* pPageView) {}
-CPWL_Wnd* CFFL_FormField::ResetPWLWindow(CPDFSDK_PageView* pPageView,
- bool bRestoreValue) {
+CPWL_Wnd* CFFL_FormField::ResetPWLWindowForValueAge(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Widget* pWidget,
+ uint32_t nValueAge) {
+ return nValueAge == pWidget->GetValueAge() ? RestorePWLWindow(pPageView)
+ : ResetPWLWindow(pPageView);
+}
+
+CPWL_Wnd* CFFL_FormField::ResetPWLWindow(CPDFSDK_PageView* pPageView) {
+ return GetPWLWindow(pPageView);
+}
+
+CPWL_Wnd* CFFL_FormField::RestorePWLWindow(CPDFSDK_PageView* pPageView) {
return GetPWLWindow(pPageView);
}
diff --git a/fpdfsdk/formfiller/cffl_formfield.h b/fpdfsdk/formfiller/cffl_formfield.h
index 2359970..e7e6b88 100644
--- a/fpdfsdk/formfiller/cffl_formfield.h
+++ b/fpdfsdk/formfiller/cffl_formfield.h
@@ -103,10 +103,13 @@
virtual std::unique_ptr<CPWL_Wnd> NewPWLWindow(
const CPWL_Wnd::CreateParams& cp,
std::unique_ptr<IPWL_SystemHandler::PerWindowData> pAttachedData) = 0;
- virtual CPWL_Wnd* ResetPWLWindow(CPDFSDK_PageView* pPageView,
- bool bRestoreValue);
virtual void SaveState(CPDFSDK_PageView* pPageView);
virtual void RestoreState(CPDFSDK_PageView* pPageView);
+ virtual bool IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
+#ifdef PDF_ENABLE_XFA
+ virtual bool IsFieldFull(CPDFSDK_PageView* pPageView);
+#endif // PDF_ENABLE_XFA
CFX_Matrix GetCurMatrix();
CFX_FloatRect GetFocusBox(CPDFSDK_PageView* pPageView);
@@ -114,15 +117,10 @@
CFX_FloatRect PWLtoFFL(const CFX_FloatRect& rect);
CFX_PointF FFLtoPWL(const CFX_PointF& point);
CFX_PointF PWLtoFFL(const CFX_PointF& point);
-
bool CommitData(CPDFSDK_PageView* pPageView, uint32_t nFlag);
- virtual bool IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
-
-#ifdef PDF_ENABLE_XFA
- virtual bool IsFieldFull(CPDFSDK_PageView* pPageView);
-#endif // PDF_ENABLE_XFA
-
+ CPWL_Wnd* ResetPWLWindowForValueAge(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Widget* pWidget,
+ uint32_t nValueAge);
CPWL_Wnd* GetPWLWindow(CPDFSDK_PageView* pPageView) const;
CPWL_Wnd* CreateOrUpdatePWLWindow(CPDFSDK_PageView* pPageView);
void DestroyPWLWindow(CPDFSDK_PageView* pPageView);
@@ -137,6 +135,9 @@
CPDFSDK_Annot* GetSDKAnnot() const { return m_pWidget.Get(); }
protected:
+ virtual CPWL_Wnd* ResetPWLWindow(CPDFSDK_PageView* pPageView);
+ virtual CPWL_Wnd* RestorePWLWindow(CPDFSDK_PageView* pPageView);
+
// If the inheriting widget has its own fontmap and a PWL_Edit widget that
// access that fontmap then you have to call DestroyWindows before destroying
// the font map in order to not get a use-after-free.
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index 38004b2..5728bdb 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -119,10 +119,9 @@
return;
if (pWidget->IsAppModified()) {
- if (CFFL_FormField* pFormField = GetFormField(pWidget)) {
- pFormField->ResetPWLWindow(pPageView,
- pWidget->GetValueAge() == nValueAge);
- }
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
}
}
}
@@ -153,10 +152,9 @@
return;
if (pWidget->IsAppModified()) {
- if (CFFL_FormField* pFormField = GetFormField(pWidget)) {
- pFormField->ResetPWLWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
}
}
}
@@ -193,10 +191,9 @@
return true;
if (pWidget->IsAppModified()) {
- if (CFFL_FormField* pFormField = GetFormField(pWidget)) {
- pFormField->ResetPWLWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
}
}
}
@@ -272,7 +269,7 @@
CFFL_FormField* pFormField = GetFormField(pWidget);
if (pFormField)
- pFormField->ResetPWLWindow(pPageView, nValueAge == pWidget->GetValueAge());
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
return true;
}
@@ -404,10 +401,9 @@
return false;
if (pWidget->IsAppModified()) {
- if (CFFL_FormField* pFiller = GetFormField(pWidget)) {
- pFiller->ResetPWLWindow(pPageView,
- nValueAge == pWidget->GetValueAge());
- }
+ CFFL_FormField* pFiller = GetFormField(pWidget);
+ if (pFiller)
+ pFiller->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
}
}
}
@@ -773,8 +769,9 @@
if (nAge == pWidget->GetAppearanceAge())
return false;
- if (CFFL_FormField* pFormField = GetFormField(pWidget))
- pFormField->ResetPWLWindow(pPageView, nValueAge == pWidget->GetValueAge());
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
return false;
}
@@ -803,9 +800,9 @@
if (nAge == pWidget->GetAppearanceAge())
return false;
- if (CFFL_FormField* pFormField = GetFormField(pWidget))
- pFormField->ResetPWLWindow(pPageView, nValueAge == pWidget->GetValueAge());
-
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
return true;
}
@@ -834,9 +831,9 @@
if (nAge == pWidget->GetAppearanceAge())
return false;
- if (CFFL_FormField* pFormField = GetFormField(pWidget))
- pFormField->ResetPWLWindow(pPageView, nValueAge == pWidget->GetValueAge());
-
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
return true;
}
@@ -862,12 +859,13 @@
m_bNotifying = false;
if (!pAnnot->HasObservable() || !IsValidAnnot(pPageView, pWidget))
return true;
+
if (nAge == pWidget->GetAppearanceAge())
return false;
- if (CFFL_FormField* pFormField = GetFormField(pWidget))
- pFormField->ResetPWLWindow(pPageView, nValueAge == pWidget->GetValueAge());
-
+ CFFL_FormField* pFormField = GetFormField(pWidget);
+ if (pFormField)
+ pFormField->ResetPWLWindowForValueAge(pPageView, pWidget, nValueAge);
return true;
}
#endif // PDF_ENABLE_XFA
@@ -936,8 +934,8 @@
bool bExit = false;
if (nAge != pWidget->GetAppearanceAge()) {
- CPWL_Wnd* pWnd = pFormField->ResetPWLWindow(
- pPageView, nValueAge == pWidget->GetValueAge());
+ CPWL_Wnd* pWnd = pFormField->ResetPWLWindowForValueAge(
+ pPageView, pWidget.Get(), nValueAge);
if (!pWnd)
return {true, true};
diff --git a/fpdfsdk/formfiller/cffl_privatedata.h b/fpdfsdk/formfiller/cffl_privatedata.h
index f8c4e0c..e6e17f0 100644
--- a/fpdfsdk/formfiller/cffl_privatedata.h
+++ b/fpdfsdk/formfiller/cffl_privatedata.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_FORMFILLER_CFFL_PRIVATEDATA_H_
#define FPDFSDK_FORMFILLER_CFFL_PRIVATEDATA_H_
+#include <memory>
+
#include "core/fxcrt/observed_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
#include "fpdfsdk/pwl/ipwl_systemhandler.h"
@@ -31,7 +33,7 @@
bool AppearanceAgeEquals(uint32_t age) const {
return age == m_nAppearanceAge;
}
- bool ValueAgeEquals(uint32_t age) const { return age == m_nValueAge; }
+ uint32_t GetValueAge() const { return m_nValueAge; }
private:
CFFL_PrivateData(const CFFL_PrivateData& that);
diff --git a/fpdfsdk/formfiller/cffl_textobject.cpp b/fpdfsdk/formfiller/cffl_textobject.cpp
index d4f5430..cc58b8f 100644
--- a/fpdfsdk/formfiller/cffl_textobject.cpp
+++ b/fpdfsdk/formfiller/cffl_textobject.cpp
@@ -9,22 +9,6 @@
#include "core/fpdfapi/page/cpdf_page.h"
#include "core/fpdfdoc/cpdf_bafontmap.h"
-CPWL_Wnd* CFFL_TextObject::ResetPWLWindow(CPDFSDK_PageView* pPageView,
- bool bRestoreValue) {
- if (bRestoreValue)
- SaveState(pPageView);
-
- DestroyPWLWindow(pPageView);
- if (bRestoreValue)
- RestoreState(pPageView);
-
- ObservedPtr<CPWL_Wnd> pRet(bRestoreValue
- ? GetPWLWindow(pPageView)
- : CreateOrUpdatePWLWindow(pPageView));
- m_pWidget->UpdateField(); // May invoke JS, invalidating |pRet|.
- return pRet.Get();
-}
-
CFFL_TextObject::CFFL_TextObject(CPDFSDK_FormFillEnvironment* pApp,
CPDFSDK_Widget* pWidget)
: CFFL_FormField(pApp, pWidget) {}
@@ -35,6 +19,22 @@
DestroyWindows();
}
+CPWL_Wnd* CFFL_TextObject::ResetPWLWindow(CPDFSDK_PageView* pPageView) {
+ DestroyPWLWindow(pPageView);
+ ObservedPtr<CPWL_Wnd> pRet(CreateOrUpdatePWLWindow(pPageView));
+ m_pWidget->UpdateField(); // May invoke JS, invalidating |pRet|.
+ return pRet.Get();
+}
+
+CPWL_Wnd* CFFL_TextObject::RestorePWLWindow(CPDFSDK_PageView* pPageView) {
+ SaveState(pPageView);
+ DestroyPWLWindow(pPageView);
+ RestoreState(pPageView);
+ ObservedPtr<CPWL_Wnd> pRet(GetPWLWindow(pPageView));
+ m_pWidget->UpdateField(); // May invoke JS, invalidating |pRet|.
+ return pRet.Get();
+}
+
CPDF_BAFontMap* CFFL_TextObject::MaybeCreateFontMap() {
if (!m_pFontMap) {
m_pFontMap = std::make_unique<CPDF_BAFontMap>(
diff --git a/fpdfsdk/formfiller/cffl_textobject.h b/fpdfsdk/formfiller/cffl_textobject.h
index c7287a7..b5d3785 100644
--- a/fpdfsdk/formfiller/cffl_textobject.h
+++ b/fpdfsdk/formfiller/cffl_textobject.h
@@ -18,8 +18,8 @@
class CFFL_TextObject : public CFFL_FormField {
public:
// CFFL_FormField:
- CPWL_Wnd* ResetPWLWindow(CPDFSDK_PageView* pPageView,
- bool bRestoreValue) override;
+ CPWL_Wnd* ResetPWLWindow(CPDFSDK_PageView* pPageView) override;
+ CPWL_Wnd* RestorePWLWindow(CPDFSDK_PageView* pPageView) override;
protected:
CFFL_TextObject(CPDFSDK_FormFillEnvironment* pApp, CPDFSDK_Widget* pWidget);