Replace uint32_t with more meaningful types in fxfa.h

- replace XFA_PRINTOPT_* defines with enum type
- introduce XFA_WidgetStatusMask type.

Bug: pdfium:1085
Change-Id: I7570aab70fe0fc0fb77d840eaf3d70cb90709fa7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80832
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 6776486..38011c5 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -579,7 +579,7 @@
 void CPDFXFA_DocEnvironment::Print(CXFA_FFDoc* hDoc,
                                    int32_t nStartPage,
                                    int32_t nEndPage,
-                                   uint32_t dwOptions) {
+                                   XFA_PrintOptMask dwOptions) {
   if (hDoc != m_pContext->GetXFADoc())
     return;
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
index 7035ce4..92e00a1 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
@@ -54,7 +54,7 @@
   void Print(CXFA_FFDoc* hDoc,
              int32_t nStartPage,
              int32_t nEndPage,
-             uint32_t dwOptions) override;
+             XFA_PrintOptMask dwOptions) override;
   FX_ARGB GetHighlightColor(const CXFA_FFDoc* hDoc) const override;
   IJS_Runtime* GetIJSRuntime(const CXFA_FFDoc* hDoc) const override;
   CFX_XMLDocument* GetXMLDoc() const override;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index b7606be..bcbdd85 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -24,9 +24,9 @@
 
 namespace {
 
-constexpr uint32_t kIteratorFilter = XFA_WidgetStatus_Visible |
-                                     XFA_WidgetStatus_Viewable |
-                                     XFA_WidgetStatus_Focused;
+constexpr XFA_WidgetStatusMask kIteratorFilter = XFA_WidgetStatus_Visible |
+                                                 XFA_WidgetStatus_Viewable |
+                                                 XFA_WidgetStatus_Focused;
 
 }  // namespace
 
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index cf20597..e063901 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -531,7 +531,7 @@
   if (!pNotify)
     return CJS_Result::Success();
 
-  uint32_t dwOptions = 0;
+  XFA_PrintOptMask dwOptions = 0;
   if (runtime->ToBoolean(params[0]))
     dwOptions |= XFA_PRINTOPT_ShowDialog;
   if (runtime->ToBoolean(params[3]))
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index 23c7887..d78393b 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -200,7 +200,7 @@
 
 void CXFA_FFDoc::Print(int32_t nStartPage,
                        int32_t nEndPage,
-                       uint32_t dwOptions) {
+                       XFA_PrintOptMask dwOptions) {
   m_pDocEnvironment->Print(this, nStartPage, nEndPage, dwOptions);
 }
 
diff --git a/xfa/fxfa/cxfa_ffdoc.h b/xfa/fxfa/cxfa_ffdoc.h
index 19e00e1..f99d344 100644
--- a/xfa/fxfa/cxfa_ffdoc.h
+++ b/xfa/fxfa/cxfa_ffdoc.h
@@ -87,7 +87,7 @@
   bool IsValidationsEnabled() const;
   void SetValidationsEnabled(bool bEnabled);
   void SetFocusWidget(CXFA_FFWidget* hWidget);
-  void Print(int32_t nStartPage, int32_t nEndPage, uint32_t dwOptions);
+  void Print(int32_t nStartPage, int32_t nEndPage, XFA_PrintOptMask dwOptions);
   FX_ARGB GetHighlightColor() const;
   IJS_Runtime* GetIJSRuntime() const;
   CFX_XMLDocument* GetXMLDocument() const;
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index f5354fe..73e0b74 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -470,7 +470,7 @@
 void CXFA_FFNotify::OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout,
                                       CXFA_LayoutItem* pSender,
                                       int32_t iPageIdx,
-                                      uint32_t dwStatus) {
+                                      XFA_WidgetStatusMask dwStatus) {
   CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
   if (!pDocView)
     return;
@@ -480,9 +480,10 @@
     return;
 
   CXFA_FFPageView* pNewPageView = pDocView->GetPageView(iPageIdx);
-  uint32_t dwFilter = XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable |
-                      XFA_WidgetStatus_Printable;
-  pWidget->ModifyStatus(dwStatus, dwFilter);
+  constexpr XFA_WidgetStatusMask kRemove = XFA_WidgetStatus_Visible |
+                                           XFA_WidgetStatus_Viewable |
+                                           XFA_WidgetStatus_Printable;
+  pWidget->ModifyStatus(dwStatus, kRemove);
   CXFA_FFPageView* pPrePageView = pWidget->GetPageView();
   if (pPrePageView != pNewPageView ||
       (dwStatus & (XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)) ==
diff --git a/xfa/fxfa/cxfa_ffnotify.h b/xfa/fxfa/cxfa_ffnotify.h
index 167a17a..a189ea7 100644
--- a/xfa/fxfa/cxfa_ffnotify.h
+++ b/xfa/fxfa/cxfa_ffnotify.h
@@ -54,7 +54,7 @@
   void OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout,
                          CXFA_LayoutItem* pSender,
                          int32_t iPageIdx,
-                         uint32_t dwStatus);
+                         XFA_WidgetStatusMask dwStatus);
   void OnLayoutItemRemoving(CXFA_LayoutProcessor* pLayout,
                             CXFA_LayoutItem* pSender);
   void StartFieldDrawLayout(CXFA_Node* pItem,
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index bed3360..ab92161 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -67,7 +67,7 @@
 }
 
 bool PageWidgetFilter(CXFA_FFWidget* pWidget,
-                      uint32_t dwFilter,
+                      XFA_WidgetStatusMask dwFilter,
                       bool bTraversal,
                       bool bIgnoreRelevant) {
   CXFA_Node* pNode = pWidget->GetNode();
@@ -133,7 +133,7 @@
 }
 
 CXFA_FFWidget* FilteredLoadedWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem,
-                                                  uint32_t dwFilter,
+                                                  XFA_WidgetStatusMask dwFilter,
                                                   bool bIgnoreRelevant) {
   CXFA_FFWidget* pWidget = CXFA_FFWidget::FromLayoutItem(pLayoutItem);
   if (!pWidget)
@@ -269,21 +269,22 @@
 }
 
 IXFA_WidgetIterator* CXFA_FFPageView::CreateGCedFormWidgetIterator(
-    uint32_t dwWidgetFilter) {
+    XFA_WidgetStatusMask dwWidgetFilter) {
   return cppgc::MakeGarbageCollected<CXFA_FFPageWidgetIterator>(
       GetDocView()->GetDoc()->GetHeap()->GetAllocationHandle(), this,
       dwWidgetFilter);
 }
 
 IXFA_WidgetIterator* CXFA_FFPageView::CreateGCedTraverseWidgetIterator(
-    uint32_t dwWidgetFilter) {
+    XFA_WidgetStatusMask dwWidgetFilter) {
   return cppgc::MakeGarbageCollected<CXFA_FFTabOrderPageWidgetIterator>(
       GetDocView()->GetDoc()->GetHeap()->GetAllocationHandle(), this,
       dwWidgetFilter);
 }
 
-CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
-                                                     uint32_t dwFilter)
+CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(
+    CXFA_FFPageView* pPageView,
+    XFA_WidgetStatusMask dwFilter)
     : m_sIterator(pPageView->GetLayoutItem()),
       m_dwFilter(dwFilter),
       m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))) {}
@@ -340,7 +341,7 @@
 
 CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator(
     CXFA_FFPageView* pPageView,
-    uint32_t dwFilter)
+    XFA_WidgetStatusMask dwFilter)
     : m_pPageViewLayout(pPageView->GetLayoutItem()),
       m_dwFilter(dwFilter),
       m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))) {
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index c8488a1..371819a 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -36,9 +36,10 @@
   CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const;
 
   // These always return a non-null iterator from the gc heap.
-  IXFA_WidgetIterator* CreateGCedFormWidgetIterator(uint32_t dwWidgetFilter);
+  IXFA_WidgetIterator* CreateGCedFormWidgetIterator(
+      XFA_WidgetStatusMask dwWidgetFilter);
   IXFA_WidgetIterator* CreateGCedTraverseWidgetIterator(
-      uint32_t dwWidgetFilter);
+      XFA_WidgetStatusMask dwWidgetFilter);
 
  private:
   CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea);
@@ -66,10 +67,11 @@
   bool SetCurrentWidget(CXFA_FFWidget* hWidget) override;
 
  private:
-  CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter);
+  CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
+                            XFA_WidgetStatusMask dwFilter);
 
   CXFA_LayoutItemIterator m_sIterator;
-  const uint32_t m_dwFilter;
+  const XFA_WidgetStatusMask m_dwFilter;
   const bool m_bIgnoreRelevant;
 };
 
@@ -92,7 +94,7 @@
 
  private:
   CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView,
-                                    uint32_t dwFilter);
+                                    XFA_WidgetStatusMask dwFilter);
 
   CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget);
   CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName,
@@ -102,7 +104,7 @@
 
   cppgc::Member<CXFA_ViewLayoutItem> const m_pPageViewLayout;
   std::vector<cppgc::Member<CXFA_ContentLayoutItem>> m_TabOrderWidgetArray;
-  const uint32_t m_dwFilter;
+  const XFA_WidgetStatusMask m_dwFilter;
   int32_t m_iCurWidget = -1;
   const bool m_bIgnoreRelevant;
 };
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index ac34fc9..097d2e2 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -285,7 +285,8 @@
   return rtWidget;
 }
 
-void CXFA_FFWidget::ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved) {
+void CXFA_FFWidget::ModifyStatus(XFA_WidgetStatusMask dwAdded,
+                                 XFA_WidgetStatusMask dwRemoved) {
   GetLayoutItem()->ClearStatusBits(dwRemoved);
   GetLayoutItem()->SetStatusBits(dwAdded);
 }
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index 04afd14..897dcba 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -152,7 +152,8 @@
   CXFA_FFWidget* GetNextFFWidget() const;
   const CFX_RectF& GetWidgetRect() const;
   const CFX_RectF& RecacheWidgetRect() const;
-  void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved);
+  void ModifyStatus(XFA_WidgetStatusMask dwAdded,
+                    XFA_WidgetStatusMask dwRemoved);
 
   CXFA_FFDoc* GetDoc();
   CXFA_FFApp* GetApp();
diff --git a/xfa/fxfa/fxfa.h b/xfa/fxfa/fxfa.h
index 7630405..59b36f5 100644
--- a/xfa/fxfa/fxfa.h
+++ b/xfa/fxfa/fxfa.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXFA_FXFA_H_
 #define XFA_FXFA_FXFA_H_
 
+#include <type_traits>
+
 #include "core/fxcrt/cfx_timer.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -61,12 +63,15 @@
   kXFAForeground = 3,
 };
 
-#define XFA_PRINTOPT_ShowDialog 0x00000001
-#define XFA_PRINTOPT_CanCancel 0x00000002
-#define XFA_PRINTOPT_ShrinkPage 0x00000004
-#define XFA_PRINTOPT_AsImage 0x00000008
-#define XFA_PRINTOPT_ReverseOrder 0x00000010
-#define XFA_PRINTOPT_PrintAnnot 0x00000020
+enum XFA_PrintOpt : uint8_t {
+  XFA_PRINTOPT_ShowDialog = 1 << 0,
+  XFA_PRINTOPT_CanCancel = 1 << 1,
+  XFA_PRINTOPT_ShrinkPage = 1 << 2,
+  XFA_PRINTOPT_AsImage = 1 << 3,
+  XFA_PRINTOPT_ReverseOrder = 1 << 4,
+  XFA_PRINTOPT_PrintAnnot = 1 << 5,
+};
+using XFA_PrintOptMask = std::underlying_type<XFA_PrintOpt>::type;
 
 enum class XFA_EventError {
   kError = -1,
@@ -75,9 +80,8 @@
   kDisabled = 2,
 };
 
-enum XFA_WidgetStatus {
+enum XFA_WidgetStatus : uint16_t {
   XFA_WidgetStatus_None = 0,
-
   XFA_WidgetStatus_Access = 1 << 0,
   XFA_WidgetStatus_ButtonDown = 1 << 1,
   XFA_WidgetStatus_Disabled = 1 << 2,
@@ -88,6 +92,7 @@
   XFA_WidgetStatus_Viewable = 1 << 7,
   XFA_WidgetStatus_Visible = 1 << 8
 };
+using XFA_WidgetStatusMask = std::underlying_type<XFA_WidgetStatus>::type;
 
 // Probably should be CXFA_FFApp::CallbackIface in cxfa_ffapp.h
 class IXFA_AppProvider {
@@ -242,7 +247,7 @@
   virtual void Print(CXFA_FFDoc* hDoc,
                      int32_t nStartPage,
                      int32_t nEndPage,
-                     uint32_t dwOptions) = 0;
+                     XFA_PrintOptMask dwOptions) = 0;
   virtual FX_ARGB GetHighlightColor(const CXFA_FFDoc* hDoc) const = 0;
   virtual IJS_Runtime* GetIJSRuntime(const CXFA_FFDoc* hDoc) const = 0;
   virtual CFX_XMLDocument* GetXMLDoc() const = 0;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutitem.h b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
index 3b4163c..1a30743 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutitem.h
+++ b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
@@ -9,6 +9,7 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "v8/include/cppgc/persistent.h"
+#include "xfa/fxfa/fxfa.h"
 #include "xfa/fxfa/layout/cxfa_layoutitem.h"
 
 class CXFA_FFWidget;
@@ -31,11 +32,13 @@
   CFX_RectF GetRect(bool bRelative) const;
   size_t GetIndex() const;
 
-  void SetStatusBits(uint32_t val) { m_dwStatus |= val; }
-  void ClearStatusBits(uint32_t val) { m_dwStatus &= ~val; }
+  void SetStatusBits(XFA_WidgetStatusMask val) { m_dwStatus |= val; }
+  void ClearStatusBits(XFA_WidgetStatusMask val) { m_dwStatus &= ~val; }
 
   // TRUE if all (not any) bits set in |val| are set in |m_dwStatus|.
-  bool TestStatusBits(uint32_t val) const { return (m_dwStatus & val) == val; }
+  bool TestStatusBits(XFA_WidgetStatusMask val) const {
+    return (m_dwStatus & val) == val;
+  }
 
   CFX_PointF m_sPos;
   CFX_SizeF m_sSize;
@@ -44,7 +47,7 @@
   CXFA_ContentLayoutItem(CXFA_Node* pNode, CXFA_FFWidget* pFFWidget);
   void RemoveSelf();
 
-  mutable uint32_t m_dwStatus = 0;
+  mutable XFA_WidgetStatusMask m_dwStatus = 0;
   cppgc::Member<CXFA_ContentLayoutItem> m_pPrev;
   cppgc::Member<CXFA_ContentLayoutItem> m_pNext;
   cppgc::Member<CXFA_FFWidget> const m_pFFWidget;
diff --git a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
index 41c6338..8e0b9c2 100644
--- a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
@@ -105,8 +105,10 @@
 using PageSetIterator =
     CXFA_NodeIteratorTemplate<CXFA_ViewLayoutItem, TraverseStrategy_PageSet>;
 
-uint32_t GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) {
-  uint32_t dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
+XFA_WidgetStatusMask GetRelevant(CXFA_Node* pFormItem,
+                                 XFA_WidgetStatusMask dwParentRelvant) {
+  XFA_WidgetStatusMask dwRelevant =
+      XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
   WideString wsRelevant =
       pFormItem->JSObject()->GetCData(XFA_Attribute::Relevant);
   if (!wsRelevant.IsEmpty()) {
@@ -129,12 +131,12 @@
 void SyncContainer(CXFA_FFNotify* pNotify,
                    CXFA_LayoutProcessor* pDocLayout,
                    CXFA_LayoutItem* pViewItem,
-                   uint32_t dwRelevant,
+                   XFA_WidgetStatusMask dwRelevant,
                    bool bVisible,
                    int32_t nPageIndex) {
   bool bVisibleItem = false;
-  uint32_t dwStatus = 0;
-  uint32_t dwRelevantContainer = 0;
+  XFA_WidgetStatusMask dwStatus = 0;
+  XFA_WidgetStatusMask dwRelevantContainer = 0;
   if (bVisible) {
     XFA_AttributeValue eAttributeValue =
         pViewItem->GetFormNode()
@@ -1882,7 +1884,7 @@
         continue;
 
       nPageIdx++;
-      uint32_t dwRelevant =
+      XFA_WidgetStatusMask dwRelevant =
           XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
       CXFA_LayoutItemIterator iterator(pViewItem);
       CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent();
@@ -1900,7 +1902,7 @@
                 ->TryEnum(XFA_Attribute::Presence, true)
                 .value_or(XFA_AttributeValue::Visible);
         bool bVisible = presence == XFA_AttributeValue::Visible;
-        uint32_t dwRelevantChild =
+        XFA_WidgetStatusMask dwRelevantChild =
             GetRelevant(pContentItem->GetFormNode(), dwRelevant);
         SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
                       dwRelevantChild, bVisible, nPageIdx);