diff --git a/constants/BUILD.gn b/constants/BUILD.gn
index 4c10fed..4489b66 100644
--- a/constants/BUILD.gn
+++ b/constants/BUILD.gn
@@ -6,6 +6,7 @@
 
 source_set("constants") {
   sources = [
+    "access_permissions.h",
     "annotation_common.h",
     "annotation_flags.h",
     "form_fields.h",
diff --git a/constants/access_permissions.h b/constants/access_permissions.h
new file mode 100644
index 0000000..cac187a
--- /dev/null
+++ b/constants/access_permissions.h
@@ -0,0 +1,21 @@
+// Copyright 2020 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONSTANTS_ACCESS_PERMISSIONS_H_
+#define CONSTANTS_ACCESS_PERMISSIONS_H_
+
+namespace pdfium {
+namespace access_permissions {
+
+// PDF 1.7 spec, table 3.20.
+// User access permissions.
+constexpr uint32_t kModifyContent = 1 << 3;
+constexpr uint32_t kModifyAnnotation = 1 << 5;
+constexpr uint32_t kFillForm = 1 << 8;
+constexpr uint32_t kExtractForAccessibility = 1 << 9;
+
+}  // namespace access_permissions
+}  // namespace pdfium
+
+#endif  // CONSTANTS_ACCESS_PERMISSIONS_H_
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index d0d1729..54e4a29 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -28,11 +28,6 @@
 class IFX_SeekableReadStream;
 class JBig2_DocumentContext;
 
-#define FPDFPERM_MODIFY 0x0008
-#define FPDFPERM_ANNOT_FORM 0x0020
-#define FPDFPERM_FILL_FORM 0x0100
-#define FPDFPERM_EXTRACT_ACCESS 0x0200
-
 class CPDF_Document : public Observable,
                       public CPDF_Parser::ParsedObjectsHolder {
  public:
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index a3b2394..54ddfd9 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -9,6 +9,7 @@
 #include <memory>
 #include <vector>
 
+#include "constants/access_permissions.h"
 #include "constants/form_flags.h"
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
@@ -47,8 +48,8 @@
 
   CPDF_Page* pPage = pWidget->GetPDFPage();
   uint32_t dwPermissions = pPage->GetDocument()->GetUserPermissions();
-  return (dwPermissions & FPDFPERM_FILL_FORM) ||
-         (dwPermissions & FPDFPERM_ANNOT_FORM);
+  return (dwPermissions & pdfium::access_permissions::kFillForm) ||
+         (dwPermissions & pdfium::access_permissions::kModifyAnnotation);
 }
 
 CPDFSDK_Annot* CPDFSDK_WidgetHandler::NewAnnot(CPDF_Annot* pAnnot,
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index bf49dc8..1e9b562 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -6,6 +6,7 @@
 
 #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h"
 
+#include "constants/access_permissions.h"
 #include "constants/form_flags.h"
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fxcrt/autorestorer.h"
@@ -472,9 +473,12 @@
   if (pWidget->GetFieldType() == FormFieldType::kPushButton)
     return false;
 
-  return m_pFormFillEnv->HasPermissions(FPDFPERM_FILL_FORM) ||
-         m_pFormFillEnv->HasPermissions(FPDFPERM_ANNOT_FORM) ||
-         m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY);
+  using pdfium::access_permissions::kFillForm;
+  using pdfium::access_permissions::kModifyAnnotation;
+  using pdfium::access_permissions::kModifyContent;
+  return m_pFormFillEnv->HasPermissions(kFillForm) ||
+         m_pFormFillEnv->HasPermissions(kModifyAnnotation) ||
+         m_pFormFillEnv->HasPermissions(kModifyContent);
 }
 
 CFFL_FormFiller* CFFL_InteractiveFormFiller::GetFormFiller(
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index ea362ab..b32406c 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -8,6 +8,7 @@
 
 #include <utility>
 
+#include "constants/access_permissions.h"
 #include "core/fpdfapi/page/cpdf_pageobject.h"
 #include "core/fpdfapi/page/cpdf_textobject.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -354,7 +355,9 @@
     const std::vector<v8::Local<v8::Value>>& params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_EXTRACT_ACCESS))
+
+  using pdfium::access_permissions::kExtractForAccessibility;
+  if (!m_pFormFillEnv->HasPermissions(kExtractForAccessibility))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
   CPDFSDK_InteractiveForm* pInteractiveForm = GetSDKInteractiveForm();
@@ -460,8 +463,10 @@
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  if (!(m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY) ||
-        m_pFormFillEnv->HasPermissions(FPDFPERM_ANNOT_FORM))) {
+  using pdfium::access_permissions::kModifyAnnotation;
+  using pdfium::access_permissions::kModifyContent;
+  if (!(m_pFormFillEnv->HasPermissions(kModifyContent) ||
+        m_pFormFillEnv->HasPermissions(kModifyAnnotation))) {
     return CJS_Result::Failure(JSMessage::kPermissionError);
   }
 
@@ -506,9 +511,13 @@
     const std::vector<v8::Local<v8::Value>>& params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!(m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY) ||
-        m_pFormFillEnv->HasPermissions(FPDFPERM_ANNOT_FORM) ||
-        m_pFormFillEnv->HasPermissions(FPDFPERM_FILL_FORM))) {
+
+  using pdfium::access_permissions::kFillForm;
+  using pdfium::access_permissions::kModifyAnnotation;
+  using pdfium::access_permissions::kModifyContent;
+  if (!(m_pFormFillEnv->HasPermissions(kModifyContent) ||
+        m_pFormFillEnv->HasPermissions(kModifyAnnotation) ||
+        m_pFormFillEnv->HasPermissions(kFillForm))) {
     return CJS_Result::Failure(JSMessage::kPermissionError);
   }
 
@@ -733,7 +742,8 @@
   if (!pDictionary)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY))
+  using pdfium::access_permissions::kModifyContent;
+  if (!m_pFormFillEnv->HasPermissions(kModifyContent))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
   pDictionary->SetNewFor<CPDF_String>(propName, pRuntime->ToWideString(vp));
@@ -769,7 +779,9 @@
                                    v8::Local<v8::Value> vp) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY))
+
+  using pdfium::access_permissions::kModifyContent;
+  if (!m_pFormFillEnv->HasPermissions(kModifyContent))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
   m_bDelay = pRuntime->ToBoolean(vp);
@@ -1198,9 +1210,12 @@
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
-  if (!(m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY) ||
-        m_pFormFillEnv->HasPermissions(FPDFPERM_ANNOT_FORM) ||
-        m_pFormFillEnv->HasPermissions(FPDFPERM_FILL_FORM))) {
+  using pdfium::access_permissions::kFillForm;
+  using pdfium::access_permissions::kModifyAnnotation;
+  using pdfium::access_permissions::kModifyContent;
+  if (!(m_pFormFillEnv->HasPermissions(kModifyContent) ||
+        m_pFormFillEnv->HasPermissions(kModifyAnnotation) ||
+        m_pFormFillEnv->HasPermissions(kFillForm))) {
     return CJS_Result::Failure(JSMessage::kPermissionError);
   }
 
@@ -1222,7 +1237,9 @@
     const std::vector<v8::Local<v8::Value>>& params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_EXTRACT_ACCESS))
+
+  using pdfium::access_permissions::kExtractForAccessibility;
+  if (!m_pFormFillEnv->HasPermissions(kExtractForAccessibility))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
   // TODO(tsepez): check maximum allowable params.
@@ -1267,8 +1284,11 @@
     const std::vector<v8::Local<v8::Value>>& params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_EXTRACT_ACCESS))
+
+  using pdfium::access_permissions::kExtractForAccessibility;
+  if (!m_pFormFillEnv->HasPermissions(kExtractForAccessibility))
     return CJS_Result::Failure(JSMessage::kBadObjectError);
+
   return CJS_Result::Failure(JSMessage::kNotSupportedError);
 }
 
@@ -1277,7 +1297,9 @@
     const std::vector<v8::Local<v8::Value>>& params) {
   if (!m_pFormFillEnv)
     return CJS_Result::Failure(JSMessage::kBadObjectError);
-  if (!m_pFormFillEnv->HasPermissions(FPDFPERM_EXTRACT_ACCESS))
+
+  using pdfium::access_permissions::kExtractForAccessibility;
+  if (!m_pFormFillEnv->HasPermissions(kExtractForAccessibility))
     return CJS_Result::Failure(JSMessage::kPermissionError);
 
   int nPageNo = params.size() > 0 ? pRuntime->ToInt32(params[0]) : 0;
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 64991cd..538e9aa 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -10,6 +10,7 @@
 #include <memory>
 #include <utility>
 
+#include "constants/access_permissions.h"
 #include "constants/annotation_flags.h"
 #include "constants/form_flags.h"
 #include "core/fpdfdoc/cpdf_formcontrol.h"
@@ -608,11 +609,15 @@
 
 bool CJS_Field::AttachField(CJS_Document* pDocument,
                             const WideString& csFieldName) {
+  using pdfium::access_permissions::kFillForm;
+  using pdfium::access_permissions::kModifyAnnotation;
+  using pdfium::access_permissions::kModifyContent;
+
   m_pJSDoc.Reset(pDocument);
   m_pFormFillEnv.Reset(pDocument->GetFormFillEnv());
-  m_bCanSet = m_pFormFillEnv->HasPermissions(FPDFPERM_FILL_FORM) ||
-              m_pFormFillEnv->HasPermissions(FPDFPERM_ANNOT_FORM) ||
-              m_pFormFillEnv->HasPermissions(FPDFPERM_MODIFY);
+  m_bCanSet = m_pFormFillEnv->HasPermissions(kFillForm) ||
+              m_pFormFillEnv->HasPermissions(kModifyAnnotation) ||
+              m_pFormFillEnv->HasPermissions(kModifyContent);
 
   CPDFSDK_InteractiveForm* pRDForm = m_pFormFillEnv->GetInteractiveForm();
   CPDF_InteractiveForm* pForm = pRDForm->GetInteractiveForm();
