Make CXFA_FFPageWidgetIterator CPPGC_STACK_ALLOCATED
This is necessary because it contains the field m_sIterator which
has a CPPGC_STACK_ALLOCATED type.
Change-Id: I1accc7b0c736999f3a174774411ff3c56c8b700b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/104450
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 4c82e7f..1bbaeeb 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -543,11 +543,11 @@
CPDF_Document::Extension* pContext = m_pFormFillEnv->GetDocExtension();
if (pContext && pContext->ContainsExtensionFullForm()) {
CXFA_FFPageView* pageView = protector->GetXFAPageView();
- CXFA_FFWidget::IteratorIface* pWidgetHandler =
- pageView->CreateGCedFormWidgetIterator(Mask<XFA_WidgetStatus>{
- XFA_WidgetStatus::kVisible, XFA_WidgetStatus::kViewable});
+ CXFA_FFPageWidgetIterator pWidgetHandler(
+ pageView, Mask<XFA_WidgetStatus>{XFA_WidgetStatus::kVisible,
+ XFA_WidgetStatus::kViewable});
- while (CXFA_FFWidget* pXFAAnnot = pWidgetHandler->MoveToNext()) {
+ while (CXFA_FFWidget* pXFAAnnot = pWidgetHandler.MoveToNext()) {
m_SDKAnnotArray.push_back(
std::make_unique<CPDFXFA_Widget>(pXFAAnnot, this));
m_SDKAnnotArray.back()->OnLoad();
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index 93eae67..6f4f2b7 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -271,12 +271,11 @@
CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
if (!pWidgetHandler)
return -1;
-
- CXFA_FFWidget::IteratorIface* pWidgetIterator =
- pPageView->CreateGCedFormWidgetIterator(XFA_WidgetStatus::kViewable);
+ CXFA_FFPageWidgetIterator pWidgetIterator(pPageView,
+ XFA_WidgetStatus::kViewable);
CXFA_FFWidget* pXFAAnnot;
- while ((pXFAAnnot = pWidgetIterator->MoveToNext()) != nullptr) {
+ while ((pXFAAnnot = pWidgetIterator.MoveToNext()) != nullptr) {
if (pXFAAnnot->GetFormFieldType() == FormFieldType::kXFA)
continue;
@@ -298,12 +297,12 @@
gs.SetClipRect(rectClip);
CXFA_FFPageView* xfaView = GetXFAPageView();
- CXFA_FFWidget::IteratorIface* pWidgetIterator =
- xfaView->CreateGCedFormWidgetIterator(Mask<XFA_WidgetStatus>{
- XFA_WidgetStatus::kVisible, XFA_WidgetStatus::kViewable});
+ CXFA_FFPageWidgetIterator pWidgetIterator(
+ xfaView, Mask<XFA_WidgetStatus>{XFA_WidgetStatus::kVisible,
+ XFA_WidgetStatus::kViewable});
while (true) {
- CXFA_FFWidget* pWidget = pWidgetIterator->MoveToNext();
+ CXFA_FFWidget* pWidget = pWidgetIterator.MoveToNext();
if (!pWidget)
break;
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 47d0a4c..5549bfb 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -261,13 +261,6 @@
return GetPageMatrix(CFX_RectF(0, 0, pItem->GetPageSize()), rtDisp, iRotate);
}
-CXFA_FFWidget::IteratorIface* CXFA_FFPageView::CreateGCedFormWidgetIterator(
- Mask<XFA_WidgetStatus> dwWidgetFilter) {
- return cppgc::MakeGarbageCollected<CXFA_FFPageWidgetIterator>(
- GetDocView()->GetDoc()->GetHeap()->GetAllocationHandle(), this,
- dwWidgetFilter);
-}
-
CXFA_FFWidget::IteratorIface* CXFA_FFPageView::CreateGCedTraverseWidgetIterator(
Mask<XFA_WidgetStatus> dwWidgetFilter) {
return cppgc::MakeGarbageCollected<CXFA_FFTabOrderPageWidgetIterator>(
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index 214e1f2..9af01c0 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -37,9 +37,7 @@
CFX_RectF GetPageViewRect() const;
CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const;
- // These always return a non-null iterator from the gc heap.
- CXFA_FFWidget::IteratorIface* CreateGCedFormWidgetIterator(
- Mask<XFA_WidgetStatus> dwWidgetFilter);
+ // This always returns a non-null iterator from the gc heap.
CXFA_FFWidget::IteratorIface* CreateGCedTraverseWidgetIterator(
Mask<XFA_WidgetStatus> dwWidgetFilter);
@@ -51,11 +49,12 @@
cppgc::Member<CXFA_ViewLayoutItem> m_pLayoutItem;
};
-class CXFA_FFPageWidgetIterator final
- : public cppgc::GarbageCollected<CXFA_FFPageWidgetIterator>,
- public CXFA_FFWidget::IteratorIface {
+class CXFA_FFPageWidgetIterator final : public CXFA_FFWidget::IteratorIface {
+ CPPGC_STACK_ALLOCATED();
+
public:
- CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
+ Mask<XFA_WidgetStatus> dwFilter);
~CXFA_FFPageWidgetIterator() override;
void Trace(cppgc::Visitor* visitor) const {}
@@ -69,9 +68,6 @@
bool SetCurrentWidget(CXFA_FFWidget* hWidget) override;
private:
- CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
- Mask<XFA_WidgetStatus> dwFilter);
-
CXFA_LayoutItemIterator m_sIterator;
const Mask<XFA_WidgetStatus> m_dwFilter;
const bool m_bIgnoreRelevant;