#include "pdf/pdfium/pdfium_permissions.h"
#include <stdint.h>
#include "base/notreached.h"
#include "base/numerics/safe_conversions.h"
namespace chrome_pdf {
PDFiumPermissions PDFiumPermissions::CreateForTesting(
int permissions_handler_revision,
uint32_t permission_bits) {
return PDFiumPermissions(permissions_handler_revision, permission_bits);
}
PDFiumPermissions::PDFiumPermissions(FPDF_DOCUMENT doc)
: permissions_handler_revision_(FPDF_GetSecurityHandlerRevision(doc)),
permission_bits_(
base::checked_cast<uint32_t>(FPDF_GetDocPermissions(doc))) {}
PDFiumPermissions::PDFiumPermissions(int permissions_handler_revision,
uint32_t permission_bits)
: permissions_handler_revision_(permissions_handler_revision),
permission_bits_(permission_bits) {}
bool PDFiumPermissions::HasPermission(DocumentPermission permission) const {
if (permissions_handler_revision_ < 2)
return true;
if (permissions_handler_revision_ == 2) {
switch (permission) {
case DocumentPermission::kCopy:
case DocumentPermission::kCopyAccessible:
return HasPermissionBits(kPDFPermissionBit05CopyMask);
case DocumentPermission::kPrintLowQuality:
case DocumentPermission::kPrintHighQuality:
return HasPermissionBits(kPDFPermissionBit03PrintMask);
}
NOTREACHED();
} else {
switch (permission) {
case DocumentPermission::kCopy:
return HasPermissionBits(kPDFPermissionBit05CopyMask);
case DocumentPermission::kCopyAccessible:
return HasPermissionBits(kPDFPermissionBit10CopyAccessibleMask);
case DocumentPermission::kPrintLowQuality:
return HasPermissionBits(kPDFPermissionBit03PrintMask);
case DocumentPermission::kPrintHighQuality:
return HasPermissionBits(kPDFPermissionBit03PrintMask |
kPDFPermissionBit12PrintHighQualityMask);
}
NOTREACHED();
}
}
}