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,