diff --git a/fpdfsdk/formfiller/cffl_combobox.cpp b/fpdfsdk/formfiller/cffl_combobox.cpp
index 531e17b..79de664 100644
--- a/fpdfsdk/formfiller/cffl_combobox.cpp
+++ b/fpdfsdk/formfiller/cffl_combobox.cpp
@@ -46,7 +46,6 @@
   static_cast<CFFL_PerWindowData*>(pAttachedData.get())->SetFormField(this);
   auto pWnd = std::make_unique<CPWL_ComboBox>(cp, std::move(pAttachedData));
   pWnd->Realize();
-  pWnd->SetFillerNotify(m_pFormFiller.Get());
 
   int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
   WideString swText;
diff --git a/fpdfsdk/formfiller/cffl_listbox.cpp b/fpdfsdk/formfiller/cffl_listbox.cpp
index 809c5cc..96b4aea 100644
--- a/fpdfsdk/formfiller/cffl_listbox.cpp
+++ b/fpdfsdk/formfiller/cffl_listbox.cpp
@@ -45,7 +45,6 @@
   static_cast<CFFL_PerWindowData*>(pAttachedData.get())->SetFormField(this);
   auto pWnd = std::make_unique<CPWL_ListBox>(cp, std::move(pAttachedData));
   pWnd->Realize();
-  pWnd->SetFillerNotify(m_pFormFiller.Get());
 
   for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++)
     pWnd->AddString(m_pWidget->GetOptionLabel(i));
diff --git a/fpdfsdk/formfiller/cffl_textfield.cpp b/fpdfsdk/formfiller/cffl_textfield.cpp
index 8c9e002..da46bcb 100644
--- a/fpdfsdk/formfiller/cffl_textfield.cpp
+++ b/fpdfsdk/formfiller/cffl_textfield.cpp
@@ -89,7 +89,6 @@
   static_cast<CFFL_PerWindowData*>(pAttachedData.get())->SetFormField(this);
   auto pWnd = std::make_unique<CPWL_Edit>(cp, std::move(pAttachedData));
   pWnd->Realize();
-  pWnd->SetFillerNotify(m_pFormFiller.Get());
 
   int32_t nMaxLen = m_pWidget->GetMaxLen();
   WideString swValue = m_pWidget->GetValue();
diff --git a/fpdfsdk/pwl/cpwl_combo_box.cpp b/fpdfsdk/pwl/cpwl_combo_box.cpp
index 37127e7..6f89e7d 100644
--- a/fpdfsdk/pwl/cpwl_combo_box.cpp
+++ b/fpdfsdk/pwl/cpwl_combo_box.cpp
@@ -296,11 +296,8 @@
     return Move(m_rcOldWindow, true, true);
   }
 
-  if (!m_pFillerNotify)
-    return true;
-
   ObservedPtr<CPWL_ComboBox> thisObserved(this);
-  if (m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), {}))
+  if (GetFillerNotify()->OnPopupPreOpen(GetAttachedData(), {}))
     return !!thisObserved;
   if (!thisObserved)
     return false;
@@ -313,8 +310,8 @@
 
   bool bBottom;
   float fPopupRet;
-  m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin, fPopupMax,
-                                   &bBottom, &fPopupRet);
+  GetFillerNotify()->QueryWherePopup(GetAttachedData(), fPopupMin, fPopupMax,
+                                     &bBottom, &fPopupRet);
   if (!FXSYS_IsFloatBigger(fPopupRet, 0.0f))
     return true;
 
@@ -331,7 +328,7 @@
   if (!Move(rcWindow, true, true))
     return false;
 
-  m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), {});
+  GetFillerNotify()->OnPopupPostOpen(GetAttachedData(), {});
   return !!thisObserved;
 }
 
@@ -347,12 +344,10 @@
   switch (nKeyCode) {
     case FWL_VKEY_Up:
       if (m_pList->GetCurSel() > 0) {
-        if (m_pFillerNotify) {
-          if (m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), nFlag))
-            return false;
-          if (m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), nFlag))
-            return false;
-        }
+        if (GetFillerNotify()->OnPopupPreOpen(GetAttachedData(), nFlag))
+          return false;
+        if (GetFillerNotify()->OnPopupPostOpen(GetAttachedData(), nFlag))
+          return false;
         if (m_pList->IsMovementKey(nKeyCode)) {
           if (m_pList->OnMovementKeyDown(nKeyCode, nFlag))
             return false;
@@ -362,12 +357,10 @@
       return true;
     case FWL_VKEY_Down:
       if (m_pList->GetCurSel() < m_pList->GetCount() - 1) {
-        if (m_pFillerNotify) {
-          if (m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), nFlag))
-            return false;
-          if (m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), nFlag))
-            return false;
-        }
+        if (GetFillerNotify()->OnPopupPreOpen(GetAttachedData(), nFlag))
+          return false;
+        if (GetFillerNotify()->OnPopupPostOpen(GetAttachedData(), nFlag))
+          return false;
         if (m_pList->IsMovementKey(nKeyCode)) {
           if (m_pList->OnMovementKeyDown(nKeyCode, nFlag))
             return false;
@@ -418,12 +411,10 @@
   if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
     return m_pEdit->OnChar(nChar, nFlag);
 
-  if (m_pFillerNotify) {
-    if (m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), nFlag))
-      return false;
-    if (m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), nFlag))
-      return false;
-  }
+  if (GetFillerNotify()->OnPopupPreOpen(GetAttachedData(), nFlag))
+    return false;
+  if (GetFillerNotify()->OnPopupPostOpen(GetAttachedData(), nFlag))
+    return false;
   if (!m_pList->IsChar(nChar, nFlag))
     return false;
   return m_pList->OnCharNotify(nChar, nFlag);
@@ -459,14 +450,3 @@
   m_pEdit->SelectAllText();
   m_nSelectItem = m_pList->GetCurSel();
 }
-
-void CPWL_ComboBox::SetFillerNotify(IPWL_FillerNotify* pNotify) {
-  CHECK_EQ(pNotify, GetCreationParams()->pFillerNotify);
-  m_pFillerNotify = pNotify;
-
-  if (m_pEdit)
-    m_pEdit->SetFillerNotify(pNotify);
-
-  if (m_pList)
-    m_pList->SetFillerNotify(pNotify);
-}
diff --git a/fpdfsdk/pwl/cpwl_combo_box.h b/fpdfsdk/pwl/cpwl_combo_box.h
index 89ae9cb..0d13b40 100644
--- a/fpdfsdk/pwl/cpwl_combo_box.h
+++ b/fpdfsdk/pwl/cpwl_combo_box.h
@@ -47,8 +47,6 @@
   bool Undo() override;
   bool Redo() override;
 
-  void SetFillerNotify(IPWL_FillerNotify* pNotify);
-
   void SetText(const WideString& text);
   void AddString(const WideString& str);
   int32_t GetSelect() const;
@@ -75,7 +73,6 @@
   bool m_bPopup = false;
   bool m_bBottom = true;
   int32_t m_nSelectItem = -1;
-  UnownedPtr<IPWL_FillerNotify> m_pFillerNotify;
 };
 
 #endif  // FPDFSDK_PWL_CPWL_COMBO_BOX_H_
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index 0a040de..5e8399a 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -331,33 +331,31 @@
     return true;
 
   if (nKeyCode == FWL_VKEY_Delete) {
-    if (m_pFillerNotify) {
-      WideString strChange;
-      WideString strChangeEx;
+    WideString strChange;
+    WideString strChangeEx;
 
-      int nSelStart;
-      int nSelEnd;
-      std::tie(nSelStart, nSelEnd) = GetSelection();
+    int nSelStart;
+    int nSelEnd;
+    std::tie(nSelStart, nSelEnd) = GetSelection();
 
-      if (nSelStart == nSelEnd)
-        nSelEnd = nSelStart + 1;
+    if (nSelStart == nSelEnd)
+      nSelEnd = nSelStart + 1;
 
-      ObservedPtr<CPWL_Wnd> thisObserved(this);
+    ObservedPtr<CPWL_Wnd> thisObserved(this);
 
-      bool bRC;
-      bool bExit;
-      std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke(
-          GetAttachedData(), strChange, strChangeEx, nSelStart, nSelEnd, true,
-          nFlag);
+    bool bRC;
+    bool bExit;
+    std::tie(bRC, bExit) = GetFillerNotify()->OnBeforeKeyStroke(
+        GetAttachedData(), strChange, strChangeEx, nSelStart, nSelEnd, true,
+        nFlag);
 
-      if (!thisObserved)
-        return false;
+    if (!thisObserved)
+      return false;
 
-      if (!bRC)
-        return false;
-      if (bExit)
-        return false;
-    }
+    if (!bRC)
+      return false;
+    if (bExit)
+      return false;
   }
 
   bool bRet = OnKeyDownInternal(nKeyCode, nFlag);
@@ -407,35 +405,32 @@
   bool bExit = false;
 
   if (!IsCTRLKeyDown(nFlag)) {
-    if (m_pFillerNotify) {
-      WideString swChange;
+    WideString swChange;
+    int nSelStart;
+    int nSelEnd;
+    std::tie(nSelStart, nSelEnd) = GetSelection();
 
-      int nSelStart;
-      int nSelEnd;
-      std::tie(nSelStart, nSelEnd) = GetSelection();
-
-      switch (nChar) {
-        case pdfium::ascii::kBackspace:
-          if (nSelStart == nSelEnd)
-            nSelStart = nSelEnd - 1;
-          break;
-        case pdfium::ascii::kReturn:
-          break;
-        default:
-          swChange += nChar;
-          break;
-      }
-
-      ObservedPtr<CPWL_Wnd> thisObserved(this);
-
-      WideString strChangeEx;
-      std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke(
-          GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, true,
-          nFlag);
-
-      if (!thisObserved)
-        return false;
+    switch (nChar) {
+      case pdfium::ascii::kBackspace:
+        if (nSelStart == nSelEnd)
+          nSelStart = nSelEnd - 1;
+        break;
+      case pdfium::ascii::kReturn:
+        break;
+      default:
+        swChange += nChar;
+        break;
     }
+
+    ObservedPtr<CPWL_Wnd> thisObserved(this);
+
+    WideString strChangeEx;
+    std::tie(bRC, bExit) = GetFillerNotify()->OnBeforeKeyStroke(
+        GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, true,
+        nFlag);
+
+    if (!thisObserved)
+      return false;
   }
 
   if (!bRC)
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 845f338..95474d5 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -16,7 +16,6 @@
 #include "core/fxcrt/widestring.h"
 #include "fpdfsdk/pwl/cpwl_wnd.h"
 #include "fpdfsdk/pwl/ipwl_fillernotify.h"
-#include "third_party/base/check_op.h"
 
 class CPDF_Font;
 class CPWL_Caret;
@@ -96,11 +95,6 @@
                                         const CFX_FloatRect& rcPlate,
                                         int32_t nCharArray);
 
-  void SetFillerNotify(IPWL_FillerNotify* pNotify) {
-    CHECK_EQ(pNotify, GetCreationParams()->pFillerNotify);
-    m_pFillerNotify = pNotify;
-  }
-
   bool SetCaret(bool bVisible,
                 const CFX_PointF& ptHead,
                 const CFX_PointF& ptFoot);
@@ -137,7 +131,6 @@
   CFX_FloatRect m_rcOldWindow;
   std::unique_ptr<CPWL_EditImpl> const m_pEditImpl;
   UnownedPtr<CPWL_Caret> m_pCaret;
-  UnownedPtr<IPWL_FillerNotify> m_pFillerNotify;
 };
 
 #endif  // FPDFSDK_PWL_CPWL_EDIT_H_
diff --git a/fpdfsdk/pwl/cpwl_list_box.cpp b/fpdfsdk/pwl/cpwl_list_box.cpp
index 04bd460..534ec8b 100644
--- a/fpdfsdk/pwl/cpwl_list_box.cpp
+++ b/fpdfsdk/pwl/cpwl_list_box.cpp
@@ -204,9 +204,6 @@
 
 bool CPWL_ListBox::OnNotifySelectionChanged(bool bKeyDown,
                                             Mask<FWL_EVENTFLAG> nFlag) {
-  if (!m_pFillerNotify)
-    return false;
-
   ObservedPtr<CPWL_Wnd> thisObserved(this);
 
   WideString swChange = GetText();
@@ -215,7 +212,7 @@
   int nSelEnd = pdfium::base::checked_cast<int>(swChange.GetLength());
   bool bRC;
   bool bExit;
-  std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke(
+  std::tie(bRC, bExit) = GetFillerNotify()->OnBeforeKeyStroke(
       GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown,
       nFlag);
 
diff --git a/fpdfsdk/pwl/cpwl_list_box.h b/fpdfsdk/pwl/cpwl_list_box.h
index f0df413..7a10681 100644
--- a/fpdfsdk/pwl/cpwl_list_box.h
+++ b/fpdfsdk/pwl/cpwl_list_box.h
@@ -12,7 +12,6 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "fpdfsdk/pwl/cpwl_list_ctrl.h"
 #include "fpdfsdk/pwl/cpwl_wnd.h"
-#include "third_party/base/check_op.h"
 
 class IPWL_FillerNotify;
 
@@ -76,16 +75,10 @@
   float GetFirstHeight() const;
   CFX_FloatRect GetListRect() const;
 
-  void SetFillerNotify(IPWL_FillerNotify* pNotify) {
-    CHECK_EQ(pNotify, GetCreationParams()->pFillerNotify);
-    m_pFillerNotify = pNotify;
-  }
-
  protected:
   bool m_bMouseDown = false;
   bool m_bHoverSel = false;
   std::unique_ptr<CPWL_ListCtrl> m_pListCtrl;
-  UnownedPtr<IPWL_FillerNotify> m_pFillerNotify;
 };
 
 #endif  // FPDFSDK_PWL_CPWL_LIST_BOX_H_
