Begin limiting xfa/fxfa includes to fpdfsdk/fdfpxfa.

The top-level fpdfsdk should have to go through fpdfsdk/fdfpxfa
to accomplish lower-level actions.

Change-Id: I8ac35bde11cf74962971449d0c366b447be7d599
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58957
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index f4807b6..68a833e 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -26,8 +26,6 @@
 #ifdef PDF_ENABLE_XFA
 #include "fpdfsdk/cpdfsdk_xfawidgethandler.h"
 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
-#include "xfa/fxfa/cxfa_ffpageview.h"
-#include "xfa/fxfa/cxfa_ffwidget.h"
 #endif  // PDF_ENABLE_XFA
 
 CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(
@@ -314,28 +312,10 @@
 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,
                                                      bool bNext) {
 #ifdef PDF_ENABLE_XFA
-  ObservedPtr<CPDFSDK_Annot> pObservedAnnot(pSDKAnnot);
-  CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView();
-  CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage();
+  CPDFXFA_Page* pPage = pSDKAnnot->GetPageView()->GetPDFXFAPage();
   if (pPage && !pPage->AsPDFPage()) {
     // For xfa annots in XFA pages not backed by PDF pages.
-    std::unique_ptr<IXFA_WidgetIterator> pWidgetIterator(
-        pPage->GetXFAPageView()->CreateWidgetIterator(
-            XFA_TRAVERSEWAY_Tranvalse, XFA_WidgetStatus_Visible |
-                                           XFA_WidgetStatus_Viewable |
-                                           XFA_WidgetStatus_Focused));
-
-    // Check |pSDKAnnot| again because JS may have destroyed it
-    if (!pObservedAnnot || !pWidgetIterator)
-      return nullptr;
-    if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget())
-      pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget());
-    CXFA_FFWidget* hNextFocus = bNext ? pWidgetIterator->MoveToNext()
-                                      : pWidgetIterator->MoveToPrevious();
-    if (!hNextFocus && pSDKAnnot)
-      hNextFocus = pWidgetIterator->MoveToFirst();
-
-    return pPageView->GetAnnotByXFAWidget(hNextFocus);
+    return pPage->GetNextXFAAnnot(pSDKAnnot, bNext);
   }
 #endif  // PDF_ENABLE_XFA
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index c0f383c..ab0ed8e 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -6,13 +6,15 @@
 
 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
 
+#include <memory>
+
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/render/cpdf_pagerendercache.h"
+#include "fpdfsdk/cpdfsdk_pageview.h"
 #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h"
-#include "public/fpdf_formfill.h"
-#include "third_party/base/compiler_specific.h"
+#include "third_party/base/ptr_util.h"
 #include "xfa/fxfa/cxfa_ffdocview.h"
 #include "xfa/fxfa/cxfa_ffpageview.h"
 
@@ -166,3 +168,27 @@
 
   return CFX_Matrix();
 }
+
+CPDFSDK_Annot* CPDFXFA_Page::GetNextXFAAnnot(CPDFSDK_Annot* pSDKAnnot,
+                                             bool bNext) {
+  ObservedPtr<CPDFSDK_Annot> pObservedAnnot(pSDKAnnot);
+  CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView();
+  std::unique_ptr<IXFA_WidgetIterator> pWidgetIterator(
+      GetXFAPageView()->CreateWidgetIterator(XFA_TRAVERSEWAY_Tranvalse,
+                                             XFA_WidgetStatus_Visible |
+                                                 XFA_WidgetStatus_Viewable |
+                                                 XFA_WidgetStatus_Focused));
+
+  // Check |pSDKAnnot| again because JS may have destroyed it
+  if (!pObservedAnnot || !pWidgetIterator)
+    return nullptr;
+
+  if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget())
+    pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget());
+  CXFA_FFWidget* hNextFocus =
+      bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious();
+  if (!hNextFocus && pSDKAnnot)
+    hNextFocus = pWidgetIterator->MoveToFirst();
+
+  return pPageView->GetAnnotByXFAWidget(hNextFocus);
+}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.h b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
index 8db5735..2d89603 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.h
@@ -17,6 +17,7 @@
 #include "third_party/base/optional.h"
 
 class CPDF_Dictionary;
+class CPDFSDK_Annot;
 class CPDFXFA_Context;
 class CXFA_FFPageView;
 
@@ -47,6 +48,7 @@
   int GetPageIndex() const { return m_iPageIndex; }
   void SetXFAPageViewIndex(int index) { m_iPageIndex = index; }
   CXFA_FFPageView* GetXFAPageView() const;
+  CPDFSDK_Annot* GetNextXFAAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext);
 
  private:
   // Refcounted class.