Move definition of FWl_KeyFlag to fwl_widgetdef.h

fwl_widgetdef.h now has both of the XFA-specific types that
shadow the public types in fpdf_fwlevent.h

-- Renane to XFA_FWL_KeyFlag for consistency with the other XFA
   shadow type name in the header.
-- Remove FWL_KeyFlagMask typedef in favor of direct usage of
   Mask<FWL_KeyFlag>.

Change-Id: I678c8e07ffce744855497fe955e4f93bfd7e37cc
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/83999
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
index 525f139..8181f5f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.cpp
@@ -650,8 +650,9 @@
   return pDocView->GetWidgetHandler();
 }
 
-FWL_KeyFlagMask CPDFXFA_WidgetHandler::GetKeyFlags(FWL_EventFlagMask dwFlag) {
-  FWL_KeyFlagMask dwFWLFlag;
+Mask<XFA_FWL_KeyFlag> CPDFXFA_WidgetHandler::GetKeyFlags(
+    FWL_EventFlagMask dwFlag) {
+  Mask<XFA_FWL_KeyFlag> dwFWLFlag;
 
   if (dwFlag & FWL_EVENTFLAG_ControlKey)
     dwFWLFlag |= FWL_KEYFLAG_Ctrl;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
index 1693a71..199ffc9 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_widgethandler.h
@@ -119,7 +119,7 @@
 
  private:
   CXFA_FFWidgetHandler* GetXFAFFWidgetHandler(CPDFSDK_Annot* pAnnot);
-  FWL_KeyFlagMask GetKeyFlags(FWL_EventFlagMask dwFlag);
+  Mask<XFA_FWL_KeyFlag> GetKeyFlags(FWL_EventFlagMask dwFlag);
 
   UnownedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
 };
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index a43f9f8..0cf696d 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -40,9 +40,9 @@
 constexpr int kEditMargin = 3;
 
 #if defined(OS_APPLE)
-constexpr FWL_KeyFlag kEditingModifier = FWL_KEYFLAG_Command;
+constexpr XFA_FWL_KeyFlag kEditingModifier = FWL_KEYFLAG_Command;
 #else
-constexpr FWL_KeyFlag kEditingModifier = FWL_KEYFLAG_Ctrl;
+constexpr XFA_FWL_KeyFlag kEditingModifier = FWL_KEYFLAG_Ctrl;
 #endif
 
 }  // namespace
diff --git a/xfa/fwl/cfwl_message.h b/xfa/fwl/cfwl_message.h
index 3027c45..7a6e565 100644
--- a/xfa/fwl/cfwl_message.h
+++ b/xfa/fwl/cfwl_message.h
@@ -7,25 +7,11 @@
 #ifndef XFA_FWL_CFWL_MESSAGE_H_
 #define XFA_FWL_CFWL_MESSAGE_H_
 
-#include <type_traits>
-
-#include "core/fxcrt/mask.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "v8/include/cppgc/macros.h"
 
 class CFWL_Widget;
 
-enum FWL_KeyFlag : uint8_t {
-  FWL_KEYFLAG_Ctrl = 1 << 0,
-  FWL_KEYFLAG_Alt = 1 << 1,
-  FWL_KEYFLAG_Shift = 1 << 2,
-  FWL_KEYFLAG_Command = 1 << 3,
-  FWL_KEYFLAG_LButton = 1 << 4,
-  FWL_KEYFLAG_RButton = 1 << 5,
-  FWL_KEYFLAG_MButton = 1 << 6
-};
-using FWL_KeyFlagMask = Mask<FWL_KeyFlag>;
-
 class CFWL_Message {
   CPPGC_STACK_ALLOCATED();  // Allow Raw/Unowned pointers.
 
diff --git a/xfa/fwl/cfwl_messagekey.cpp b/xfa/fwl/cfwl_messagekey.cpp
index 9d5f053..b9f91a1 100644
--- a/xfa/fwl/cfwl_messagekey.cpp
+++ b/xfa/fwl/cfwl_messagekey.cpp
@@ -8,7 +8,7 @@
 
 CFWL_MessageKey::CFWL_MessageKey(CFWL_Widget* pDstTarget,
                                  KeyCommand cmd,
-                                 FWL_KeyFlagMask flags,
+                                 Mask<XFA_FWL_KeyFlag> flags,
                                  uint32_t dwKeyCodeOrChar)
     : CFWL_Message(CFWL_Message::Type::kKey, nullptr, pDstTarget),
       m_dwCmd(cmd),
diff --git a/xfa/fwl/cfwl_messagekey.h b/xfa/fwl/cfwl_messagekey.h
index 34dc7d2..2354f66 100644
--- a/xfa/fwl/cfwl_messagekey.h
+++ b/xfa/fwl/cfwl_messagekey.h
@@ -7,6 +7,7 @@
 #ifndef XFA_FWL_CFWL_MESSAGEKEY_H_
 #define XFA_FWL_CFWL_MESSAGEKEY_H_
 
+#include "core/fxcrt/mask.h"
 #include "xfa/fwl/cfwl_message.h"
 #include "xfa/fwl/fwl_widgetdef.h"
 
@@ -16,12 +17,12 @@
 
   CFWL_MessageKey(CFWL_Widget* pDstTarget,
                   KeyCommand subtype,
-                  FWL_KeyFlagMask flags,
+                  Mask<XFA_FWL_KeyFlag> flags,
                   uint32_t dwKeyCodeOrChar);
   ~CFWL_MessageKey() override;
 
   const KeyCommand m_dwCmd;
-  const FWL_KeyFlagMask m_dwFlags;
+  const Mask<XFA_FWL_KeyFlag> m_dwFlags;
   const uint32_t m_dwKeyCodeOrChar;
 };
 
diff --git a/xfa/fwl/cfwl_messagemouse.cpp b/xfa/fwl/cfwl_messagemouse.cpp
index 2c01c69..4e11411 100644
--- a/xfa/fwl/cfwl_messagemouse.cpp
+++ b/xfa/fwl/cfwl_messagemouse.cpp
@@ -8,7 +8,7 @@
 
 CFWL_MessageMouse::CFWL_MessageMouse(CFWL_Widget* pDstTarget,
                                      MouseCommand cmd,
-                                     FWL_KeyFlagMask flags,
+                                     Mask<XFA_FWL_KeyFlag> flags,
                                      CFX_PointF pos)
     : CFWL_Message(CFWL_Message::Type::kMouse, nullptr, pDstTarget),
       m_dwCmd(cmd),
diff --git a/xfa/fwl/cfwl_messagemouse.h b/xfa/fwl/cfwl_messagemouse.h
index 05e4e49..9315087 100644
--- a/xfa/fwl/cfwl_messagemouse.h
+++ b/xfa/fwl/cfwl_messagemouse.h
@@ -8,7 +8,9 @@
 #define XFA_FWL_CFWL_MESSAGEMOUSE_H_
 
 #include "core/fxcrt/fx_coordinates.h"
+#include "core/fxcrt/mask.h"
 #include "xfa/fwl/cfwl_message.h"
+#include "xfa/fwl/fwl_widgetdef.h"
 
 class CFWL_MessageMouse final : public CFWL_Message {
  public:
@@ -27,12 +29,12 @@
 
   CFWL_MessageMouse(CFWL_Widget* pDstTarget,
                     MouseCommand cmd,
-                    FWL_KeyFlagMask flags,
+                    Mask<XFA_FWL_KeyFlag> flags,
                     CFX_PointF pos);
   ~CFWL_MessageMouse() override;
 
   const MouseCommand m_dwCmd;
-  FWL_KeyFlagMask m_dwFlags;
+  Mask<XFA_FWL_KeyFlag> m_dwFlags;
   CFX_PointF m_pos;
 };
 
diff --git a/xfa/fwl/cfwl_notedriver.cpp b/xfa/fwl/cfwl_notedriver.cpp
index f39fb37..740e88f 100644
--- a/xfa/fwl/cfwl_notedriver.cpp
+++ b/xfa/fwl/cfwl_notedriver.cpp
@@ -235,7 +235,8 @@
   if (m_pHover) {
     CFWL_MessageMouse msLeave(
         m_pHover.Get(), CFWL_MessageMouse::MouseCommand::kLeave,
-        FWL_KeyFlagMask(), pTarget->TransformTo(m_pHover.Get(), pMsg->m_pos));
+        Mask<XFA_FWL_KeyFlag>(),
+        pTarget->TransformTo(m_pHover.Get(), pMsg->m_pos));
     DispatchMessage(&msLeave, nullptr);
   }
   if (pTarget->GetClassID() == FWL_Type::Form) {
@@ -245,7 +246,7 @@
   m_pHover = pTarget;
 
   CFWL_MessageMouse msHover(pTarget, CFWL_MessageMouse::MouseCommand::kHover,
-                            FWL_KeyFlagMask(), pMsg->m_pos);
+                            Mask<XFA_FWL_KeyFlag>(), pMsg->m_pos);
   DispatchMessage(&msHover, nullptr);
 }
 
diff --git a/xfa/fwl/fwl_widgetdef.h b/xfa/fwl/fwl_widgetdef.h
index b391037..a3acaa3 100644
--- a/xfa/fwl/fwl_widgetdef.h
+++ b/xfa/fwl/fwl_widgetdef.h
@@ -7,8 +7,8 @@
 #ifndef XFA_FWL_FWL_WIDGETDEF_H_
 #define XFA_FWL_FWL_WIDGETDEF_H_
 
-// Same as enum FWL_VKEYCODE in public/fpdf_fwlevent.h, but duplicated to keep
-// xfa/fwl standalone.
+// Same as enum FWL_VKEYCODE in public/fpdf_fwlevent.h, but duplicated here
+// to keep xfa/fwl standalone.
 enum XFA_FWL_VKEYCODE {
   XFA_FWL_VKEY_Back = 0x08,
   XFA_FWL_VKEY_Tab = 0x09,
@@ -181,4 +181,16 @@
   XFA_FWL_VKEY_Unknown = 0,
 };
 
+// Derived from FWL_EVENTFLAG in public/fwl_event.h, but not the same
+// values bit-for-bit, duplicated here to keep XFA standalone.
+enum XFA_FWL_KeyFlag : uint8_t {
+  FWL_KEYFLAG_Ctrl = 1 << 0,
+  FWL_KEYFLAG_Alt = 1 << 1,
+  FWL_KEYFLAG_Shift = 1 << 2,
+  FWL_KEYFLAG_Command = 1 << 3,
+  FWL_KEYFLAG_LButton = 1 << 4,
+  FWL_KEYFLAG_RButton = 1 << 5,
+  FWL_KEYFLAG_MButton = 1 << 6
+};
+
 #endif  // XFA_FWL_FWL_WIDGETDEF_H_
diff --git a/xfa/fxfa/cxfa_ffbarcode.cpp b/xfa/fxfa/cxfa_ffbarcode.cpp
index 28d93ab..a2eecbd 100644
--- a/xfa/fxfa/cxfa_ffbarcode.cpp
+++ b/xfa/fxfa/cxfa_ffbarcode.cpp
@@ -255,7 +255,7 @@
 }
 
 bool CXFA_FFBarcode::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   auto* pBarCodeWidget = static_cast<CFWL_Barcode*>(GetNormalWidget());
diff --git a/xfa/fxfa/cxfa_ffbarcode.h b/xfa/fxfa/cxfa_ffbarcode.h
index 8bc3f09..f7ca50c 100644
--- a/xfa/fxfa/cxfa_ffbarcode.h
+++ b/xfa/fxfa/cxfa_ffbarcode.h
@@ -105,7 +105,7 @@
                     HighlightOption highlight) override;
   void UpdateWidgetProperty() override;
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
 
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.cpp b/xfa/fxfa/cxfa_ffcheckbutton.cpp
index 20209c3..28cb434 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/cxfa_ffcheckbutton.cpp
@@ -252,7 +252,7 @@
   GetApp()->GetFWLWidgetMgr()->OnDrawWidget(GetNormalWidget(), pGS, mt);
 }
 
-bool CXFA_FFCheckButton::OnLButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFCheckButton::OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                      const CFX_PointF& point) {
   if (!GetNormalWidget() || !IsButtonDown())
     return false;
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.h b/xfa/fxfa/cxfa_ffcheckbutton.h
index 9f8697b..1e7e6e9 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.h
+++ b/xfa/fxfa/cxfa_ffcheckbutton.h
@@ -30,7 +30,8 @@
   bool PerformLayout() override;
   bool UpdateFWLData() override;
   void UpdateWidgetProperty() override;
-  bool OnLButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
+  bool OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
   void OnProcessMessage(CFWL_Message* pMessage) override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
   void OnDrawWidget(CFGAS_GEGraphics* pGraphics,
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index 68cef5a..0ba8742 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -109,7 +109,7 @@
   pComboBox->EditModifyStyleExts(dwEditStyles, 0xFFFFFFFF);
 }
 
-bool CXFA_FFComboBox::OnRButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFComboBox::OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                   const CFX_PointF& point) {
   if (!CXFA_FFField::OnRButtonUp(dwFlags, point))
     return false;
diff --git a/xfa/fxfa/cxfa_ffcombobox.h b/xfa/fxfa/cxfa_ffcombobox.h
index 06062e1..63d5640 100644
--- a/xfa/fxfa/cxfa_ffcombobox.h
+++ b/xfa/fxfa/cxfa_ffcombobox.h
@@ -26,7 +26,8 @@
   CFX_RectF GetBBox(FocusOption focus) override;
   bool LoadWidget() override;
   void UpdateWidgetProperty() override;
-  bool OnRButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
+  bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
   bool OnKillFocus(CXFA_FFWidget* pNewWidget) override WARN_UNUSED_RESULT;
   bool CanUndo() override;
   bool CanRedo() override;
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index bd540e8..255239e 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -373,7 +373,7 @@
 
   CFWL_MessageMouse msg(GetNormalWidget(),
                         CFWL_MessageMouse::MouseCommand::kEnter,
-                        FWL_KeyFlagMask(), CFX_PointF());
+                        Mask<XFA_FWL_KeyFlag>(), CFX_PointF());
   SendMessageToFWLWidget(&msg);
   return true;
 }
@@ -384,7 +384,7 @@
 
   CFWL_MessageMouse msg(GetNormalWidget(),
                         CFWL_MessageMouse::MouseCommand::kLeave,
-                        FWL_KeyFlagMask(), CFX_PointF());
+                        Mask<XFA_FWL_KeyFlag>(), CFX_PointF());
   SendMessageToFWLWidget(&msg);
   return true;
 }
@@ -396,7 +396,7 @@
 }
 
 bool CXFA_FFField::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   if (!GetNormalWidget())
@@ -409,7 +409,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                  const CFX_PointF& point) {
   SetButtonDown(true);
   CFWL_MessageMouse msg(GetNormalWidget(),
@@ -419,7 +419,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnLButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                const CFX_PointF& point) {
   if (!GetNormalWidget())
     return false;
@@ -435,7 +435,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                    const CFX_PointF& point) {
   if (!GetNormalWidget())
     return false;
@@ -447,7 +447,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnMouseMove(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
                                const CFX_PointF& point) {
   if (!GetNormalWidget())
     return false;
@@ -459,7 +459,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnMouseWheel(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                                 const CFX_PointF& point,
                                 const CFX_Vector& delta) {
   if (!GetNormalWidget())
@@ -470,7 +470,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnRButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                  const CFX_PointF& point) {
   SetButtonDown(true);
 
@@ -481,7 +481,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnRButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                const CFX_PointF& point) {
   if (!GetNormalWidget())
     return false;
@@ -496,7 +496,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFField::OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                    const CFX_PointF& point) {
   if (!GetNormalWidget())
     return false;
@@ -534,7 +534,7 @@
 }
 
 bool CXFA_FFField::OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
-                             FWL_KeyFlagMask dwFlags) {
+                             Mask<XFA_FWL_KeyFlag> dwFlags) {
   if (!GetNormalWidget() || !GetDoc()->GetXFADoc()->IsInteractive())
     return false;
 
@@ -545,7 +545,7 @@
 }
 
 bool CXFA_FFField::OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
-                           FWL_KeyFlagMask dwFlags) {
+                           Mask<XFA_FWL_KeyFlag> dwFlags) {
   if (!GetNormalWidget() || !GetDoc()->GetXFADoc()->IsInteractive())
     return false;
 
@@ -555,7 +555,7 @@
   return true;
 }
 
-bool CXFA_FFField::OnChar(uint32_t dwChar, FWL_KeyFlagMask dwFlags) {
+bool CXFA_FFField::OnChar(uint32_t dwChar, Mask<XFA_FWL_KeyFlag> dwFlags) {
   if (!GetDoc()->GetXFADoc()->IsInteractive())
     return false;
   if (dwChar == pdfium::ascii::kTab)
diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h
index 63fdc47..36be0fb 100644
--- a/xfa/fxfa/cxfa_fffield.h
+++ b/xfa/fxfa/cxfa_fffield.h
@@ -35,28 +35,35 @@
   bool LoadWidget() override;
   bool PerformLayout() override;
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
   bool OnMouseEnter() override;
   bool OnMouseExit() override;
-  bool OnLButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnLButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+  bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point) override;
-  bool OnMouseMove(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnMouseWheel(FWL_KeyFlagMask dwFlags,
+  bool OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                     const CFX_PointF& point,
                     const CFX_Vector& delta) override;
-  bool OnRButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+  bool OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point) override;
   bool OnSetFocus(CXFA_FFWidget* pOldWidget) override WARN_UNUSED_RESULT;
   bool OnKillFocus(CXFA_FFWidget* pNewWidget) override WARN_UNUSED_RESULT;
-  bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode, FWL_KeyFlagMask dwFlags) override;
-  bool OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode, FWL_KeyFlagMask dwFlags) override;
-  bool OnChar(uint32_t dwChar, FWL_KeyFlagMask dwFlags) override;
+  bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
+                 Mask<XFA_FWL_KeyFlag> dwFlags) override;
+  bool OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
+               Mask<XFA_FWL_KeyFlag> dwFlags) override;
+  bool OnChar(uint32_t dwChar, Mask<XFA_FWL_KeyFlag> dwFlags) override;
   FWL_WidgetHit HitTest(const CFX_PointF& point) override;
 
   // IFWL_WidgetDelegate:
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index d794241..41a3017 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -95,7 +95,7 @@
 }
 
 bool CXFA_FFImageEdit::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   if (command != CFWL_MessageMouse::MouseCommand::kLeftButtonDown)
@@ -109,7 +109,7 @@
   return true;
 }
 
-bool CXFA_FFImageEdit::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFImageEdit::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                      const CFX_PointF& point) {
   SetButtonDown(true);
   CFWL_MessageMouse msg(GetNormalWidget(),
diff --git a/xfa/fxfa/cxfa_ffimageedit.h b/xfa/fxfa/cxfa_ffimageedit.h
index a513e0f..df5bc6b 100644
--- a/xfa/fxfa/cxfa_ffimageedit.h
+++ b/xfa/fxfa/cxfa_ffimageedit.h
@@ -23,10 +23,11 @@
                     HighlightOption highlight) override;
   bool LoadWidget() override;
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
-  bool OnLButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
+  bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
   void OnProcessMessage(CFWL_Message* pMessage) override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
   void OnDrawWidget(CFGAS_GEGraphics* pGraphics,
diff --git a/xfa/fxfa/cxfa_ffsignature.cpp b/xfa/fxfa/cxfa_ffsignature.cpp
index b38be4b..960559b 100644
--- a/xfa/fxfa/cxfa_ffsignature.cpp
+++ b/xfa/fxfa/cxfa_ffsignature.cpp
@@ -47,64 +47,64 @@
 }
 
 bool CXFA_FFSignature::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   return false;
 }
 
-bool CXFA_FFSignature::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                      const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnLButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                    const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                        const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnMouseMove(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
                                    const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnMouseWheel(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                                     const CFX_PointF& point,
                                     const CFX_Vector& delta) {
   return false;
 }
 
-bool CXFA_FFSignature::OnRButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                      const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnRButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                    const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFSignature::OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFSignature::OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                        const CFX_PointF& point) {
   return false;
 }
 
 bool CXFA_FFSignature::OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
-                                 FWL_KeyFlagMask dwFlags) {
+                                 Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
 bool CXFA_FFSignature::OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
-                               FWL_KeyFlagMask dwFlags) {
+                               Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
-bool CXFA_FFSignature::OnChar(uint32_t nChar, FWL_KeyFlagMask dwFlags) {
+bool CXFA_FFSignature::OnChar(uint32_t nChar, Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
diff --git a/xfa/fxfa/cxfa_ffsignature.h b/xfa/fxfa/cxfa_ffsignature.h
index a2554e4..96ff95e 100644
--- a/xfa/fxfa/cxfa_ffsignature.h
+++ b/xfa/fxfa/cxfa_ffsignature.h
@@ -20,26 +20,33 @@
                     HighlightOption highlight) override;
   bool LoadWidget() override;
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
   bool OnMouseEnter() override;
   bool OnMouseExit() override;
-  bool OnLButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnLButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+  bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point) override;
-  bool OnMouseMove(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnMouseWheel(FWL_KeyFlagMask dwFlags,
+  bool OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                     const CFX_PointF& point,
                     const CFX_Vector& delta) override;
-  bool OnRButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+  bool OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point) override;
-  bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode, FWL_KeyFlagMask dwFlags) override;
-  bool OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode, FWL_KeyFlagMask dwFlags) override;
-  bool OnChar(uint32_t dwChar, FWL_KeyFlagMask dwFlags) override;
+  bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
+                 Mask<XFA_FWL_KeyFlag> dwFlags) override;
+  bool OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
+               Mask<XFA_FWL_KeyFlag> dwFlags) override;
+  bool OnChar(uint32_t dwChar, Mask<XFA_FWL_KeyFlag> dwFlags) override;
   FWL_WidgetHit HitTest(const CFX_PointF& point) override;
   FormFieldType GetFormFieldType() override;
 
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index 1f51fa8..cdac507 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -98,7 +98,7 @@
 }
 
 bool CXFA_FFText::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   return command == CFWL_MessageMouse::MouseCommand::kLeftButtonDown &&
@@ -106,19 +106,19 @@
          !GetLinkURLAtPoint(point).IsEmpty();
 }
 
-bool CXFA_FFText::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFText::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                 const CFX_PointF& point) {
   SetButtonDown(true);
   return true;
 }
 
-bool CXFA_FFText::OnMouseMove(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFText::OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
                               const CFX_PointF& point) {
   return GetRectWithoutRotate().Contains(point) &&
          !GetLinkURLAtPoint(point).IsEmpty();
 }
 
-bool CXFA_FFText::OnLButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFText::OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                               const CFX_PointF& point) {
   if (!IsButtonDown())
     return false;
diff --git a/xfa/fxfa/cxfa_fftext.h b/xfa/fxfa/cxfa_fftext.h
index ab895ad..4747fb7 100644
--- a/xfa/fxfa/cxfa_fftext.h
+++ b/xfa/fxfa/cxfa_fftext.h
@@ -16,12 +16,15 @@
 
   // CXFA_FFWidget
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
-  bool OnLButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnLButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnMouseMove(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
+  bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
+  bool OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
   FWL_WidgetHit HitTest(const CFX_PointF& point) override;
   void RenderWidget(CFGAS_GEGraphics* pGS,
                     const CFX_Matrix& matrix,
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 8ada90c..9eea6fe 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -119,7 +119,7 @@
 }
 
 bool CXFA_FFTextEdit::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   if (command == CFWL_MessageMouse::MouseCommand::kRightButtonDown &&
@@ -132,7 +132,7 @@
   return true;
 }
 
-bool CXFA_FFTextEdit::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFTextEdit::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                     const CFX_PointF& point) {
   if (!IsFocused()) {
     GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
@@ -147,7 +147,7 @@
   return true;
 }
 
-bool CXFA_FFTextEdit::OnRButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFTextEdit::OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                     const CFX_PointF& point) {
   if (!IsFocused()) {
     GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
@@ -162,7 +162,7 @@
   return true;
 }
 
-bool CXFA_FFTextEdit::OnRButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFTextEdit::OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                   const CFX_PointF& point) {
   if (!CXFA_FFField::OnRButtonUp(dwFlags, point))
     return false;
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index d809ef7..9513f28 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -30,12 +30,15 @@
   bool LoadWidget() override;
   void UpdateWidgetProperty() override;
   bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command) override;
-  bool OnLButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonDown(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
-  bool OnRButtonUp(FWL_KeyFlagMask dwFlags, const CFX_PointF& point) override;
+  bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
+                     const CFX_PointF& point) override;
+  bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
+                   const CFX_PointF& point) override;
   bool OnSetFocus(CXFA_FFWidget* pOldWidget) override WARN_UNUSED_RESULT;
   bool OnKillFocus(CXFA_FFWidget* pNewWidget) override WARN_UNUSED_RESULT;
   void OnProcessMessage(CFWL_Message* pMessage) override;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 6e0c1cd..1c1584d 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -385,49 +385,49 @@
 }
 
 bool CXFA_FFWidget::AcceptsFocusOnButtonDown(
-    FWL_KeyFlagMask dwFlags,
+    Mask<XFA_FWL_KeyFlag> dwFlags,
     const CFX_PointF& point,
     CFWL_MessageMouse::MouseCommand command) {
   return false;
 }
 
-bool CXFA_FFWidget::OnLButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                   const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnLButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                 const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                     const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnMouseMove(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
                                 const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnMouseWheel(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                                  const CFX_PointF& point,
                                  const CFX_Vector& delta) {
   return false;
 }
 
-bool CXFA_FFWidget::OnRButtonDown(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                                   const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnRButtonUp(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                                 const CFX_PointF& point) {
   return false;
 }
 
-bool CXFA_FFWidget::OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+bool CXFA_FFWidget::OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                     const CFX_PointF& point) {
   return false;
 }
@@ -462,16 +462,16 @@
 }
 
 bool CXFA_FFWidget::OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
-                              FWL_KeyFlagMask dwFlags) {
+                              Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
 bool CXFA_FFWidget::OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
-                            FWL_KeyFlagMask dwFlags) {
+                            Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
-bool CXFA_FFWidget::OnChar(uint32_t dwChar, FWL_KeyFlagMask dwFlags) {
+bool CXFA_FFWidget::OnChar(uint32_t dwChar, Mask<XFA_FWL_KeyFlag> dwFlags) {
   return false;
 }
 
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index b63b03f..1fb8ca2 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -107,38 +107,38 @@
   virtual void UpdateWidgetProperty();
   // |command| must be LeftButtonDown or RightButtonDown.
   virtual bool AcceptsFocusOnButtonDown(
-      FWL_KeyFlagMask dwFlags,
+      Mask<XFA_FWL_KeyFlag> dwFlags,
       const CFX_PointF& point,
       CFWL_MessageMouse::MouseCommand command);
 
   // Caution: Returning false from an On* method may mean |this| is destroyed.
   virtual bool OnMouseEnter() WARN_UNUSED_RESULT;
   virtual bool OnMouseExit() WARN_UNUSED_RESULT;
-  virtual bool OnLButtonDown(FWL_KeyFlagMask dwFlags,
+  virtual bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                              const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnLButtonUp(FWL_KeyFlagMask dwFlags,
+  virtual bool OnLButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                            const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnLButtonDblClk(FWL_KeyFlagMask dwFlags,
+  virtual bool OnLButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnMouseMove(FWL_KeyFlagMask dwFlags,
+  virtual bool OnMouseMove(Mask<XFA_FWL_KeyFlag> dwFlags,
                            const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnMouseWheel(FWL_KeyFlagMask dwFlags,
+  virtual bool OnMouseWheel(Mask<XFA_FWL_KeyFlag> dwFlags,
                             const CFX_PointF& point,
                             const CFX_Vector& delta) WARN_UNUSED_RESULT;
-  virtual bool OnRButtonDown(FWL_KeyFlagMask dwFlags,
+  virtual bool OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
                              const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnRButtonUp(FWL_KeyFlagMask dwFlags,
+  virtual bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
                            const CFX_PointF& point) WARN_UNUSED_RESULT;
-  virtual bool OnRButtonDblClk(FWL_KeyFlagMask dwFlags,
+  virtual bool OnRButtonDblClk(Mask<XFA_FWL_KeyFlag> dwFlags,
                                const CFX_PointF& point) WARN_UNUSED_RESULT;
   virtual bool OnSetFocus(CXFA_FFWidget* pOldWidget) WARN_UNUSED_RESULT;
   virtual bool OnKillFocus(CXFA_FFWidget* pNewWidget) WARN_UNUSED_RESULT;
   virtual bool OnKeyDown(XFA_FWL_VKEYCODE dwKeyCode,
-                         FWL_KeyFlagMask dwFlags) WARN_UNUSED_RESULT;
+                         Mask<XFA_FWL_KeyFlag> dwFlags) WARN_UNUSED_RESULT;
   virtual bool OnKeyUp(XFA_FWL_VKEYCODE dwKeyCode,
-                       FWL_KeyFlagMask dwFlags) WARN_UNUSED_RESULT;
+                       Mask<XFA_FWL_KeyFlag> dwFlags) WARN_UNUSED_RESULT;
   virtual bool OnChar(uint32_t dwChar,
-                      FWL_KeyFlagMask dwFlags) WARN_UNUSED_RESULT;
+                      Mask<XFA_FWL_KeyFlag> dwFlags) WARN_UNUSED_RESULT;
 
   virtual FWL_WidgetHit HitTest(const CFX_PointF& point);
   virtual bool CanUndo();
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 3ee7683..5cd4efd 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -46,7 +46,7 @@
 }
 
 bool CXFA_FFWidgetHandler::OnLButtonDown(CXFA_FFWidget* hWidget,
-                                         FWL_KeyFlagMask dwFlags,
+                                         Mask<XFA_FWL_KeyFlag> dwFlags,
                                          const CFX_PointF& point) {
   m_pDocView->LockUpdate();
   bool bRet = hWidget->AcceptsFocusOnButtonDown(
@@ -65,7 +65,7 @@
 }
 
 bool CXFA_FFWidgetHandler::OnLButtonUp(CXFA_FFWidget* hWidget,
-                                       FWL_KeyFlagMask dwFlags,
+                                       Mask<XFA_FWL_KeyFlag> dwFlags,
                                        const CFX_PointF& point) {
   m_pDocView->LockUpdate();
   m_pDocView->m_bLayoutEvent = true;
@@ -76,26 +76,26 @@
 }
 
 bool CXFA_FFWidgetHandler::OnLButtonDblClk(CXFA_FFWidget* hWidget,
-                                           FWL_KeyFlagMask dwFlags,
+                                           Mask<XFA_FWL_KeyFlag> dwFlags,
                                            const CFX_PointF& point) {
   return hWidget->OnLButtonDblClk(dwFlags, hWidget->Rotate2Normal(point));
 }
 
 bool CXFA_FFWidgetHandler::OnMouseMove(CXFA_FFWidget* hWidget,
-                                       FWL_KeyFlagMask dwFlags,
+                                       Mask<XFA_FWL_KeyFlag> dwFlags,
                                        const CFX_PointF& point) {
   return hWidget->OnMouseMove(dwFlags, hWidget->Rotate2Normal(point));
 }
 
 bool CXFA_FFWidgetHandler::OnMouseWheel(CXFA_FFWidget* hWidget,
-                                        FWL_KeyFlagMask dwFlags,
+                                        Mask<XFA_FWL_KeyFlag> dwFlags,
                                         const CFX_PointF& point,
                                         const CFX_Vector& delta) {
   return hWidget->OnMouseWheel(dwFlags, hWidget->Rotate2Normal(point), delta);
 }
 
 bool CXFA_FFWidgetHandler::OnRButtonDown(CXFA_FFWidget* hWidget,
-                                         FWL_KeyFlagMask dwFlags,
+                                         Mask<XFA_FWL_KeyFlag> dwFlags,
                                          const CFX_PointF& point) {
   if (!hWidget->AcceptsFocusOnButtonDown(
           dwFlags, hWidget->Rotate2Normal(point),
@@ -110,20 +110,20 @@
 }
 
 bool CXFA_FFWidgetHandler::OnRButtonUp(CXFA_FFWidget* hWidget,
-                                       FWL_KeyFlagMask dwFlags,
+                                       Mask<XFA_FWL_KeyFlag> dwFlags,
                                        const CFX_PointF& point) {
   return hWidget->OnRButtonUp(dwFlags, hWidget->Rotate2Normal(point));
 }
 
 bool CXFA_FFWidgetHandler::OnRButtonDblClk(CXFA_FFWidget* hWidget,
-                                           FWL_KeyFlagMask dwFlags,
+                                           Mask<XFA_FWL_KeyFlag> dwFlags,
                                            const CFX_PointF& point) {
   return hWidget->OnRButtonDblClk(dwFlags, hWidget->Rotate2Normal(point));
 }
 
 bool CXFA_FFWidgetHandler::OnKeyDown(CXFA_FFWidget* hWidget,
                                      XFA_FWL_VKEYCODE dwKeyCode,
-                                     FWL_KeyFlagMask dwFlags) {
+                                     Mask<XFA_FWL_KeyFlag> dwFlags) {
   bool bRet = hWidget->OnKeyDown(dwKeyCode, dwFlags);
   m_pDocView->UpdateDocView();
   return bRet;
@@ -131,13 +131,13 @@
 
 bool CXFA_FFWidgetHandler::OnKeyUp(CXFA_FFWidget* hWidget,
                                    XFA_FWL_VKEYCODE dwKeyCode,
-                                   FWL_KeyFlagMask dwFlags) {
+                                   Mask<XFA_FWL_KeyFlag> dwFlags) {
   return hWidget->OnKeyUp(dwKeyCode, dwFlags);
 }
 
 bool CXFA_FFWidgetHandler::OnChar(CXFA_FFWidget* hWidget,
                                   uint32_t dwChar,
-                                  FWL_KeyFlagMask dwFlags) {
+                                  Mask<XFA_FWL_KeyFlag> dwFlags) {
   return hWidget->OnChar(dwChar, dwFlags);
 }
 
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.h b/xfa/fxfa/cxfa_ffwidgethandler.h
index 25cd10a..d26b2eb 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.h
+++ b/xfa/fxfa/cxfa_ffwidgethandler.h
@@ -8,6 +8,7 @@
 #define XFA_FXFA_CXFA_FFWIDGETHANDLER_H_
 
 #include "core/fxcrt/fx_coordinates.h"
+#include "core/fxcrt/mask.h"
 #include "fxjs/gc/heap.h"
 #include "v8/include/cppgc/garbage-collected.h"
 #include "v8/include/cppgc/member.h"
@@ -33,29 +34,29 @@
   bool OnMouseEnter(CXFA_FFWidget* hWidget);
   bool OnMouseExit(CXFA_FFWidget* hWidget);
   bool OnLButtonDown(CXFA_FFWidget* hWidget,
-                     FWL_KeyFlagMask dwFlags,
+                     Mask<XFA_FWL_KeyFlag> dwFlags,
                      const CFX_PointF& point);
   bool OnLButtonUp(CXFA_FFWidget* hWidget,
-                   FWL_KeyFlagMask dwFlags,
+                   Mask<XFA_FWL_KeyFlag> dwFlags,
                    const CFX_PointF& point);
   bool OnLButtonDblClk(CXFA_FFWidget* hWidget,
-                       FWL_KeyFlagMask dwFlags,
+                       Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point);
   bool OnMouseMove(CXFA_FFWidget* hWidget,
-                   FWL_KeyFlagMask dwFlags,
+                   Mask<XFA_FWL_KeyFlag> dwFlags,
                    const CFX_PointF& point);
   bool OnMouseWheel(CXFA_FFWidget* hWidget,
-                    FWL_KeyFlagMask dwFlags,
+                    Mask<XFA_FWL_KeyFlag> dwFlags,
                     const CFX_PointF& point,
                     const CFX_Vector& delta);
   bool OnRButtonDown(CXFA_FFWidget* hWidget,
-                     FWL_KeyFlagMask dwFlags,
+                     Mask<XFA_FWL_KeyFlag> dwFlags,
                      const CFX_PointF& point);
   bool OnRButtonUp(CXFA_FFWidget* hWidget,
-                   FWL_KeyFlagMask dwFlags,
+                   Mask<XFA_FWL_KeyFlag> dwFlags,
                    const CFX_PointF& point);
   bool OnRButtonDblClk(CXFA_FFWidget* hWidget,
-                       FWL_KeyFlagMask dwFlags,
+                       Mask<XFA_FWL_KeyFlag> dwFlags,
                        const CFX_PointF& point);
 
   WideString GetText(CXFA_FFWidget* widget);
@@ -70,11 +71,13 @@
 
   bool OnKeyDown(CXFA_FFWidget* hWidget,
                  XFA_FWL_VKEYCODE dwKeyCode,
-                 FWL_KeyFlagMask dwFlags);
+                 Mask<XFA_FWL_KeyFlag> dwFlags);
   bool OnKeyUp(CXFA_FFWidget* hWidget,
                XFA_FWL_VKEYCODE dwKeyCode,
-               FWL_KeyFlagMask dwFlags);
-  bool OnChar(CXFA_FFWidget* hWidget, uint32_t dwChar, FWL_KeyFlagMask dwFlags);
+               Mask<XFA_FWL_KeyFlag> dwFlags);
+  bool OnChar(CXFA_FFWidget* hWidget,
+              uint32_t dwChar,
+              Mask<XFA_FWL_KeyFlag> dwFlags);
   FWL_WidgetHit HitTest(CXFA_FFWidget* pWidget, const CFX_PointF& point);
   void RenderWidget(CXFA_FFWidget* hWidget,
                     CFGAS_GEGraphics* pGS,