No need to observe garbage-collected CXFA_FFPageView.
Bug: pdfium:1563
Change-Id: Ic2dbaa2fff44c80a228bae9a5499a0c1b565edc1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73394
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index c5e956f..ab0ef57 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -610,16 +610,10 @@
if (!pXFAPageView)
return true;
- ObservedPtr<CXFA_FFPageView> pObservedXFAPageView(pXFAPageView);
- bool bRet = pXFAPageView->GetDocView()->SetFocus(hWidget);
+ if (pXFAPageView->GetDocView()->SetFocus(hWidget))
+ return true;
- // Check |pXFAPageView| again because |SetFocus| can trigger JS to destroy it.
- if (pObservedXFAPageView &&
- pXFAPageView->GetDocView()->GetFocusWidget() == hWidget) {
- bRet = true;
- }
-
- return bRet;
+ return pXFAPageView->GetDocView()->GetFocusWidget() == hWidget;
}
bool CPDFXFA_WidgetHandler::SetIndexSelected(ObservedPtr<CPDFSDK_Annot>* pAnnot,
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index 63798e9..ce2a1d6 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -9,7 +9,6 @@
#include <vector>
-#include "core/fxcrt/observed_ptr.h"
#include "fxjs/gc/heap.h"
#include "v8/include/cppgc/garbage-collected.h"
#include "v8/include/cppgc/member.h"
@@ -23,8 +22,7 @@
class CXFA_FFDocView;
class CXFA_TabParam;
-class CXFA_FFPageView final : public cppgc::GarbageCollected<CXFA_FFPageView>,
- public Observable {
+class CXFA_FFPageView final : public cppgc::GarbageCollected<CXFA_FFPageView> {
public:
CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
~CXFA_FFPageView();
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index b23e002..41b7931 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -23,6 +23,7 @@
#include "xfa/fxfa/cxfa_ffapp.h"
#include "xfa/fxfa/cxfa_ffdoc.h"
#include "xfa/fxfa/cxfa_ffdocview.h"
+#include "xfa/fxfa/cxfa_ffpageview.h"
#include "xfa/fxfa/cxfa_ffwidgethandler.h"
#include "xfa/fxfa/cxfa_imagerenderer.h"
#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
@@ -235,8 +236,9 @@
void CXFA_FFWidget::Trace(cppgc::Visitor* visitor) const {
visitor->Trace(m_pLayoutItem);
- visitor->Trace(m_pNode);
visitor->Trace(m_pDocView);
+ visitor->Trace(m_pPageView);
+ visitor->Trace(m_pNode);
}
CFWL_App* CXFA_FFWidget::GetFWLApp() const {
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 2eabd8b..4e33caf 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -21,7 +21,6 @@
#include "xfa/fwl/cfwl_messagemouse.h"
#include "xfa/fwl/cfwl_widget.h"
#include "xfa/fxfa/cxfa_eventparam.h"
-#include "xfa/fxfa/cxfa_ffpageview.h"
#include "xfa/fxfa/fxfa.h"
#include "xfa/fxfa/layout/cxfa_contentlayoutitem.h"
@@ -155,9 +154,9 @@
CXFA_Node* GetNode() const { return m_pNode.Get(); }
CXFA_ContentLayoutItem* GetLayoutItem() const { return m_pLayoutItem.Get(); }
void SetLayoutItem(CXFA_ContentLayoutItem* pItem) { m_pLayoutItem = pItem; }
- CXFA_FFPageView* GetPageView() const { return m_pPageView.Get(); }
- void SetPageView(CXFA_FFPageView* pPageView) { m_pPageView.Reset(pPageView); }
- CXFA_FFDocView* GetDocView() const { return m_pDocView.Get(); }
+ CXFA_FFPageView* GetPageView() const { return m_pPageView; }
+ void SetPageView(CXFA_FFPageView* pPageView) { m_pPageView = pPageView; }
+ CXFA_FFDocView* GetDocView() const { return m_pDocView; }
void SetDocView(CXFA_FFDocView* pDocView) { m_pDocView = pDocView; }
CXFA_FFWidget* GetNextFFWidget() const;
@@ -204,7 +203,7 @@
cppgc::Member<CXFA_ContentLayoutItem> m_pLayoutItem;
cppgc::Member<CXFA_FFDocView> m_pDocView;
- ObservedPtr<CXFA_FFPageView> m_pPageView;
+ cppgc::Member<CXFA_FFPageView> m_pPageView;
cppgc::Member<CXFA_Node> const m_pNode;
mutable CFX_RectF m_WidgetRect;
};