Remove IPDFSDK_AnnotHandler::Annot_OnLoad().
Instead of going through CPDFSDK_AnnotHandlerMgr::Annot_OnLoad()
and IPDFSDK_AnnotHandler::Annot_OnLoad(), implement
CPDFSDK_Annot::OnLoad() as a virtual method, with an override in
CPDFSDK_Widget, and call that directly.
Change-Id: Ibc687d1254fc7c0b366d136d70f62f002bbe606a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92191
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annot.h b/fpdfsdk/cpdfsdk_annot.h
index 3979d0b..d96876c 100644
--- a/fpdfsdk/cpdfsdk_annot.h
+++ b/fpdfsdk/cpdfsdk_annot.h
@@ -25,6 +25,7 @@
virtual CPDFSDK_BAAnnot* AsBAAnnot();
virtual CPDFXFA_Widget* AsXFAWidget();
+ virtual void OnLoad() {}
virtual int GetLayoutOrder() const;
virtual CPDF_Annot* GetPDFAnnot() const;
virtual CPDF_Annot::Subtype GetAnnotSubtype() const = 0;
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index a1fc06b..bcf3999 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -56,11 +56,6 @@
}
#endif // PDF_ENABLE_XFA
-void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
- DCHECK(pAnnot);
- GetAnnotHandler(pAnnot)->OnLoad(pAnnot);
-}
-
WideString CPDFSDK_AnnotHandlerMgr::Annot_GetText(CPDFSDK_Annot* pAnnot) {
return GetAnnotHandler(pAnnot)->GetText(pAnnot);
}
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index dd3143c..61f79a8 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -44,8 +44,6 @@
CPDFSDK_PageView* pPageView);
#endif // PDF_ENABLE_XFA
- void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
-
WideString Annot_GetText(CPDFSDK_Annot* pAnnot);
WideString Annot_GetSelectedText(CPDFSDK_Annot* pAnnot);
void Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index 0ae7a26..29b0883 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -185,8 +185,6 @@
return false;
}
-void CPDFSDK_BAAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) {}
-
bool CPDFSDK_BAAnnotHandler::IsFocusableAnnot(
const CPDF_Annot::Subtype& annot_type) const {
DCHECK(annot_type != CPDF_Annot::Subtype::WIDGET);
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index 50f9e45..e02c4b4 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -42,7 +42,6 @@
CFX_RenderDevice* pDevice,
const CFX_Matrix& mtUser2Device,
bool bDrawAnnots) override;
- void OnLoad(CPDFSDK_Annot* pAnnot) override;
void OnMouseEnter(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) override;
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 144f6c4..cb9dac9 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -605,9 +605,8 @@
std::unique_ptr<CPDFSDK_Annot> pNewAnnot =
pAnnotHandlerMgr->NewAnnotForXFA(pXFAAnnot, this);
DCHECK(pNewAnnot);
- CPDFSDK_Annot* pAnnot = pNewAnnot.get();
m_SDKAnnotArray.push_back(std::move(pNewAnnot));
- pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
+ m_SDKAnnotArray.back()->OnLoad();
}
return;
}
@@ -630,7 +629,7 @@
if (!pAnnot)
continue;
m_SDKAnnotArray.push_back(std::move(pAnnot));
- pAnnotHandlerMgr->Annot_OnLoad(m_SDKAnnotArray.back().get());
+ m_SDKAnnotArray.back()->OnLoad();
}
}
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 4517c62..6229ec1 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -820,6 +820,34 @@
return false;
}
+void CPDFSDK_Widget::OnLoad() {
+ if (IsSignatureWidget())
+ return;
+
+ if (!IsAppearanceValid())
+ ResetAppearance(absl::nullopt, CPDFSDK_Widget::kValueUnchanged);
+
+ FormFieldType field_type = GetFieldType();
+ if (field_type == FormFieldType::kTextField ||
+ field_type == FormFieldType::kComboBox) {
+ ObservedPtr<CPDFSDK_Annot> pObserved(this);
+ absl::optional<WideString> sValue = OnFormat();
+ if (!pObserved)
+ return;
+
+ if (sValue.has_value() && field_type == FormFieldType::kComboBox)
+ ResetAppearance(sValue, CPDFSDK_Widget::kValueUnchanged);
+ }
+
+#ifdef PDF_ENABLE_XFA
+ auto* pContext = m_pPageView->GetFormFillEnv()->GetDocExtension();
+ if (pContext && pContext->ContainsExtensionForegroundForm()) {
+ if (!IsAppearanceValid() && !GetValue().IsEmpty())
+ ResetXFAAppearance(CPDFSDK_Widget::kValueUnchanged);
+ }
+#endif // PDF_ENABLE_XFA
+}
+
CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) {
switch (eAAT) {
case CPDF_AAction::kCursorEnter:
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index 2b373a1..17ddc52 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -49,6 +49,7 @@
~CPDFSDK_Widget() override;
// CPDFSDK_BAAnnot:
+ void OnLoad() override;
CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT) override;
bool IsAppearanceValid() override;
int GetLayoutOrder() const override;
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 05284cd..0873825 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -194,35 +194,6 @@
return false;
}
-void CPDFSDK_WidgetHandler::OnLoad(CPDFSDK_Annot* pAnnot) {
- CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
- if (pWidget->IsSignatureWidget())
- return;
-
- if (!pWidget->IsAppearanceValid())
- pWidget->ResetAppearance(absl::nullopt, CPDFSDK_Widget::kValueUnchanged);
-
- FormFieldType fieldType = pWidget->GetFieldType();
- if (fieldType == FormFieldType::kTextField ||
- fieldType == FormFieldType::kComboBox) {
- ObservedPtr<CPDFSDK_Annot> pObserved(pWidget);
- absl::optional<WideString> sValue = pWidget->OnFormat();
- if (!pObserved)
- return;
-
- if (sValue.has_value() && fieldType == FormFieldType::kComboBox)
- pWidget->ResetAppearance(sValue, CPDFSDK_Widget::kValueUnchanged);
- }
-
-#ifdef PDF_ENABLE_XFA
- auto* pContext = GetFormFillEnvironment()->GetDocExtension();
- if (pContext && pContext->ContainsExtensionForegroundForm()) {
- if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty())
- pWidget->ResetXFAAppearance(CPDFSDK_Widget::kValueUnchanged);
- }
-#endif // PDF_ENABLE_XFA
-}
-
bool CPDFSDK_WidgetHandler::OnSetFocus(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) {
if (!IsFocusableAnnot(pAnnot->GetPDFAnnot()->GetSubtype()))
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index 055aba1..c429cf4 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -42,7 +42,6 @@
CFX_RenderDevice* pDevice,
const CFX_Matrix& mtUser2Device,
bool bDrawAnnots) override;
- void OnLoad(CPDFSDK_Annot* pAnnot) override;
void OnMouseEnter(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) override;
void OnMouseExit(ObservedPtr<CPDFSDK_Annot>& pAnnot,
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 2c60aed..8a9b0e2 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -238,8 +238,6 @@
// to do highlight and shadow
}
-void CPDFXFA_WidgetHandler::OnLoad(CPDFSDK_Annot* pAnnot) {}
-
CFX_FloatRect CPDFXFA_WidgetHandler::GetViewBBox(CPDFSDK_Annot* pAnnot) {
CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot);
CXFA_Node* node = pXFAWidget->GetXFAFFWidget()->GetNode();
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
index a87c92c..c6364e3 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -46,7 +46,6 @@
CFX_RenderDevice* pDevice,
const CFX_Matrix& mtUser2Device,
bool bDrawAnnots) override;
- void OnLoad(CPDFSDK_Annot* pAnnot) override;
void OnMouseEnter(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) override;
void OnMouseExit(ObservedPtr<CPDFSDK_Annot>& pAnnot,
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index 2912063..adf32f6 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -59,7 +59,6 @@
CFX_RenderDevice* pDevice,
const CFX_Matrix& mtUser2Device,
bool bDrawAnnots) = 0;
- virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0;
virtual void OnMouseEnter(ObservedPtr<CPDFSDK_Annot>& pAnnot,
Mask<FWL_EVENTFLAG> nFlag) = 0;
virtual void OnMouseExit(ObservedPtr<CPDFSDK_Annot>& pAnnot,