diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index d4e05f5..8e9eac9 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -22,7 +22,6 @@
 #include "fpdfsdk/cpdfsdk_widget.h"
 #include "fpdfsdk/formfiller/cffl_formfield.h"
 #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
-#include "fpdfsdk/formfiller/cffl_perwindowdata.h"
 #include "fxjs/ijs_event_context.h"
 #include "fxjs/ijs_runtime.h"
 #include "third_party/base/check.h"
@@ -88,14 +87,8 @@
     m_pInfo->Release(m_pInfo);
 }
 
-void CPDFSDK_FormFillEnvironment::InvalidateRect(
-    IPWL_FillerNotify::PerWindowData* pWidgetData,
-    const CFX_FloatRect& rect) {
-  auto* pPrivateData = static_cast<CFFL_PerWindowData*>(pWidgetData);
-  CPDFSDK_Widget* widget = pPrivateData->GetWidget();
-  if (!widget)
-    return;
-
+void CPDFSDK_FormFillEnvironment::InvalidateRect(CPDFSDK_Widget* widget,
+                                                 const CFX_FloatRect& rect) {
   IPDF_Page* pPage = widget->GetPage();
   if (!pPage)
     return;
@@ -112,19 +105,11 @@
 }
 
 void CPDFSDK_FormFillEnvironment::OutputSelectedRect(
-    IPWL_FillerNotify::PerWindowData* pWidgetData,
+    CFFL_FormField* pFormField,
     const CFX_FloatRect& rect) {
   if (!m_pInfo || !m_pInfo->FFI_OutputSelectedRect)
     return;
 
-  auto* pPrivateData = static_cast<CFFL_PerWindowData*>(pWidgetData);
-  if (!pPrivateData)
-    return;
-
-  CFFL_FormField* pFormField = pPrivateData->GetFormField();
-  if (!pFormField)
-    return;
-
   auto* pPage = FPDFPageFromIPDFPage(pFormField->GetSDKWidget()->GetPage());
   DCHECK(pPage);
 
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 943e7c7..5f2bcc9 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -67,9 +67,9 @@
   void KillTimer(int32_t nTimerID) override;
 
   // CFFL_InteractiveFormFiller::CallbackIface:
-  void InvalidateRect(IPWL_FillerNotify::PerWindowData* pWidgetData,
+  void InvalidateRect(CPDFSDK_Widget* widget,
                       const CFX_FloatRect& rect) override;
-  void OutputSelectedRect(IPWL_FillerNotify::PerWindowData* pWidgetData,
+  void OutputSelectedRect(CFFL_FormField* pFormField,
                           const CFX_FloatRect& rect) override;
   bool IsSelectionImplemented() const override;
   void SetCursor(IPWL_FillerNotify::CursorStyle nCursorType) override;
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index dee3a7c..399608f 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -549,12 +549,25 @@
 
 void CFFL_InteractiveFormFiller::InvalidateRect(PerWindowData* pWidgetData,
                                                 const CFX_FloatRect& rect) {
-  GetCallbackIface()->InvalidateRect(pWidgetData, rect);
+  auto* pPrivateData = static_cast<CFFL_PerWindowData*>(pWidgetData);
+  CPDFSDK_Widget* pWidget = pPrivateData->GetWidget();
+  if (!pWidget)
+    return;
+
+  GetCallbackIface()->InvalidateRect(pWidget, rect);
 }
 
 void CFFL_InteractiveFormFiller::OutputSelectedRect(PerWindowData* pWidgetData,
                                                     const CFX_FloatRect& rect) {
-  GetCallbackIface()->OutputSelectedRect(pWidgetData, rect);
+  auto* pPrivateData = static_cast<CFFL_PerWindowData*>(pWidgetData);
+  if (!pPrivateData)
+    return;
+
+  CFFL_FormField* pFormField = pPrivateData->GetFormField();
+  if (!pFormField)
+    return;
+
+  GetCallbackIface()->OutputSelectedRect(pFormField, rect);
 }
 
 bool CFFL_InteractiveFormFiller::IsSelectionImplemented() const {
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
index 8dab3e4..583339d 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
@@ -38,9 +38,9 @@
     virtual CFX_Timer::HandlerIface* GetTimerHandler() = 0;
     virtual CPDFSDK_Annot* GetFocusAnnot() const = 0;
     virtual bool SetFocusAnnot(ObservedPtr<CPDFSDK_Annot>& pAnnot) = 0;
-    virtual void InvalidateRect(PerWindowData* pWidgetData,
+    virtual void InvalidateRect(CPDFSDK_Widget* pWidget,
                                 const CFX_FloatRect& rect) = 0;
-    virtual void OutputSelectedRect(PerWindowData* pWidgetData,
+    virtual void OutputSelectedRect(CFFL_FormField* pFormField,
                                     const CFX_FloatRect& rect) = 0;
     virtual bool IsSelectionImplemented() const = 0;
     virtual void SetCursor(CursorStyle nCursorStyle) = 0;
