Add CFXA_FFTextEdit::PreFinalize()
Still too much work going on in its destructor. Needs to be virtual
since we may only have a member to a parent class.
Bug: pdfium:1563
Change-Id: I6f2c11ff118ddcc7ccaf1c75d87efd8ee9f718eb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/72914
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 1f52214..1ee30c2 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -34,12 +34,15 @@
CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_Node* pNode) : CXFA_FFField(pNode) {}
-CXFA_FFTextEdit::~CXFA_FFTextEdit() {
+CXFA_FFTextEdit::~CXFA_FFTextEdit() = default;
+
+void CXFA_FFTextEdit::PreFinalize() {
if (GetNormalWidget()) {
CFWL_NoteDriver* pNoteDriver =
GetNormalWidget()->GetFWLApp()->GetNoteDriver();
pNoteDriver->UnregisterEventTarget(GetNormalWidget());
}
+ CXFA_FFField::PreFinalize();
}
bool CXFA_FFTextEdit::LoadWidget() {
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index f3ad66c..5b4e298 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -24,6 +24,8 @@
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFTextEdit() override;
+ void PreFinalize() override;
+
// CXFA_FFField
bool LoadWidget() override;
void UpdateWidgetProperty() override;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 5a8c3c9..85930b9 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -231,6 +231,8 @@
CXFA_FFWidget::~CXFA_FFWidget() = default;
+void CXFA_FFWidget::PreFinalize() {}
+
void CXFA_FFWidget::Trace(cppgc::Visitor* visitor) const {
visitor->Trace(m_pLayoutItem);
visitor->Trace(m_pNode);
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index df72e6f..f49eaf6 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -15,6 +15,7 @@
#include "core/fxge/cfx_graphstatedata.h"
#include "fxjs/gc/heap.h"
#include "v8/include/cppgc/garbage-collected.h"
+#include "v8/include/cppgc/prefinalizer.h"
#include "v8/include/cppgc/visitor.h"
#include "xfa/fwl/cfwl_app.h"
#include "xfa/fwl/cfwl_messagemouse.h"
@@ -72,6 +73,8 @@
class CXFA_FFWidget : public cppgc::GarbageCollected<CXFA_FFWidget>,
public Observable,
public CFWL_Widget::AdapterIface {
+ CPPGC_USING_PRE_FINALIZER(CXFA_FFWidget, PreFinalize);
+
public:
enum FocusOption { kDoNotDrawFocus = 0, kDrawFocus };
enum HighlightOption { kNoHighlight = 0, kHighlight };
@@ -79,6 +82,7 @@
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFWidget() override;
+ virtual void PreFinalize();
virtual void Trace(cppgc::Visitor* visitor) const;
// CFWL_Widget::AdapterIface: