diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index f46c74f..516b0eb 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -88,7 +88,7 @@
   if (!pPage)
     return;
 
-  if (pPage->GetContext()->GetDocType() == XFA_DocType::Dynamic) {
+  if (pPage->GetContext()->GetDocType() == XFA_DocType::kFull) {
     CFX_RectF rectClip(
         static_cast<float>(pClip.left), static_cast<float>(pClip.top),
         static_cast<float>(pClip.Width()), static_cast<float>(pClip.Height()));
@@ -176,8 +176,9 @@
     return false;
 
   CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage();
-  if (!pPage || (pPage->GetContext()->GetDocType() != XFA_DocType::Static &&
-                 pPage->GetContext()->GetDocType() != XFA_DocType::Dynamic)) {
+  if (!pPage ||
+      (pPage->GetContext()->GetDocType() != XFA_DocType::kForegroundOnly &&
+       pPage->GetContext()->GetDocType() != XFA_DocType::kFull)) {
     return false;
   }
 
@@ -428,7 +429,7 @@
 
 #ifdef PDF_ENABLE_XFA
   RetainPtr<CPDFXFA_Page> protector(m_page);
-  if (m_pFormFillEnv->GetXFAContext()->GetDocType() == XFA_DocType::Dynamic) {
+  if (m_pFormFillEnv->GetXFAContext()->GetDocType() == XFA_DocType::kFull) {
     CXFA_FFPageView* pageView = m_page->GetXFAPageView();
     std::unique_ptr<IXFA_WidgetIterator> pWidgetHandler(
         pageView->CreateWidgetIterator(
@@ -486,12 +487,12 @@
 
 #ifdef PDF_ENABLE_XFA
   switch (m_page->GetContext()->GetDocType()) {
-    case XFA_DocType::Dynamic: {
+    case XFA_DocType::kFull: {
       CXFA_FFPageView* pPageView = m_page->GetXFAPageView();
       return pPageView ? pPageView->GetPageIndex() : -1;
     }
-    case XFA_DocType::Static:
-    case XFA_DocType::PDF:
+    case XFA_DocType::kForegroundOnly:
+    case XFA_DocType::kNone:
       return GetPageIndexForStaticPDF();
     default:
       return -1;
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index c8bd4ea..0e121e8 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -72,7 +72,7 @@
 #ifdef PDF_ENABLE_XFA
 CXFA_FFWidget* CPDFSDK_Widget::GetMixXFAWidget() const {
   CPDFXFA_Context* pContext = m_pPageView->GetFormFillEnv()->GetXFAContext();
-  if (pContext->GetDocType() == XFA_DocType::Static) {
+  if (pContext->GetDocType() == XFA_DocType::kForegroundOnly) {
     if (!m_hMixXFAWidget) {
       if (CXFA_FFDocView* pDocView = pContext->GetXFADocView()) {
         WideString sName;
@@ -95,7 +95,7 @@
 
 CXFA_FFWidget* CPDFSDK_Widget::GetGroupMixXFAWidget() {
   CPDFXFA_Context* pContext = m_pPageView->GetFormFillEnv()->GetXFAContext();
-  if (pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return nullptr;
 
   CXFA_FFDocView* pDocView = pContext->GetXFADocView();
@@ -108,7 +108,7 @@
 
 CXFA_FFWidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() const {
   CPDFXFA_Context* pContext = m_pPageView->GetFormFillEnv()->GetXFAContext();
-  if (pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return nullptr;
 
   if (!m_pWidgetHandler) {
@@ -507,7 +507,8 @@
 #ifdef PDF_ENABLE_XFA
   CPDFXFA_Context* pContext = m_pPageView->GetFormFillEnv()->GetXFAContext();
   XFA_DocType nDocType = pContext->GetDocType();
-  if (nDocType != XFA_DocType::PDF && nDocType != XFA_DocType::Static)
+  if (nDocType != XFA_DocType::kNone &&
+      nDocType != XFA_DocType::kForegroundOnly)
     return true;
 #endif  // PDF_ENABLE_XFA
   return CPDFSDK_BAAnnot::IsAppearanceValid();
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index ab37141..44c1c66 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -242,7 +242,7 @@
 #ifdef PDF_ENABLE_XFA
   CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
   CPDFXFA_Context* pContext = pPageView->GetFormFillEnv()->GetXFAContext();
-  if (pContext->GetDocType() == XFA_DocType::Static) {
+  if (pContext->GetDocType() == XFA_DocType::kForegroundOnly) {
     if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty())
       pWidget->ResetAppearance(false);
   }
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index e789df4..9e8b69e 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -33,11 +33,12 @@
 #include "xfa/fxfa/cxfa_ffpageview.h"
 #include "xfa/fxfa/cxfa_ffwidget.h"
 
-static_assert(static_cast<int>(XFA_DocType::PDF) == DOCTYPE_PDF,
+static_assert(static_cast<int>(XFA_DocType::kNone) == XFADOCTYPE_NONE,
               "PDF doctype must match");
-static_assert(static_cast<int>(XFA_DocType::Dynamic) == DOCTYPE_DYNAMIC_XFA,
+static_assert(static_cast<int>(XFA_DocType::kFull) == XFADOCTYPE_FULL,
               "Dynamic XFA doctype must match");
-static_assert(static_cast<int>(XFA_DocType::Static) == DOCTYPE_STATIC_XFA,
+static_assert(static_cast<int>(XFA_DocType::kForegroundOnly) ==
+                  XFADOCTYPE_FOREGROUNDONLY,
               "Static XFA doctype must match");
 #endif  // PDF_ENABLE_XFA
 
@@ -456,8 +457,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static) {
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly) {
     return;
   }
 
@@ -470,8 +471,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   static_cast<CXFA_FFWidget*>(hWidget)->Redo();
@@ -483,8 +484,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   static_cast<CXFA_FFWidget*>(hWidget)->SelectAll();
@@ -498,8 +499,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   WideString wsCpText;
@@ -530,8 +531,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   WideString wsCpText;
@@ -562,8 +563,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   WideString wstr = WideString::FromUTF16LE(wsText, size);
@@ -580,8 +581,8 @@
     return;
 
   CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   CFX_PointF ptPopup;
@@ -601,8 +602,8 @@
     return;
 
   auto* pContext = static_cast<CPDFXFA_Context*>(document);
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   CFX_PointF ptPopup;
diff --git a/fpdfsdk/fpdfsave.cpp b/fpdfsdk/fpdfsave.cpp
index 13475f6..783a913 100644
--- a/fpdfsdk/fpdfsave.cpp
+++ b/fpdfsdk/fpdfsave.cpp
@@ -48,8 +48,8 @@
   if (!pContext)
     return false;
 
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static) {
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly) {
     return true;
   }
 
@@ -192,8 +192,8 @@
   if (!pContext)
     return false;
 
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return true;
 
   CXFA_FFDocView* pXFADocView = pContext->GetXFADocView();
@@ -215,8 +215,8 @@
 
 bool SendPreSaveToXFADoc(CPDFXFA_Context* pContext,
                          std::vector<RetainPtr<IFX_SeekableStream>>* fileList) {
-  if (pContext->GetDocType() != XFA_DocType::Dynamic &&
-      pContext->GetDocType() != XFA_DocType::Static)
+  if (pContext->GetDocType() != XFA_DocType::kFull &&
+      pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return true;
 
   CXFA_FFDocView* pXFADocView = pContext->GetXFADocView();
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 47a92f1..9a8e8eb 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -587,7 +587,7 @@
     return false;
 
   bool bDynamicXFA = pRoot->GetBooleanFor("NeedsRendering", false);
-  *docType = bDynamicXFA ? DOCTYPE_DYNAMIC_XFA : DOCTYPE_STATIC_XFA;
+  *docType = bDynamicXFA ? XFADOCTYPE_FULL : XFADOCTYPE_FOREGROUNDONLY;
   return true;
 }
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index a67ac01..692306a 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -36,7 +36,7 @@
 #endif
 
 CPDFXFA_Context::CPDFXFA_Context(std::unique_ptr<CPDF_Document> pPDFDoc)
-    : m_iDocType(XFA_DocType::PDF),
+    : m_iDocType(XFA_DocType::kNone),
       m_pPDFDoc(std::move(pPDFDoc)),
       m_pFormFillEnv(nullptr),
       m_pXFADocView(nullptr),
@@ -117,10 +117,10 @@
   m_pXFADoc->StopLoad();
   m_pXFADoc->GetXFADoc()->InitScriptContext(GetJSERuntime());
 
-  if (m_pXFADoc->GetDocType() == XFA_DocType::Dynamic)
-    m_iDocType = XFA_DocType::Dynamic;
+  if (m_pXFADoc->GetDocType() == XFA_DocType::kFull)
+    m_iDocType = XFA_DocType::kFull;
   else
-    m_iDocType = XFA_DocType::Static;
+    m_iDocType = XFA_DocType::kForegroundOnly;
 
   m_pXFADocView = m_pXFADoc->CreateDocView();
   if (m_pXFADocView->StartLayout() < 0) {
@@ -141,11 +141,11 @@
     return 0;
 
   switch (m_iDocType) {
-    case XFA_DocType::PDF:
-    case XFA_DocType::Static:
+    case XFA_DocType::kNone:
+    case XFA_DocType::kForegroundOnly:
       if (m_pPDFDoc)
         return m_pPDFDoc->GetPageCount();
-    case XFA_DocType::Dynamic:
+    case XFA_DocType::kFull:
       if (m_pXFADoc)
         return m_pXFADocView->CountPageViews();
     default:
@@ -183,7 +183,7 @@
   if (!m_pXFADoc)
     return nullptr;
 
-  if (m_iDocType != XFA_DocType::Dynamic)
+  if (m_iDocType != XFA_DocType::kFull)
     return nullptr;
 
   for (auto& pTempPage : m_XFAPageList) {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 4dcdcac..91322ee 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -55,7 +55,7 @@
   if (!m_pContext->GetXFADoc() || !m_pContext->GetFormFillEnv())
     return;
 
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull)
     return;
 
   RetainPtr<CPDFXFA_Page> pPage = m_pContext->GetXFAPage(pPageView);
@@ -76,7 +76,7 @@
       !m_pContext->GetFormFillEnv() || !m_pContext->GetXFADocView())
     return;
 
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull)
     return;
 
   CXFA_FFWidgetHandler* pWidgetHandler =
@@ -289,7 +289,7 @@
 
 void CPDFXFA_DocEnvironment::WidgetPostAdd(CXFA_FFWidget* hWidget,
                                            CXFA_WidgetAcc* pWidgetData) {
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic || !hWidget)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull || !hWidget)
     return;
 
   CXFA_FFPageView* pPageView = hWidget->GetPageView();
@@ -307,7 +307,7 @@
 
 void CPDFXFA_DocEnvironment::WidgetPreRemove(CXFA_FFWidget* hWidget,
                                              CXFA_WidgetAcc* pWidgetData) {
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic || !hWidget)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull || !hWidget)
     return;
 
   CXFA_FFPageView* pPageView = hWidget->GetPageView();
@@ -334,7 +334,7 @@
 int32_t CPDFXFA_DocEnvironment::GetCurrentPage(CXFA_FFDoc* hDoc) {
   if (hDoc != m_pContext->GetXFADoc() || !m_pContext->GetFormFillEnv())
     return -1;
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull)
     return -1;
 
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
@@ -347,7 +347,7 @@
 void CPDFXFA_DocEnvironment::SetCurrentPage(CXFA_FFDoc* hDoc,
                                             int32_t iCurPage) {
   if (hDoc != m_pContext->GetXFADoc() || !m_pContext->GetFormFillEnv() ||
-      m_pContext->GetDocType() != XFA_DocType::Dynamic || iCurPage < 0 ||
+      m_pContext->GetDocType() != XFA_DocType::kFull || iCurPage < 0 ||
       iCurPage >= m_pContext->GetFormFillEnv()->GetPageCount()) {
     return;
   }
@@ -407,8 +407,8 @@
   if (hDoc != m_pContext->GetXFADoc())
     return;
 
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic &&
-      m_pContext->GetDocType() != XFA_DocType::Static) {
+  if (m_pContext->GetDocType() != XFA_DocType::kFull &&
+      m_pContext->GetDocType() != XFA_DocType::kForegroundOnly) {
     return;
   }
 
@@ -506,7 +506,7 @@
   if (hDoc != m_pContext->GetXFADoc())
     return;
 
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull)
     return;
 
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
@@ -606,8 +606,8 @@
 }
 
 bool CPDFXFA_DocEnvironment::OnBeforeNotifySubmit() {
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic &&
-      m_pContext->GetDocType() != XFA_DocType::Static) {
+  if (m_pContext->GetDocType() != XFA_DocType::kFull &&
+      m_pContext->GetDocType() != XFA_DocType::kForegroundOnly) {
     return true;
   }
 
@@ -658,8 +658,8 @@
 }
 
 void CPDFXFA_DocEnvironment::OnAfterNotifySubmit() {
-  if (m_pContext->GetDocType() != XFA_DocType::Dynamic &&
-      m_pContext->GetDocType() != XFA_DocType::Static)
+  if (m_pContext->GetDocType() != XFA_DocType::kFull &&
+      m_pContext->GetDocType() != XFA_DocType::kForegroundOnly)
     return;
 
   if (!m_pContext->GetXFADocView())
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index 87e003e..fa10a92 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -65,10 +65,10 @@
     return false;
 
   switch (m_pContext->GetDocType()) {
-    case XFA_DocType::PDF:
-    case XFA_DocType::Static:
+    case XFA_DocType::kNone:
+    case XFA_DocType::kForegroundOnly:
       return LoadPDFPage();
-    case XFA_DocType::Dynamic:
+    case XFA_DocType::kFull:
       return LoadXFAPageView();
     default:
       return false;
@@ -90,13 +90,13 @@
     return 0.0f;
 
   switch (m_pContext->GetDocType()) {
-    case XFA_DocType::Dynamic: {
+    case XFA_DocType::kFull: {
       if (m_pXFAPageView)
         return m_pXFAPageView->GetPageViewRect().width;
       break;
     }
-    case XFA_DocType::Static:
-    case XFA_DocType::PDF: {
+    case XFA_DocType::kForegroundOnly:
+    case XFA_DocType::kNone: {
       if (m_pPDFPage)
         return m_pPDFPage->GetPageWidth();
       break;
@@ -113,13 +113,13 @@
     return 0.0f;
 
   switch (m_pContext->GetDocType()) {
-    case XFA_DocType::PDF:
-    case XFA_DocType::Static: {
+    case XFA_DocType::kNone:
+    case XFA_DocType::kForegroundOnly: {
       if (m_pPDFPage)
         return m_pPDFPage->GetPageHeight();
       break;
     }
-    case XFA_DocType::Dynamic: {
+    case XFA_DocType::kFull: {
       if (m_pXFAPageView)
         return m_pXFAPageView->GetPageViewRect().height;
       break;
@@ -183,15 +183,15 @@
     return CFX_Matrix();
 
   switch (m_pContext->GetDocType()) {
-    case XFA_DocType::Dynamic: {
+    case XFA_DocType::kFull: {
       if (m_pXFAPageView) {
         return m_pXFAPageView->GetDisplayMatrix(
             CFX_Rect(xPos, yPos, xSize, ySize), iRotate);
       }
       break;
     }
-    case XFA_DocType::PDF:
-    case XFA_DocType::Static: {
+    case XFA_DocType::kNone:
+    case XFA_DocType::kForegroundOnly: {
       if (m_pPDFPage)
         return m_pPDFPage->GetDisplayMatrix(xPos, yPos, xSize, ySize, iRotate);
       break;
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index 3c0f9af..f29a098 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -282,8 +282,8 @@
     return false;
 #ifdef PDF_ENABLE_XFA
   CPDFXFA_Context* pXFAContext = pRuntime->GetFormFillEnv()->GetXFAContext();
-  if (pXFAContext->GetDocType() == XFA_DocType::Dynamic ||
-      pXFAContext->GetDocType() == XFA_DocType::Static) {
+  if (pXFAContext->GetDocType() == XFA_DocType::kFull ||
+      pXFAContext->GetDocType() == XFA_DocType::kForegroundOnly) {
     vp << JS_NUM_VIEWERVERSION_XFA;
     return true;
   }
diff --git a/public/fpdf_formfill.h b/public/fpdf_formfill.h
index e4194fed..1e0d305 100644
--- a/public/fpdf_formfill.h
+++ b/public/fpdf_formfill.h
@@ -12,9 +12,10 @@
 
 typedef void* FPDF_FORMHANDLE;
 
-#define DOCTYPE_PDF 0          // Normal pdf Document
-#define DOCTYPE_DYNAMIC_XFA 1  // Dynamic XFA Document Type
-#define DOCTYPE_STATIC_XFA 2   // Static XFA Document Type
+#define XFADOCTYPE_NONE 0  // Document contains no XFA forms
+#define XFADOCTYPE_FULL 1  // XFA forms are specified using the entire XFA spec
+#define XFADOCTYPE_FOREGROUNDONLY \
+  2  // XFA forms are specified using the XFAF subset
 
 // Exported Functions
 #ifdef __cplusplus
@@ -1613,7 +1614,7 @@
  *                      document                -       Handle to document.
  *Returned by FPDF_LoadDocument function.
  *                      docType                 -       Document type defined as
- *DOCTYPE_xxx.
+ *XFADOCTYPE_xxx.
  * Return Value:
  *                      TRUE indicates that the input document has XFA fields,
  *otherwise FALSE.
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 0c002a8..a638fd0 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -1430,8 +1430,8 @@
   form_callbacks.form_handle = form.get();
 
 #ifdef PDF_ENABLE_XFA
-  int doc_type = DOCTYPE_PDF;
-  if (FPDF_HasXFAField(doc.get(), &doc_type) && doc_type != DOCTYPE_PDF &&
+  int doc_type = XFADOCTYPE_NONE;
+  if (FPDF_HasXFAField(doc.get(), &doc_type) && doc_type != XFADOCTYPE_NONE &&
       !FPDF_LoadXFA(doc.get())) {
     fprintf(stderr, "LoadXFA unsuccessful, continuing anyway.\n");
   }
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index dab06af..41be0c0 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -205,9 +205,9 @@
   }
   *form_handle = SetupFormFillEnvironment(*document);
 #ifdef PDF_ENABLE_XFA
-  int docType = DOCTYPE_PDF;
+  int docType = XFADOCTYPE_NONE;
   if (FPDF_HasXFAField(*document, &docType)) {
-    if (docType != DOCTYPE_PDF)
+    if (docType != XFADOCTYPE_NONE)
       (void)FPDF_LoadXFA(*document);
   }
 #endif  // PDF_ENABLE_XFA
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index ee31a46..23b3df6 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -160,7 +160,7 @@
       m_pApp(pApp),
       m_pNotify(nullptr),
       m_pPDFDoc(nullptr),
-      m_dwDocType(XFA_DocType::Static) {}
+      m_dwDocType(XFA_DocType::kForegroundOnly) {}
 
 CXFA_FFDoc::~CXFA_FFDoc() {
   CloseDoc();
@@ -244,7 +244,7 @@
   m_pPDFFontMgr = pdfium::MakeUnique<CFGAS_PDFFontMgr>(
       GetPDFDoc(), GetApp()->GetFDEFontMgr());
 
-  m_dwDocType = XFA_DocType::Static;
+  m_dwDocType = XFA_DocType::kForegroundOnly;
   CXFA_Node* pConfig = ToNode(
       m_pDocumentParser->GetDocument()->GetXFAObject(XFA_HASHCODE_Config));
   if (!pConfig)
@@ -265,7 +265,7 @@
 
   WideString wsType;
   if (pDynamicRender->TryContent(wsType) && wsType == L"required")
-    m_dwDocType = XFA_DocType::Dynamic;
+    m_dwDocType = XFA_DocType::kFull;
 }
 
 CXFA_FFDocView* CXFA_FFDoc::CreateDocView() {
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index 56dfeed..0e895b6 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -622,7 +622,7 @@
 }
 
 bool CXFA_FFDocView::IsStaticNotify() {
-  return m_pDoc->GetDocType() == XFA_DocType::Static;
+  return m_pDoc->GetDocType() == XFA_DocType::kForegroundOnly;
 }
 
 void CXFA_FFDocView::AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) {
diff --git a/xfa/fxfa/fxfa.h b/xfa/fxfa/fxfa.h
index 929594f..9f5432e 100644
--- a/xfa/fxfa/fxfa.h
+++ b/xfa/fxfa/fxfa.h
@@ -40,8 +40,8 @@
 #define XFA_IDNo 3
 #define XFA_IDYes 4
 
-// Note, values match fpdf_formfill.h DOCTYPE_* flags.
-enum class XFA_DocType { PDF = 0, Dynamic = 1, Static = 2 };
+// Note, values match fpdf_formfill.h XFADOCTYPE_* flags.
+enum class XFA_DocType { kNone = 0, kFull = 1, kForegroundOnly = 2 };
 
 #define XFA_PARSESTATUS_StatusErr -3
 #define XFA_PARSESTATUS_StreamErr -2
