Move permission constants to constants/access_permissions.h.

Move them out of core/fpdfapi/parser/cpdf_document.h, remove "FPDF" from
their names, and make them real constants.

Change-Id: Ib93027dd1321be76b23a277fcc6a91a387099074
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65620
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
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();