0

[pdf] Change DocumentPermission to an enum class

Enum classes are better for type safety.

Change-Id: I65d9d6809d225ef68b9a64350540daf84011850c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3055470
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#905551}
This commit is contained in:
Daniel Hosseinian
2021-07-27 02:21:08 +00:00
committed by Chromium LUCI CQ
parent 577a5a6a46
commit 5c7194aa8e
8 changed files with 124 additions and 106 deletions

@ -630,9 +630,9 @@ int32_t OutOfProcessInstance::PdfPrintBegin(
} }
uint32_t OutOfProcessInstance::QuerySupportedPrintOutputFormats() { uint32_t OutOfProcessInstance::QuerySupportedPrintOutputFormats() {
if (engine()->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) if (engine()->HasPermission(DocumentPermission::kPrintHighQuality))
return PP_PRINTOUTPUTFORMAT_PDF | PP_PRINTOUTPUTFORMAT_RASTER; return PP_PRINTOUTPUTFORMAT_PDF | PP_PRINTOUTPUTFORMAT_RASTER;
if (engine()->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY)) if (engine()->HasPermission(DocumentPermission::kPrintLowQuality))
return PP_PRINTOUTPUTFORMAT_RASTER; return PP_PRINTOUTPUTFORMAT_RASTER;
return 0; return 0;
} }

@ -82,6 +82,13 @@ enum class FontMappingMode {
kPepper, kPepper,
}; };
enum class DocumentPermission {
kCopy,
kCopyAccessible,
kPrintLowQuality,
kPrintHighQuality,
};
// Do one time initialization of the SDK. // Do one time initialization of the SDK.
// If `enable_v8` is false, then the PDFEngine will not be able to run // If `enable_v8` is false, then the PDFEngine will not be able to run
// JavaScript. // JavaScript.
@ -92,13 +99,6 @@ void ShutdownSDK();
// This class encapsulates a PDF rendering engine. // This class encapsulates a PDF rendering engine.
class PDFEngine { class PDFEngine {
public: public:
enum DocumentPermission {
PERMISSION_COPY,
PERMISSION_COPY_ACCESSIBLE,
PERMISSION_PRINT_LOW_QUALITY,
PERMISSION_PRINT_HIGH_QUALITY,
};
// Maximum number of parameters a nameddest view can contain. // Maximum number of parameters a nameddest view can contain.
static constexpr size_t kMaxViewParams = 4; static constexpr size_t kMaxViewParams = 4;

@ -290,8 +290,8 @@ void PdfViewPluginBase::Print() {
return; return;
const bool can_print = const bool can_print =
engine_->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) || engine_->HasPermission(DocumentPermission::kPrintLowQuality) ||
engine_->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY); engine_->HasPermission(DocumentPermission::kPrintHighQuality);
if (!can_print) if (!can_print)
return; return;
@ -638,11 +638,11 @@ void PdfViewPluginBase::HandleAccessibilityAction(
int PdfViewPluginBase::GetContentRestrictions() const { int PdfViewPluginBase::GetContentRestrictions() const {
int content_restrictions = kContentRestrictionCut | kContentRestrictionPaste; int content_restrictions = kContentRestrictionCut | kContentRestrictionPaste;
if (!engine()->HasPermission(PDFEngine::PERMISSION_COPY)) if (!engine()->HasPermission(DocumentPermission::kCopy))
content_restrictions |= kContentRestrictionCopy; content_restrictions |= kContentRestrictionCopy;
if (!engine()->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY) && if (!engine()->HasPermission(DocumentPermission::kPrintLowQuality) &&
!engine()->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY)) { !engine()->HasPermission(DocumentPermission::kPrintHighQuality)) {
content_restrictions |= kContentRestrictionPrint; content_restrictions |= kContentRestrictionPrint;
} }
@ -653,8 +653,8 @@ AccessibilityDocInfo PdfViewPluginBase::GetAccessibilityDocInfo() const {
AccessibilityDocInfo doc_info; AccessibilityDocInfo doc_info;
doc_info.page_count = engine()->GetNumberOfPages(); doc_info.page_count = engine()->GetNumberOfPages();
doc_info.text_accessible = doc_info.text_accessible =
engine()->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE); engine()->HasPermission(DocumentPermission::kCopyAccessible);
doc_info.text_copyable = engine()->HasPermission(PDFEngine::PERMISSION_COPY); doc_info.text_copyable = engine()->HasPermission(DocumentPermission::kCopy);
return doc_info; return doc_info;
} }
@ -732,9 +732,9 @@ int PdfViewPluginBase::PrintBegin(const blink::WebPrintParams& print_params) {
return 0; return 0;
const bool can_print = const bool can_print =
engine()->HasPermission(PDFEngine::PERMISSION_PRINT_HIGH_QUALITY) || engine()->HasPermission(DocumentPermission::kPrintHighQuality) ||
(print_params.rasterize_pdf && (print_params.rasterize_pdf &&
engine()->HasPermission(PDFEngine::PERMISSION_PRINT_LOW_QUALITY)); engine()->HasPermission(DocumentPermission::kPrintLowQuality));
if (!can_print) if (!can_print)
return 0; return 0;
@ -1484,8 +1484,8 @@ void PdfViewPluginBase::LoadAccessibility() {
SetAccessibilityDocInfo(GetAccessibilityDocInfo()); SetAccessibilityDocInfo(GetAccessibilityDocInfo());
// If the document contents isn't accessible, don't send anything more. // If the document contents isn't accessible, don't send anything more.
if (!(engine_->HasPermission(PDFEngine::PERMISSION_COPY) || if (!(engine_->HasPermission(DocumentPermission::kCopy) ||
engine_->HasPermission(PDFEngine::PERMISSION_COPY_ACCESSIBLE))) { engine_->HasPermission(DocumentPermission::kCopyAccessible))) {
return; return;
} }

@ -56,7 +56,7 @@ class TestPDFiumEngine : public PDFiumEngine {
~TestPDFiumEngine() override = default; ~TestPDFiumEngine() override = default;
bool HasPermission(PDFEngine::DocumentPermission permission) const override { bool HasPermission(DocumentPermission permission) const override {
return base::Contains(permissions_, permission); return base::Contains(permissions_, permission);
} }
@ -90,8 +90,7 @@ class TestPDFiumEngine : public PDFiumEngine {
return std::vector<uint8_t>(std::begin(kSaveData), std::end(kSaveData)); return std::vector<uint8_t>(std::begin(kSaveData), std::end(kSaveData));
} }
void SetPermissions( void SetPermissions(const std::vector<DocumentPermission>& permissions) {
const std::vector<PDFEngine::DocumentPermission>& permissions) {
permissions_.clear(); permissions_.clear();
for (auto& permission : permissions) for (auto& permission : permissions)
@ -110,7 +109,7 @@ class TestPDFiumEngine : public PDFiumEngine {
DocumentMetadata metadata_; DocumentMetadata metadata_;
base::flat_set<PDFEngine::DocumentPermission> permissions_; base::flat_set<DocumentPermission> permissions_;
}; };
class TestPDFiumEngineWithDocInfo : public TestPDFiumEngine { class TestPDFiumEngineWithDocInfo : public TestPDFiumEngine {
@ -885,14 +884,14 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetContentRestrictions) {
content_restrictions); content_restrictions);
// Test engine with only copy permission. // Test engine with only copy permission.
engine->SetPermissions({PDFEngine::PERMISSION_COPY}); engine->SetPermissions({DocumentPermission::kCopy});
content_restrictions = fake_plugin_.GetContentRestrictions(); content_restrictions = fake_plugin_.GetContentRestrictions();
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionPrint, EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionPrint,
content_restrictions); content_restrictions);
// Test engine with only print low quality permission. // Test engine with only print low quality permission.
engine->SetPermissions({PDFEngine::PERMISSION_PRINT_LOW_QUALITY}); engine->SetPermissions({DocumentPermission::kPrintLowQuality});
content_restrictions = fake_plugin_.GetContentRestrictions(); content_restrictions = fake_plugin_.GetContentRestrictions();
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy, EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy,
@ -900,23 +899,23 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetContentRestrictions) {
// Test engine with both copy and print low quality permissions. // Test engine with both copy and print low quality permissions.
engine->SetPermissions( engine->SetPermissions(
{PDFEngine::PERMISSION_COPY, PDFEngine::PERMISSION_PRINT_LOW_QUALITY}); {DocumentPermission::kCopy, DocumentPermission::kPrintLowQuality});
content_restrictions = fake_plugin_.GetContentRestrictions(); content_restrictions = fake_plugin_.GetContentRestrictions();
EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions); EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions);
// Test engine with print high and low quality permissions. // Test engine with print high and low quality permissions.
engine->SetPermissions({PDFEngine::PERMISSION_PRINT_HIGH_QUALITY, engine->SetPermissions({DocumentPermission::kPrintHighQuality,
PDFEngine::PERMISSION_PRINT_LOW_QUALITY}); DocumentPermission::kPrintLowQuality});
content_restrictions = fake_plugin_.GetContentRestrictions(); content_restrictions = fake_plugin_.GetContentRestrictions();
EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy, EXPECT_EQ(kContentRestrictionCutPaste | kContentRestrictionCopy,
content_restrictions); content_restrictions);
// Test engine with copy, print high and low quality permissions. // Test engine with copy, print high and low quality permissions.
engine->SetPermissions({PDFEngine::PERMISSION_COPY, engine->SetPermissions({DocumentPermission::kCopy,
PDFEngine::PERMISSION_PRINT_HIGH_QUALITY, DocumentPermission::kPrintHighQuality,
PDFEngine::PERMISSION_PRINT_LOW_QUALITY}); DocumentPermission::kPrintLowQuality});
content_restrictions = fake_plugin_.GetContentRestrictions(); content_restrictions = fake_plugin_.GetContentRestrictions();
EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions); EXPECT_EQ(kContentRestrictionCutPaste, content_restrictions);
@ -934,7 +933,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
EXPECT_FALSE(doc_info.text_copyable); EXPECT_FALSE(doc_info.text_copyable);
// Test engine with only copy permission. // Test engine with only copy permission.
engine->SetPermissions({PDFEngine::PERMISSION_COPY}); engine->SetPermissions({DocumentPermission::kCopy});
doc_info = fake_plugin_.GetAccessibilityDocInfo(); doc_info = fake_plugin_.GetAccessibilityDocInfo();
EXPECT_EQ(kPageNumber, doc_info.page_count); EXPECT_EQ(kPageNumber, doc_info.page_count);
@ -942,7 +941,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
EXPECT_TRUE(doc_info.text_copyable); EXPECT_TRUE(doc_info.text_copyable);
// Test engine with only copy accessible permission. // Test engine with only copy accessible permission.
engine->SetPermissions({PDFEngine::PERMISSION_COPY_ACCESSIBLE}); engine->SetPermissions({DocumentPermission::kCopyAccessible});
doc_info = fake_plugin_.GetAccessibilityDocInfo(); doc_info = fake_plugin_.GetAccessibilityDocInfo();
EXPECT_EQ(kPageNumber, doc_info.page_count); EXPECT_EQ(kPageNumber, doc_info.page_count);
@ -951,7 +950,7 @@ TEST_F(PdfViewPluginBaseWithEngineTest, GetAccessibilityDocInfo) {
// Test engine with both copy and copy accessible permission. // Test engine with both copy and copy accessible permission.
engine->SetPermissions( engine->SetPermissions(
{PDFEngine::PERMISSION_COPY, PDFEngine::PERMISSION_COPY_ACCESSIBLE}); {DocumentPermission::kCopy, DocumentPermission::kCopyAccessible});
doc_info = fake_plugin_.GetAccessibilityDocInfo(); doc_info = fake_plugin_.GetAccessibilityDocInfo();
EXPECT_EQ(kPageNumber, doc_info.page_count); EXPECT_EQ(kPageNumber, doc_info.page_count);

@ -986,7 +986,7 @@ std::vector<uint8_t> PDFiumEngine::PrintPages(
std::vector<uint8_t> PDFiumEngine::PrintPagesAsRasterPdf( std::vector<uint8_t> PDFiumEngine::PrintPagesAsRasterPdf(
const std::vector<int>& page_numbers, const std::vector<int>& page_numbers,
const blink::WebPrintParams& print_params) { const blink::WebPrintParams& print_params) {
DCHECK(HasPermission(PERMISSION_PRINT_LOW_QUALITY)); DCHECK(HasPermission(DocumentPermission::kPrintLowQuality));
// If document is not downloaded yet, disable printing. // If document is not downloaded yet, disable printing.
if (doc() && !doc_loader_->IsDocumentComplete()) if (doc() && !doc_loader_->IsDocumentComplete())
@ -1002,7 +1002,7 @@ std::vector<uint8_t> PDFiumEngine::PrintPagesAsRasterPdf(
std::vector<uint8_t> PDFiumEngine::PrintPagesAsPdf( std::vector<uint8_t> PDFiumEngine::PrintPagesAsPdf(
const std::vector<int>& page_numbers, const std::vector<int>& page_numbers,
const blink::WebPrintParams& print_params) { const blink::WebPrintParams& print_params) {
DCHECK(HasPermission(PERMISSION_PRINT_HIGH_QUALITY)); DCHECK(HasPermission(DocumentPermission::kPrintHighQuality));
DCHECK(doc()); DCHECK(doc());
KillFormFocus(); KillFormFocus();
@ -2158,7 +2158,7 @@ void PDFiumEngine::InvalidateAllPages() {
} }
std::string PDFiumEngine::GetSelectedText() { std::string PDFiumEngine::GetSelectedText() {
if (!HasPermission(PDFEngine::PERMISSION_COPY)) if (!HasPermission(DocumentPermission::kCopy))
return std::string(); return std::string();
std::u16string result; std::u16string result;

@ -4,8 +4,6 @@
#include "pdf/pdfium/pdfium_permissions.h" #include "pdf/pdfium/pdfium_permissions.h"
#include "base/notreached.h"
namespace chrome_pdf { namespace chrome_pdf {
// static // static
@ -24,8 +22,7 @@ PDFiumPermissions::PDFiumPermissions(int permissions_handler_revision,
: permissions_handler_revision_(permissions_handler_revision), : permissions_handler_revision_(permissions_handler_revision),
permission_bits_(permission_bits) {} permission_bits_(permission_bits) {}
bool PDFiumPermissions::HasPermission( bool PDFiumPermissions::HasPermission(DocumentPermission permission) const {
PDFEngine::DocumentPermission permission) const {
// PDF 1.7 spec, section 3.5.2 says: "If the revision number is 2 or greater, // 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: ..." // the operations to which user access can be controlled are as follows: ..."
// //
@ -37,12 +34,12 @@ bool PDFiumPermissions::HasPermission(
if (permissions_handler_revision_ == 2) { if (permissions_handler_revision_ == 2) {
// Security handler revision 2 rules are simple. // Security handler revision 2 rules are simple.
switch (permission) { switch (permission) {
case PDFEngine::PERMISSION_COPY: case DocumentPermission::kCopy:
case PDFEngine::PERMISSION_COPY_ACCESSIBLE: case DocumentPermission::kCopyAccessible:
// Check the same copy bit for all copying permissions. // Check the same copy bit for all copying permissions.
return (permission_bits_ & kPDFPermissionCopyMask) != 0; return (permission_bits_ & kPDFPermissionCopyMask) != 0;
case PDFEngine::PERMISSION_PRINT_LOW_QUALITY: case DocumentPermission::kPrintLowQuality:
case PDFEngine::PERMISSION_PRINT_HIGH_QUALITY: case DocumentPermission::kPrintHighQuality:
// Check the same printing bit for all printing permissions. // Check the same printing bit for all printing permissions.
return (permission_bits_ & kPDFPermissionPrintMask) != 0; return (permission_bits_ & kPDFPermissionPrintMask) != 0;
} }
@ -50,19 +47,17 @@ bool PDFiumPermissions::HasPermission(
// Security handler revision 3+ have different rules for interpreting the // Security handler revision 3+ have different rules for interpreting the
// bits in `permission_bits_`. // bits in `permission_bits_`.
switch (permission) { switch (permission) {
case PDFEngine::PERMISSION_COPY: case DocumentPermission::kCopy:
return (permission_bits_ & kPDFPermissionCopyMask) != 0; return (permission_bits_ & kPDFPermissionCopyMask) != 0;
case PDFEngine::PERMISSION_COPY_ACCESSIBLE: case DocumentPermission::kCopyAccessible:
return (permission_bits_ & kPDFPermissionCopyAccessibleMask) != 0; return (permission_bits_ & kPDFPermissionCopyAccessibleMask) != 0;
case PDFEngine::PERMISSION_PRINT_LOW_QUALITY: case DocumentPermission::kPrintLowQuality:
return (permission_bits_ & kPDFPermissionPrintMask) != 0; return (permission_bits_ & kPDFPermissionPrintMask) != 0;
case PDFEngine::PERMISSION_PRINT_HIGH_QUALITY: case DocumentPermission::kPrintHighQuality:
return (permission_bits_ & kPDFPermissionPrintMask) != 0 && return (permission_bits_ & kPDFPermissionPrintMask) != 0 &&
(permission_bits_ & kPDFPermissionPrintHighQualityMask) != 0; (permission_bits_ & kPDFPermissionPrintHighQualityMask) != 0;
} }
} }
NOTREACHED() << "Unknown permission " << permission;
return true;
} }
} // namespace chrome_pdf } // namespace chrome_pdf

@ -25,7 +25,7 @@ class PDFiumPermissions final {
explicit PDFiumPermissions(FPDF_DOCUMENT doc); explicit PDFiumPermissions(FPDF_DOCUMENT doc);
bool HasPermission(PDFEngine::DocumentPermission permission) const; bool HasPermission(DocumentPermission permission) const;
private: private:
// For unit tests. // For unit tests.

@ -10,11 +10,6 @@ namespace chrome_pdf {
namespace { namespace {
constexpr auto kPermCopy = PDFEngine::PERMISSION_COPY;
constexpr auto kPermCopya11y = PDFEngine::PERMISSION_COPY_ACCESSIBLE;
constexpr auto kPermPrintHigh = PDFEngine::PERMISSION_PRINT_HIGH_QUALITY;
constexpr auto kPermPrintLow = PDFEngine::PERMISSION_PRINT_LOW_QUALITY;
constexpr uint32_t GeneratePermissions2(uint32_t permissions) { constexpr uint32_t GeneratePermissions2(uint32_t permissions) {
constexpr uint32_t kBasePermissions = 0xffffffc0; constexpr uint32_t kBasePermissions = 0xffffffc0;
return kBasePermissions | permissions; return kBasePermissions | permissions;
@ -48,105 +43,134 @@ TEST(PDFiumPermissionTest, InvalidSecurityHandler) {
constexpr uint32_t kNoPermissions = 0; constexpr uint32_t kNoPermissions = 0;
auto unknown_perms = PDFiumPermissions::CreateForTesting( auto unknown_perms = PDFiumPermissions::CreateForTesting(
kPDFiumUnknownRevision, kNoPermissions); kPDFiumUnknownRevision, kNoPermissions);
EXPECT_TRUE(unknown_perms.HasPermission(kPermCopy)); EXPECT_TRUE(unknown_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(unknown_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(unknown_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(unknown_perms.HasPermission(kPermPrintLow)); EXPECT_TRUE(
EXPECT_TRUE(unknown_perms.HasPermission(kPermPrintHigh)); unknown_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
unknown_perms.HasPermission(DocumentPermission::kPrintHighQuality));
constexpr int kInvalidRevision = 1; constexpr int kInvalidRevision = 1;
auto obsolete_perms = auto obsolete_perms =
PDFiumPermissions::CreateForTesting(kInvalidRevision, kNoPermissions); PDFiumPermissions::CreateForTesting(kInvalidRevision, kNoPermissions);
EXPECT_TRUE(obsolete_perms.HasPermission(kPermCopy)); EXPECT_TRUE(obsolete_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(obsolete_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_TRUE(obsolete_perms.HasPermission(kPermPrintLow)); obsolete_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(obsolete_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
obsolete_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
obsolete_perms.HasPermission(DocumentPermission::kPrintHighQuality));
} }
TEST(PDFiumPermissionTest, Revision2SecurityHandler) { TEST(PDFiumPermissionTest, Revision2SecurityHandler) {
uint32_t permissions = GeneratePermissions2(0); uint32_t permissions = GeneratePermissions2(0);
auto no_perms = PDFiumPermissions::CreateForTesting(2, permissions); auto no_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_FALSE(no_perms.HasPermission(kPermCopy)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_FALSE(no_perms.HasPermission(kPermCopya11y)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintLow)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintHigh)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = permissions =
GeneratePermissions2(kPDFPermissionCopyMask | kPDFPermissionPrintMask); GeneratePermissions2(kPDFPermissionCopyMask | kPDFPermissionPrintMask);
auto all_known_perms = PDFiumPermissions::CreateForTesting(2, permissions); auto all_known_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopy)); EXPECT_TRUE(all_known_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintLow)); all_known_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
all_known_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
all_known_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions2(kPDFPermissionCopyMask); permissions = GeneratePermissions2(kPDFPermissionCopyMask);
auto no_print_perms = PDFiumPermissions::CreateForTesting(2, permissions); auto no_print_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_TRUE(no_print_perms.HasPermission(kPermCopy)); EXPECT_TRUE(no_print_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(no_print_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_FALSE(no_print_perms.HasPermission(kPermPrintLow)); no_print_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_FALSE(no_print_perms.HasPermission(kPermPrintHigh)); EXPECT_FALSE(
no_print_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_FALSE(
no_print_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions2(kPDFPermissionPrintMask); permissions = GeneratePermissions2(kPDFPermissionPrintMask);
auto no_copy_perms = PDFiumPermissions::CreateForTesting(2, permissions); auto no_copy_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_FALSE(no_copy_perms.HasPermission(kPermCopy)); EXPECT_FALSE(no_copy_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_FALSE(no_copy_perms.HasPermission(kPermCopya11y)); EXPECT_FALSE(
EXPECT_TRUE(no_copy_perms.HasPermission(kPermPrintLow)); no_copy_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(no_copy_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
no_copy_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
no_copy_perms.HasPermission(DocumentPermission::kPrintHighQuality));
} }
TEST(PDFiumPermissionTest, Revision3SecurityHandler) { TEST(PDFiumPermissionTest, Revision3SecurityHandler) {
uint32_t permissions = GeneratePermissions3(0); uint32_t permissions = GeneratePermissions3(0);
auto no_perms = PDFiumPermissions::CreateForTesting(3, permissions); auto no_perms = PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(no_perms.HasPermission(kPermCopy)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_FALSE(no_perms.HasPermission(kPermCopya11y)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintLow)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintHigh)); EXPECT_FALSE(no_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions3( permissions = GeneratePermissions3(
kPDFPermissionCopyAccessibleMask | kPDFPermissionCopyMask | kPDFPermissionCopyAccessibleMask | kPDFPermissionCopyMask |
kPDFPermissionPrintHighQualityMask | kPDFPermissionPrintMask); kPDFPermissionPrintHighQualityMask | kPDFPermissionPrintMask);
auto all_known_perms = PDFiumPermissions::CreateForTesting(3, permissions); auto all_known_perms = PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopy)); EXPECT_TRUE(all_known_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintLow)); all_known_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
all_known_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
all_known_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask | permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionCopyMask); kPDFPermissionCopyMask);
auto copy_no_print_perms = auto copy_no_print_perms =
PDFiumPermissions::CreateForTesting(3, permissions); PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(copy_no_print_perms.HasPermission(kPermCopy)); EXPECT_TRUE(copy_no_print_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(copy_no_print_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_FALSE(copy_no_print_perms.HasPermission(kPermPrintLow)); copy_no_print_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_FALSE(copy_no_print_perms.HasPermission(kPermPrintHigh)); EXPECT_FALSE(
copy_no_print_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_FALSE(
copy_no_print_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = permissions =
GeneratePermissions3(kPDFPermissionCopyAccessibleMask | GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionCopyMask | kPDFPermissionPrintMask); kPDFPermissionCopyMask | kPDFPermissionPrintMask);
auto copy_low_print_perms = auto copy_low_print_perms =
PDFiumPermissions::CreateForTesting(3, permissions); PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermCopy)); EXPECT_TRUE(copy_low_print_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermPrintLow)); copy_low_print_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_FALSE(copy_low_print_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
copy_low_print_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_FALSE(copy_low_print_perms.HasPermission(
DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions3(kPDFPermissionPrintHighQualityMask | permissions = GeneratePermissions3(kPDFPermissionPrintHighQualityMask |
kPDFPermissionPrintMask); kPDFPermissionPrintMask);
auto print_no_copy_perms = auto print_no_copy_perms =
PDFiumPermissions::CreateForTesting(3, permissions); PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(print_no_copy_perms.HasPermission(kPermCopy)); EXPECT_FALSE(print_no_copy_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_FALSE(print_no_copy_perms.HasPermission(kPermCopya11y)); EXPECT_FALSE(
EXPECT_TRUE(print_no_copy_perms.HasPermission(kPermPrintLow)); print_no_copy_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(print_no_copy_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(
print_no_copy_perms.HasPermission(DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(
print_no_copy_perms.HasPermission(DocumentPermission::kPrintHighQuality));
permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask | permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionPrintHighQualityMask | kPDFPermissionPrintHighQualityMask |
kPDFPermissionPrintMask); kPDFPermissionPrintMask);
auto print_a11y_copy_perms = auto print_a11y_copy_perms =
PDFiumPermissions::CreateForTesting(3, permissions); PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(print_a11y_copy_perms.HasPermission(kPermCopy)); EXPECT_FALSE(print_a11y_copy_perms.HasPermission(DocumentPermission::kCopy));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermCopya11y)); EXPECT_TRUE(
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermPrintLow)); print_a11y_copy_perms.HasPermission(DocumentPermission::kCopyAccessible));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermPrintHigh)); EXPECT_TRUE(print_a11y_copy_perms.HasPermission(
DocumentPermission::kPrintLowQuality));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(
DocumentPermission::kPrintHighQuality));
} }
} // namespace } // namespace