diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 6feb146..ece3741 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -188,26 +188,18 @@
     return false;
 
   XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT);
-
   if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
       GetFieldType() == FormFieldType::kRadioButton) {
-    if (CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget()) {
-      CXFA_Node* node = hGroupWidget->GetNode();
-      if (node->IsWidgetReady()) {
-        if (pXFAWidgetHandler->HasEvent(node, eEventType))
-          return true;
-      }
+    CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget();
+    if (hGroupWidget &&
+        hGroupWidget->HasEventUnderHandler(eEventType, pXFAWidgetHandler)) {
+      return true;
     }
   }
 
   // Check |pWidget| again because JS may have destroyed it in the block above.
-  if (!pWidget)
-    return false;
-
-  CXFA_Node* node = pWidget->GetNode();
-  if (!node->IsWidgetReady())
-    return false;
-  return pXFAWidgetHandler->HasEvent(node, eEventType);
+  return pWidget &&
+         pWidget->HasEventUnderHandler(eEventType, pXFAWidgetHandler);
 }
 
 bool CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
@@ -241,16 +233,10 @@
   param.m_wsPrevText = data->sValue;
   if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
       GetFieldType() == FormFieldType::kRadioButton) {
-    if (CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget()) {
-      CXFA_Node* node = hGroupWidget->GetNode();
-      if (!node->IsWidgetReady())
-        return false;
-
-      param.m_pTarget = node;
-      if (pXFAWidgetHandler->ProcessEvent(node, &param) !=
-          XFA_EventError::kSuccess) {
-        return false;
-      }
+    CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget();
+    if (hGroupWidget &&
+        !hGroupWidget->ProcessEventUnderHandler(&param, pXFAWidgetHandler)) {
+      return false;
     }
   }
 
@@ -258,16 +244,11 @@
   if (!pWidget)
     return false;
 
-  XFA_EventError nRet = XFA_EventError::kNotExist;
-  CXFA_Node* node = pWidget->GetNode();
-  if (node->IsWidgetReady()) {
-    param.m_pTarget = node;
-    nRet = pXFAWidgetHandler->ProcessEvent(node, &param);
-  }
+  bool ret = pWidget->ProcessEventUnderHandler(&param, pXFAWidgetHandler);
   if (CXFA_FFDocView* pDocView = pContext->GetXFADocView())
     pDocView->UpdateDocView();
 
-  return nRet == XFA_EventError::kSuccess;
+  return ret;
 }
 
 void CPDFSDK_Widget::Synchronize(bool bSynchronizeElse) {
@@ -826,18 +807,10 @@
         param.m_bKeyDown = data->bKeyDown;
         param.m_bModifier = data->bModifier;
         param.m_wsPrevText = data->sValue;
-
-        XFA_EventError nRet = XFA_EventError::kNotExist;
-        CXFA_Node* node = hWidget->GetNode();
-        if (node->IsWidgetReady()) {
-          param.m_pTarget = node;
-          nRet = pXFAWidgetHandler->ProcessEvent(node, &param);
-        }
-
+        bool ret = hWidget->ProcessEventUnderHandler(&param, pXFAWidgetHandler);
         if (CXFA_FFDocView* pDocView = pContext->GetXFADocView())
           pDocView->UpdateDocView();
-
-        if (nRet == XFA_EventError::kSuccess)
+        if (ret)
           return true;
       }
     }
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 424e004..f6ea8ae 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -24,6 +24,7 @@
 #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"
 #include "xfa/fxfa/parser/cxfa_border.h"
@@ -330,6 +331,22 @@
 
 void CXFA_FFWidget::UpdateWidgetProperty() {}
 
+bool CXFA_FFWidget::HasEventUnderHandler(XFA_EVENTTYPE eEventType,
+                                         CXFA_FFWidgetHandler* pHandler) {
+  CXFA_Node* pNode = GetNode();
+  return pNode->IsWidgetReady() && pHandler->HasEvent(pNode, eEventType);
+}
+
+bool CXFA_FFWidget::ProcessEventUnderHandler(CXFA_EventParam* params,
+                                             CXFA_FFWidgetHandler* pHandler) {
+  CXFA_Node* pNode = GetNode();
+  if (!pNode->IsWidgetReady())
+    return false;
+
+  params->m_pTarget = pNode;
+  return pHandler->ProcessEvent(pNode, params) == XFA_EventError::kSuccess;
+}
+
 void CXFA_FFWidget::DrawBorder(CXFA_Graphics* pGS,
                                CXFA_Box* box,
                                const CFX_RectF& rtBorder,
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 228c524..253e772 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -16,15 +16,17 @@
 #include "xfa/fwl/cfwl_app.h"
 #include "xfa/fwl/cfwl_messagemouse.h"
 #include "xfa/fwl/cfwl_widget.h"
+#include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/fxfa.h"
 #include "xfa/fxfa/layout/cxfa_contentlayoutitem.h"
 
 class CFX_DIBitmap;
 class CXFA_Box;
-class CXFA_FFPageView;
-class CXFA_FFDocView;
-class CXFA_FFDoc;
 class CXFA_FFApp;
+class CXFA_FFDoc;
+class CXFA_FFDocView;
+class CXFA_FFPageView;
+class CXFA_FFWidgetHandler;
 class CXFA_Graphics;
 class CXFA_Image;
 class CXFA_Margin;
@@ -155,6 +157,11 @@
   bool IsAncestorOf(CXFA_FFWidget* pWidget);
   const CFWL_App* GetFWLApp();
 
+  bool HasEventUnderHandler(XFA_EVENTTYPE eEventType,
+                            CXFA_FFWidgetHandler* pHandler);
+  bool ProcessEventUnderHandler(CXFA_EventParam* params,
+                                CXFA_FFWidgetHandler* pHandler);
+
  protected:
   virtual bool PtInActiveRect(const CFX_PointF& point);
 
