Remove CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus().

Remove this method, CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(), and
CPDFXFA_WidgetHandler::OnXFAChangedFocus(). Instead, move the code to
CPDFXFA_Widget::OnChangedFocus(), simplify it, and call that directly.

Change-Id: I456c152565c1ce9285c75f3fa9fe5d3029f4b60d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92210
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index 421dcc0..7036a48 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -220,15 +220,6 @@
   return GetAnnotHandler(pAnnot.Get())->IsIndexSelected(pAnnot, index);
 }
 
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(
-    ObservedPtr<CPDFSDK_Annot>& pSetAnnot) {
-  CPDFXFA_Widget* pSetXFAWidget = ToXFAWidget(pSetAnnot.Get());
-  const bool bXFA = pSetXFAWidget && pSetXFAWidget->GetXFAFFWidget();
-  return !bXFA || m_pXFAWidgetHandler->OnXFAChangedFocus(pSetAnnot);
-}
-#endif  // PDF_ENABLE_XFA
-
 CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
     CPDFSDK_Annot* pAnnot) {
   DCHECK(pAnnot);
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index c261c98..b6625f1 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -92,10 +92,6 @@
                               bool selected);
   bool Annot_IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index);
 
-#ifdef PDF_ENABLE_XFA
-  bool Annot_OnChangeFocus(ObservedPtr<CPDFSDK_Annot>& pSetAnnot);
-#endif  // PDF_ENABLE_XFA
-
   CFX_FloatRect Annot_OnGetViewBBox(CPDFSDK_Annot* pAnnot);
   bool Annot_OnHitTest(CPDFSDK_Annot* pAnnot, const CFX_PointF& point);
 
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index 753d532..8290da4 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -22,7 +22,6 @@
 #include "public/fpdf_fwlevent.h"
 #include "third_party/base/check.h"
 #include "third_party/base/containers/contains.h"
-#include "third_party/base/notreached.h"
 
 namespace {
 
@@ -276,11 +275,3 @@
   DCHECK(pAnnot);
   return GetViewBBox(pAnnot).Contains(point);
 }
-
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_BAAnnotHandler::OnXFAChangedFocus(
-    ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
-  NOTREACHED();
-  return false;
-}
-#endif
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index f0e5630..4afce70 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -90,10 +90,6 @@
                         bool selected) override;
   bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
 
-#ifdef PDF_ENABLE_XFA
-  bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
-#endif  // PDF_ENABLE_XFA
-
  private:
   void InvalidateRect(CPDFSDK_Annot* annot);
   bool IsFocusableAnnot(const CPDF_Annot::Subtype& annot_type) const;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 5f6aec8..9bae35c 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -29,6 +29,10 @@
 #include "third_party/base/check.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
+#ifdef PDF_ENABLE_XFA
+#include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
+#endif
+
 static_assert(FXCT_ARROW ==
                   static_cast<int>(IPWL_SystemHandler::CursorStyle::kArrow),
               "kArrow value mismatch");
@@ -758,19 +762,20 @@
   if (!pAnnot->GetPageView()->IsValid())
     return false;
 
-  CPDFSDK_AnnotHandlerMgr* pAnnotHandler = GetAnnotHandlerMgr();
   if (m_pFocusAnnot)
     return false;
 
 #ifdef PDF_ENABLE_XFA
-  if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot))
+  CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot.Get());
+  if (pXFAWidget && pXFAWidget->OnChangedFocus())
     return false;
 
-  // |pAnnot| may be destroyed in |Annot_OnChangeFocus|.
+  // `pAnnot` may be destroyed in `OnChangedFocus()`.
   if (!pAnnot)
     return false;
 #endif  // PDF_ENABLE_XFA
 
+  CPDFSDK_AnnotHandlerMgr* pAnnotHandler = GetAnnotHandlerMgr();
   if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, {}))
     return false;
   if (m_pFocusAnnot)
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 24a2698..711f2a8 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -23,7 +23,6 @@
 #include "third_party/base/check.h"
 #include "third_party/base/check_op.h"
 #include "third_party/base/containers/contains.h"
-#include "third_party/base/notreached.h"
 
 CPDFSDK_WidgetHandler::CPDFSDK_WidgetHandler() = default;
 
@@ -313,11 +312,3 @@
   return pdfium::Contains(GetFormFillEnvironment()->GetFocusableAnnotSubtypes(),
                           annot_type);
 }
-
-#ifdef PDF_ENABLE_XFA
-bool CPDFSDK_WidgetHandler::OnXFAChangedFocus(
-    ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
-  NOTREACHED();
-  return false;
-}
-#endif
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index b37cc56..47fdc21 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -89,10 +89,6 @@
                         bool selected) override;
   bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
 
-#ifdef PDF_ENABLE_XFA
-  bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
-#endif
-
  private:
   bool IsFocusableAnnot(const CPDF_Annot::Subtype& annot_type) const;
 };
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
index 386dcba..2c9c665 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.cpp
@@ -7,6 +7,8 @@
 #include "fpdfsdk/fpdfxfa/cpdfxfa_widget.h"
 
 #include "fpdfsdk/ipdfsdk_annothandler.h"
+#include "xfa/fxfa/cxfa_ffdocview.h"
+#include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
 CPDFXFA_Widget::CPDFXFA_Widget(CXFA_FFWidget* pXFAFFWidget,
@@ -26,3 +28,19 @@
 CFX_FloatRect CPDFXFA_Widget::GetRect() const {
   return GetXFAFFWidget()->GetLayoutItem()->GetAbsoluteRect().ToFloatRect();
 }
+
+bool CPDFXFA_Widget::OnChangedFocus() {
+  CXFA_FFWidget* widget = GetXFAFFWidget();
+  CXFA_FFPageView* page_view = widget->GetPageView();
+  if (!page_view)
+    return false;
+
+  CXFA_FFDocView* doc_view = page_view->GetDocView();
+  if (!doc_view)
+    return false;
+
+  if (doc_view->SetFocus(widget))
+    return false;
+
+  return doc_view->GetFocusWidget() != widget;
+}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
index dd11990..d20ef24 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widget.h
@@ -26,6 +26,8 @@
 
   CXFA_FFWidget* GetXFAFFWidget() const { return m_pXFAFFWidget.Get(); }
 
+  bool OnChangedFocus();
+
  private:
   cppgc::Persistent<CXFA_FFWidget> const m_pXFAFFWidget;
 };
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 69a31a6..83854d0 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -449,29 +449,6 @@
   return true;
 }
 
-bool CPDFXFA_WidgetHandler::OnXFAChangedFocus(
-    ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
-  if (!pNewAnnot || !GetXFAFFWidgetHandler())
-    return true;
-
-  CPDFXFA_Widget* pNewXFAWidget = ToXFAWidget(pNewAnnot.Get());
-  if (!pNewXFAWidget)
-    return true;
-
-  CXFA_FFWidget* hWidget = pNewXFAWidget->GetXFAFFWidget();
-  if (!hWidget)
-    return true;
-
-  CXFA_FFPageView* pXFAPageView = hWidget->GetPageView();
-  if (!pXFAPageView)
-    return true;
-
-  if (pXFAPageView->GetDocView()->SetFocus(hWidget))
-    return true;
-
-  return pXFAPageView->GetDocView()->GetFocusWidget() == hWidget;
-}
-
 bool CPDFXFA_WidgetHandler::SetIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
                                              int index,
                                              bool selected) {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
index 080293c..c8920b5 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -91,7 +91,6 @@
                         int index,
                         bool selected) override;
   bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot, int index) override;
-  bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot) override;
 
  private:
   CXFA_FFWidgetHandler* GetXFAFFWidgetHandler();
diff --git a/fpdfsdk/ipdfsdk_annothandler.cpp b/fpdfsdk/ipdfsdk_annothandler.cpp
index 24921c1..3662fbe 100644
--- a/fpdfsdk/ipdfsdk_annothandler.cpp
+++ b/fpdfsdk/ipdfsdk_annothandler.cpp
@@ -6,16 +6,6 @@
 
 #include "fpdfsdk/ipdfsdk_annothandler.h"
 
-#include "third_party/base/notreached.h"
-
 IPDFSDK_AnnotHandler::IPDFSDK_AnnotHandler() = default;
 
 IPDFSDK_AnnotHandler::~IPDFSDK_AnnotHandler() = default;
-
-#ifdef PDF_ENABLE_XFA
-bool IPDFSDK_AnnotHandler::OnXFAChangedFocus(
-    ObservedPtr<CPDFSDK_Annot>& pNewAnnot) {
-  NOTREACHED();
-  return false;
-}
-#endif
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index 8dbc30a..12e6c69 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -103,10 +103,6 @@
   virtual bool IsIndexSelected(ObservedPtr<CPDFSDK_Annot>& pAnnot,
                                int index) = 0;
 
-#ifdef PDF_ENABLE_XFA
-  virtual bool OnXFAChangedFocus(ObservedPtr<CPDFSDK_Annot>& pNewAnnot);
-#endif  // PDF_ENABLE_XFA
-
  private:
   UnownedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
 };