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();