diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
index 8901394..c62f300 100644
--- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
+++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp
@@ -6,6 +6,7 @@
 
 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h"
 
+#include <memory>
 #include <utility>
 #include <vector>
 
@@ -14,6 +15,8 @@
 
 namespace {
 
+std::vector<std::unique_ptr<CFWL_TimerInfo>>* g_TimerArray = nullptr;
+
 class CFWL_FWLAdapterTimerInfo final : public CFWL_TimerInfo {
  public:
   CFWL_FWLAdapterTimerInfo(IFWL_AdapterTimerMgr* mgr,
@@ -25,29 +28,41 @@
   CFWL_Timer* pTimer;
 };
 
+void TimerProc(int32_t idEvent) {
+  if (!g_TimerArray)
+    return;
+
+  for (const auto& info : *g_TimerArray) {
+    auto* pInfo = static_cast<CFWL_FWLAdapterTimerInfo*>(info.get());
+    if (pInfo->idEvent == idEvent) {
+      pInfo->pTimer->Run(pInfo);
+      break;
+    }
+  }
+}
+
 }  // namespace
 
-std::vector<CFWL_TimerInfo*>* CXFA_FWLAdapterTimerMgr::s_TimerArray = nullptr;
 
 CXFA_FWLAdapterTimerMgr::CXFA_FWLAdapterTimerMgr(
     CPDFSDK_FormFillEnvironment* pFormFillEnv)
     : m_pFormFillEnv(pFormFillEnv) {}
 
-CXFA_FWLAdapterTimerMgr::~CXFA_FWLAdapterTimerMgr() {}
+CXFA_FWLAdapterTimerMgr::~CXFA_FWLAdapterTimerMgr() = default;
 
-void CXFA_FWLAdapterTimerMgr::Start(CFWL_Timer* pTimer,
-                                    uint32_t dwElapse,
-                                    bool bImmediately,
-                                    CFWL_TimerInfo** pTimerInfo) {
+CFWL_TimerInfo* CXFA_FWLAdapterTimerMgr::Start(CFWL_Timer* pTimer,
+                                               uint32_t dwElapse,
+                                               bool bImmediately) {
+  if (!g_TimerArray)
+    g_TimerArray = new std::vector<std::unique_ptr<CFWL_TimerInfo>>;
+
   if (!m_pFormFillEnv)
-    return;
+    return nullptr;
 
   int32_t id_event = m_pFormFillEnv->SetTimer(dwElapse, TimerProc);
-  if (!s_TimerArray)
-    s_TimerArray = new std::vector<CFWL_TimerInfo*>;
-
-  *pTimerInfo = new CFWL_FWLAdapterTimerInfo(this, id_event, pTimer);
-  s_TimerArray->push_back(*pTimerInfo);
+  g_TimerArray->push_back(
+      pdfium::MakeUnique<CFWL_FWLAdapterTimerInfo>(this, id_event, pTimer));
+  return g_TimerArray->back().get();
 }
 
 void CXFA_FWLAdapterTimerMgr::Stop(CFWL_TimerInfo* pTimerInfo) {
@@ -57,27 +72,11 @@
   CFWL_FWLAdapterTimerInfo* pInfo =
       static_cast<CFWL_FWLAdapterTimerInfo*>(pTimerInfo);
   m_pFormFillEnv->KillTimer(pInfo->idEvent);
-  if (!s_TimerArray)
+  if (!g_TimerArray)
     return;
 
-  auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo);
-  if (it != s_TimerArray->end()) {
-    s_TimerArray->erase(it);
-    delete pInfo;
-  }
-}
-
-// static
-void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) {
-  if (!s_TimerArray)
-    return;
-
-  for (auto* info : *s_TimerArray) {
-    CFWL_FWLAdapterTimerInfo* pInfo =
-        static_cast<CFWL_FWLAdapterTimerInfo*>(info);
-    if (pInfo->idEvent == idEvent) {
-      pInfo->pTimer->Run(pInfo);
-      break;
-    }
-  }
+  pdfium::FakeUniquePtr<CFWL_TimerInfo> fake(pInfo);
+  auto it = std::find(g_TimerArray->begin(), g_TimerArray->end(), fake);
+  if (it != g_TimerArray->end())
+    g_TimerArray->erase(it);
 }
diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
index d4db13f..bb5afb8 100644
--- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
+++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h
@@ -19,16 +19,12 @@
   explicit CXFA_FWLAdapterTimerMgr(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CXFA_FWLAdapterTimerMgr() override;
 
-  void Start(CFWL_Timer* pTimer,
-             uint32_t dwElapse,
-             bool bImmediately,
-             CFWL_TimerInfo** pTimerInfo) override;
+  CFWL_TimerInfo* Start(CFWL_Timer* pTimer,
+                        uint32_t dwElapse,
+                        bool bImmediately) override;
   void Stop(CFWL_TimerInfo* pTimerInfo) override;
 
  private:
-  static void TimerProc(int32_t idEvent);
-
-  static std::vector<CFWL_TimerInfo*>* s_TimerArray;
   UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv;
 };
 
diff --git a/xfa/fwl/cfwl_timer.cpp b/xfa/fwl/cfwl_timer.cpp
index ae9bcf2..c332555 100644
--- a/xfa/fwl/cfwl_timer.cpp
+++ b/xfa/fwl/cfwl_timer.cpp
@@ -27,7 +27,5 @@
   if (!m_pAdapterTimerMgr)
     return nullptr;
 
-  CFWL_TimerInfo* pTimerInfo = nullptr;
-  m_pAdapterTimerMgr->Start(this, dwElapse, bImmediately, &pTimerInfo);
-  return pTimerInfo;
+  return m_pAdapterTimerMgr->Start(this, dwElapse, bImmediately);
 }
diff --git a/xfa/fwl/ifwl_adaptertimermgr.h b/xfa/fwl/ifwl_adaptertimermgr.h
index 9f9e5ca..afa87c4 100644
--- a/xfa/fwl/ifwl_adaptertimermgr.h
+++ b/xfa/fwl/ifwl_adaptertimermgr.h
@@ -12,10 +12,10 @@
 class IFWL_AdapterTimerMgr {
  public:
   virtual ~IFWL_AdapterTimerMgr() = default;
-  virtual void Start(CFWL_Timer* pTimer,
-                     uint32_t dwElapse,
-                     bool bImmediately,
-                     CFWL_TimerInfo** pTimerInfo) = 0;
+
+  virtual CFWL_TimerInfo* Start(CFWL_Timer* pTimer,
+                                uint32_t dwElapse,
+                                bool bImmediately) = 0;
   virtual void Stop(CFWL_TimerInfo* pTimerInfo) = 0;
 };
 
