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;
 };