| Index: pdf/pdfium/pdfium_engine.cc
|
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
|
| index 4b279462043f0ec0d381973849d26b5f089a255a..52605e929c7420ca1ae7605be8e3be43b7e1c76d 100644
|
| --- a/pdf/pdfium/pdfium_engine.cc
|
| +++ b/pdf/pdfium/pdfium_engine.cc
|
| @@ -592,6 +592,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client)
|
| last_page_to_search_(-1),
|
| last_character_index_to_search_(-1),
|
| permissions_(0),
|
| + permissions_handler_revision_(-1),
|
| fpdf_availability_(NULL),
|
| next_timer_id_(0),
|
| last_page_mouse_down_(-1),
|
| @@ -2324,16 +2325,32 @@ bool PDFiumEngine::IsSelecting() {
|
| }
|
|
|
| bool PDFiumEngine::HasPermission(DocumentPermission permission) const {
|
| + // PDF 1.7 spec, section 3.5.2 says: "If the revision number is 2 or greater,
|
| + // the operations to which user access can be controlled are as follows: ..."
|
| + //
|
| + // Thus for revision numbers less than 2, permissions are ignored and this
|
| + // always returns true.
|
| + if (permissions_handler_revision_ < 2)
|
| + return true;
|
| +
|
| + // Handle high quality printing permission separately for security handler
|
| + // revision 3+. See table 3.20 in the PDF 1.7 spec.
|
| + if (permission == PERMISSION_PRINT_HIGH_QUALITY &&
|
| + permissions_handler_revision_ >= 3) {
|
| + return (permissions_ & kPDFPermissionPrintLowQualityMask) != 0 &&
|
| + (permissions_ & kPDFPermissionPrintHighQualityMask) != 0;
|
| + }
|
| +
|
| switch (permission) {
|
| case PERMISSION_COPY:
|
| return (permissions_ & kPDFPermissionCopyMask) != 0;
|
| case PERMISSION_COPY_ACCESSIBLE:
|
| return (permissions_ & kPDFPermissionCopyAccessibleMask) != 0;
|
| case PERMISSION_PRINT_LOW_QUALITY:
|
| - return (permissions_ & kPDFPermissionPrintLowQualityMask) != 0;
|
| case PERMISSION_PRINT_HIGH_QUALITY:
|
| - return (permissions_ & kPDFPermissionPrintLowQualityMask) != 0 &&
|
| - (permissions_ & kPDFPermissionPrintHighQualityMask) != 0;
|
| + // With security handler revision 2 rules, check the same bit for high
|
| + // and low quality. See table 3.20 in the PDF 1.7 spec.
|
| + return (permissions_ & kPDFPermissionPrintLowQualityMask) != 0;
|
| default:
|
| return true;
|
| }
|
| @@ -2622,6 +2639,7 @@ void PDFiumEngine::ContinueLoadingDocument(
|
| client_->DocumentHasUnsupportedFeature("Bookmarks");
|
|
|
| permissions_ = FPDF_GetDocPermissions(doc_);
|
| + permissions_handler_revision_ = FPDF_GetSecurityHandlerRevision(doc_);
|
|
|
| if (!form_) {
|
| // Only returns 0 when data isn't available. If form data is downloaded, or
|
|
|