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.