diff --git a/fpdfsdk/cfx_systemhandler.h b/fpdfsdk/cfx_systemhandler.h
index def797e..c72e587 100644
--- a/fpdfsdk/cfx_systemhandler.h
+++ b/fpdfsdk/cfx_systemhandler.h
@@ -9,6 +9,7 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/timerhandler_iface.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "fpdfsdk/pwl/ipwl_systemhandler.h"
 
@@ -16,7 +17,8 @@
 class CPDFSDK_FormFillEnvironment;
 class CPDFSDK_Widget;
 
-class CFX_SystemHandler final : public IPWL_SystemHandler {
+class CFX_SystemHandler final : public TimerHandlerIface,
+                                public IPWL_SystemHandler {
  public:
   explicit CFX_SystemHandler(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CFX_SystemHandler() override;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index c4afcac..48a0ec6 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -197,6 +197,7 @@
   void JS_docSubmitForm(void* formData, int length, const WideString& URL);
 
   ByteString GetAppName() const { return ByteString(); }
+  TimerHandlerIface* GetTimerHandler() const { return m_pSysHandler.get(); }
   IPWL_SystemHandler* GetSysHandler() const { return m_pSysHandler.get(); }
   FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
 
diff --git a/fpdfsdk/formfiller/cffl_formfiller.cpp b/fpdfsdk/formfiller/cffl_formfiller.cpp
index 44ad7ff..4bc42af 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_formfiller.cpp
@@ -365,6 +365,7 @@
     dwCreateFlags |= PWS_AUTOFONTSIZE;
 
   cp.dwFlags = dwCreateFlags;
+  cp.pTimerHandler = m_pFormFillEnv->GetTimerHandler();
   cp.pSystemHandler = m_pFormFillEnv->GetSysHandler();
   return cp;
 }
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index f441d019..0725670 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -304,5 +304,5 @@
   if (!m_pFormFillEnv)
     return nullptr;
   return pdfium::MakeUnique<CXFA_FWLAdapterTimerMgr>(
-      m_pFormFillEnv->GetSysHandler());
+      m_pFormFillEnv->GetTimerHandler());
 }
diff --git a/fpdfsdk/pwl/cpwl_caret.cpp b/fpdfsdk/pwl/cpwl_caret.cpp
index 936c1c6..5be6ff0 100644
--- a/fpdfsdk/pwl/cpwl_caret.cpp
+++ b/fpdfsdk/pwl/cpwl_caret.cpp
@@ -85,7 +85,7 @@
 
     m_ptHead = ptHead;
     m_ptFoot = ptFoot;
-    m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetSystemHandler(), this,
+    m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetTimerHandler(), this,
                                               kCaretFlashIntervalMs);
 
     if (!CPWL_Wnd::SetVisible(true))
diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.cpp b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
index e1deb8f..209c465 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.cpp
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
@@ -676,7 +676,7 @@
 
   NotifyScrollWindow();
   m_bMinOrMax = true;
-  m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetSystemHandler(), this, 100);
+  m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetTimerHandler(), this, 100);
 }
 
 void CPWL_ScrollBar::OnMinButtonLBUp(const CFX_PointF& point) {}
@@ -690,7 +690,7 @@
 
   NotifyScrollWindow();
   m_bMinOrMax = false;
-  m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetSystemHandler(), this, 100);
+  m_pTimer = pdfium::MakeUnique<CPWL_Timer>(GetTimerHandler(), this, 100);
 }
 
 void CPWL_ScrollBar::OnMaxButtonLBUp(const CFX_PointF& point) {}
diff --git a/fpdfsdk/pwl/cpwl_timer.cpp b/fpdfsdk/pwl/cpwl_timer.cpp
index 9979138..a501c7f 100644
--- a/fpdfsdk/pwl/cpwl_timer.cpp
+++ b/fpdfsdk/pwl/cpwl_timer.cpp
@@ -18,11 +18,11 @@
 
 }  // namespace
 
-CPWL_Timer::CPWL_Timer(IPWL_SystemHandler* pSystemHandler,
+CPWL_Timer::CPWL_Timer(TimerHandlerIface* pTimerHandler,
                        CallbackIface* pCallbackIface,
                        int32_t nInterval)
-    : m_nTimerID(pSystemHandler->SetTimer(nInterval, TimerProc)),
-      m_pSystemHandler(pSystemHandler),
+    : m_nTimerID(pTimerHandler->SetTimer(nInterval, TimerProc)),
+      m_pTimerHandler(pTimerHandler),
       m_pCallbackIface(pCallbackIface) {
   ASSERT(m_pCallbackIface);
   if (HasValidID())
@@ -31,7 +31,7 @@
 
 CPWL_Timer::~CPWL_Timer() {
   if (HasValidID()) {
-    m_pSystemHandler->KillTimer(m_nTimerID);
+    m_pTimerHandler->KillTimer(m_nTimerID);
     GetPWLTimeMap().erase(m_nTimerID);
   }
 }
diff --git a/fpdfsdk/pwl/cpwl_timer.h b/fpdfsdk/pwl/cpwl_timer.h
index 8d1a093..2258674 100644
--- a/fpdfsdk/pwl/cpwl_timer.h
+++ b/fpdfsdk/pwl/cpwl_timer.h
@@ -7,8 +7,8 @@
 #ifndef FPDFSDK_PWL_CPWL_TIMER_H_
 #define FPDFSDK_PWL_CPWL_TIMER_H_
 
+#include "core/fxcrt/timerhandler_iface.h"
 #include "core/fxcrt/unowned_ptr.h"
-#include "fpdfsdk/pwl/ipwl_systemhandler.h"
 
 class CPWL_TimerHandler;
 
@@ -20,7 +20,7 @@
     virtual void OnTimerFired() = 0;
   };
 
-  CPWL_Timer(IPWL_SystemHandler* pSystemHandler,
+  CPWL_Timer(TimerHandlerIface* pTimerHandler,
              CallbackIface* pCallbackIface,
              int32_t nInterval);
   ~CPWL_Timer();
@@ -29,11 +29,11 @@
   static void TimerProc(int32_t idEvent);
 
   bool HasValidID() const {
-    return m_nTimerID != IPWL_SystemHandler::kInvalidTimerID;
+    return m_nTimerID != TimerHandlerIface::kInvalidTimerID;
   }
 
   const int32_t m_nTimerID;
-  UnownedPtr<IPWL_SystemHandler> const m_pSystemHandler;
+  UnownedPtr<TimerHandlerIface> const m_pTimerHandler;
   UnownedPtr<CallbackIface> const m_pCallbackIface;
 };
 
diff --git a/fpdfsdk/pwl/cpwl_wnd.h b/fpdfsdk/pwl/cpwl_wnd.h
index da6db99..45e6955 100644
--- a/fpdfsdk/pwl/cpwl_wnd.h
+++ b/fpdfsdk/pwl/cpwl_wnd.h
@@ -114,6 +114,7 @@
     ~CreateParams();
 
     CFX_FloatRect rcRectWnd;                          // required
+    UnownedPtr<TimerHandlerIface> pTimerHandler;      // required
     UnownedPtr<IPWL_SystemHandler> pSystemHandler;    // required
     UnownedPtr<IPVT_FontMap> pFontMap;                // required
     ObservedPtr<ProviderIface> pProvider;             // required
@@ -270,6 +271,9 @@
   bool IsNotifying() const { return m_bNotifying; }
   bool IsValid() const { return m_bCreated; }
   CreateParams* GetCreationParams() { return &m_CreationParams; }
+  TimerHandlerIface* GetTimerHandler() const {
+    return m_CreationParams.pTimerHandler.Get();
+  }
   IPWL_SystemHandler* GetSystemHandler() const {
     return m_CreationParams.pSystemHandler.Get();
   }
diff --git a/fpdfsdk/pwl/ipwl_systemhandler.h b/fpdfsdk/pwl/ipwl_systemhandler.h
index 017bffe..8a14d8e 100644
--- a/fpdfsdk/pwl/ipwl_systemhandler.h
+++ b/fpdfsdk/pwl/ipwl_systemhandler.h
@@ -11,11 +11,10 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
-#include "core/fxcrt/timerhandler_iface.h"
 
 class CFFL_FormFiller;
 
-class IPWL_SystemHandler : public TimerHandlerIface {
+class IPWL_SystemHandler {
  public:
   class PerWindowData {
    public:
@@ -23,7 +22,7 @@
     virtual std::unique_ptr<PerWindowData> Clone() const = 0;
   };
 
-  ~IPWL_SystemHandler() override = default;
+  virtual ~IPWL_SystemHandler() = default;
 
   virtual void InvalidateRect(PerWindowData* pWidgetData,
                               const CFX_FloatRect& rect) = 0;
diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp
index 1cded27..4cb37dd 100644
--- a/fxjs/cjs_runtime.cpp
+++ b/fxjs/cjs_runtime.cpp
@@ -143,7 +143,7 @@
 }
 
 TimerHandlerIface* CJS_Runtime::GetTimerHandler() const {
-  return m_pFormFillEnv ? m_pFormFillEnv->GetSysHandler() : nullptr;
+  return m_pFormFillEnv ? m_pFormFillEnv->GetTimerHandler() : nullptr;
 }
 
 void CJS_Runtime::SetFormFillEnvToDocument() {
diff --git a/fxjs/global_timer.cpp b/fxjs/global_timer.cpp
index 75c0a42..b3049a0 100644
--- a/fxjs/global_timer.cpp
+++ b/fxjs/global_timer.cpp
@@ -84,5 +84,5 @@
 }
 
 bool GlobalTimer::HasValidID() const {
-  return m_nTimerID != IPWL_SystemHandler::kInvalidTimerID;
+  return m_nTimerID != TimerHandlerIface::kInvalidTimerID;
 }
