Remove { delete this; } anti-pattern from IXFA_WidgetIterator
Review-Url: https://codereview.chromium.org/1976123003
diff --git a/xfa/fxfa/app/xfa_ffpageview.cpp b/xfa/fxfa/app/xfa_ffpageview.cpp
index f1898c8..e5a0573 100644
--- a/xfa/fxfa/app/xfa_ffpageview.cpp
+++ b/xfa/fxfa/app/xfa_ffpageview.cpp
@@ -197,6 +197,7 @@
}
return NULL;
}
+
CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator(
CXFA_FFPageView* pPageView,
uint32_t dwFilter)
@@ -206,10 +207,9 @@
->GetCurVersionMode() < XFA_VERSION_205;
Reset();
}
+
CXFA_FFTabOrderPageWidgetIterator::~CXFA_FFTabOrderPageWidgetIterator() {}
-void CXFA_FFTabOrderPageWidgetIterator::Release() {
- delete this;
-}
+
void CXFA_FFTabOrderPageWidgetIterator::Reset() {
CreateTabOrderWidgetArray();
m_iCurWidget = -1;
diff --git a/xfa/fxfa/app/xfa_rendercontext.cpp b/xfa/fxfa/app/xfa_rendercontext.cpp
index cc2ea4b..e7bacec 100644
--- a/xfa/fxfa/app/xfa_rendercontext.cpp
+++ b/xfa/fxfa/app/xfa_rendercontext.cpp
@@ -68,8 +68,6 @@
return XFA_RENDERSTATUS_Done;
}
void CXFA_RenderContext::StopRender() {
- if (m_pWidgetIterator) {
- m_pWidgetIterator->Release();
- m_pWidgetIterator = NULL;
- }
+ delete m_pWidgetIterator;
+ m_pWidgetIterator = nullptr;
}
diff --git a/xfa/fxfa/include/fxfa.h b/xfa/fxfa/include/fxfa.h
index 871ab71..a173a0e 100644
--- a/xfa/fxfa/include/fxfa.h
+++ b/xfa/fxfa/include/fxfa.h
@@ -541,7 +541,8 @@
class IXFA_WidgetIterator {
public:
- virtual void Release() = 0;
+ virtual ~IXFA_WidgetIterator() {}
+
virtual void Reset() = 0;
virtual CXFA_FFWidget* MoveToFirst() = 0;
virtual CXFA_FFWidget* MoveToLast() = 0;
@@ -549,9 +550,6 @@
virtual CXFA_FFWidget* MoveToPrevious() = 0;
virtual CXFA_FFWidget* GetCurrentWidget() = 0;
virtual FX_BOOL SetCurrentWidget(CXFA_FFWidget* hWidget) = 0;
-
- protected:
- virtual ~IXFA_WidgetIterator() {}
};
#endif // XFA_FXFA_INCLUDE_FXFA_H_
diff --git a/xfa/fxfa/include/xfa_ffdocview.h b/xfa/fxfa/include/xfa_ffdocview.h
index 7f1c631..473b820 100644
--- a/xfa/fxfa/include/xfa_ffdocview.h
+++ b/xfa/fxfa/include/xfa_ffdocview.h
@@ -125,20 +125,20 @@
int32_t m_iLock;
friend class CXFA_FFNotify;
};
+
class CXFA_FFDocWidgetIterator : public IXFA_WidgetIterator {
public:
CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot);
- virtual ~CXFA_FFDocWidgetIterator();
+ ~CXFA_FFDocWidgetIterator() override;
- virtual void Release() { delete this; }
-
- virtual void Reset();
- virtual CXFA_FFWidget* MoveToFirst();
- virtual CXFA_FFWidget* MoveToLast();
- virtual CXFA_FFWidget* MoveToNext();
- virtual CXFA_FFWidget* MoveToPrevious();
- virtual CXFA_FFWidget* GetCurrentWidget();
- virtual FX_BOOL SetCurrentWidget(CXFA_FFWidget* hWidget);
+ // IXFA_WidgetIterator:
+ void Reset() override;
+ CXFA_FFWidget* MoveToFirst() override;
+ CXFA_FFWidget* MoveToLast() override;
+ CXFA_FFWidget* MoveToNext() override;
+ CXFA_FFWidget* MoveToPrevious() override;
+ CXFA_FFWidget* GetCurrentWidget() override;
+ FX_BOOL SetCurrentWidget(CXFA_FFWidget* hWidget) override;
protected:
CXFA_ContainerIterator m_ContentIterator;
diff --git a/xfa/fxfa/include/xfa_ffpageview.h b/xfa/fxfa/include/xfa_ffpageview.h
index 75e418b..79b0afb 100644
--- a/xfa/fxfa/include/xfa_ffpageview.h
+++ b/xfa/fxfa/include/xfa_ffpageview.h
@@ -36,12 +36,11 @@
typedef CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
CXFA_TraverseStrategy_LayoutItem>
CXFA_LayoutItemIterator;
+
class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator {
public:
CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter);
- virtual ~CXFA_FFPageWidgetIterator();
-
- void Release() override { delete this; }
+ ~CXFA_FFPageWidgetIterator() override;
void Reset() override;
CXFA_FFWidget* MoveToFirst() override;
@@ -73,9 +72,7 @@
public:
CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView,
uint32_t dwFilter);
- virtual ~CXFA_FFTabOrderPageWidgetIterator();
-
- void Release() override;
+ ~CXFA_FFTabOrderPageWidgetIterator() override;
void Reset() override;
CXFA_FFWidget* MoveToFirst() override;