blob: bb3b8ef0952fe4064cd3183b69c6990a0f17858c [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "pdf/pdfium/pdfium_permissions.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_pdf {
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 kBasePermissions = 0xffffffc0;
return kBasePermissions | permissions;
}
constexpr uint32_t GeneratePermissions3(uint32_t permissions) {
constexpr uint32_t kBasePermissions = 0xfffff0c0;
return kBasePermissions | permissions;
}
// Sanity check the permission constants are correct.
static_assert(kPDFPermissionCopyAccessibleMask == 0x200, "Wrong permission");
static_assert(kPDFPermissionCopyMask == 0x10, "Wrong permission");
static_assert(kPDFPermissionPrintHighQualityMask == 0x800, "Wrong permission");
static_assert(kPDFPermissionPrintMask == 0x4, "Wrong permission");
// Sanity check the permission generation functions above do the right thing.
static_assert(GeneratePermissions2(0) == 0xffffffc0, "Wrong permission");
static_assert(GeneratePermissions2(kPDFPermissionCopyMask |
kPDFPermissionPrintMask) == 0xffffffd4,
"Wrong permission");
static_assert(GeneratePermissions3(0) == 0xfffff0c0, "Wrong permission");
static_assert(GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionCopyMask |
kPDFPermissionPrintHighQualityMask |
kPDFPermissionPrintMask) == 0xfffffad4,
"Wrong permission");
TEST(PDFiumPermissionTest, InvalidSecurityHandler) {
constexpr int kPDFiumUnknownRevision = -1;
constexpr uint32_t kNoPermissions = 0;
auto unknown_perms = PDFiumPermissions::CreateForTesting(
kPDFiumUnknownRevision, kNoPermissions);
EXPECT_TRUE(unknown_perms.HasPermission(kPermCopy));
EXPECT_TRUE(unknown_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(unknown_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(unknown_perms.HasPermission(kPermPrintHigh));
constexpr int kInvalidRevision = 1;
auto obsolete_perms =
PDFiumPermissions::CreateForTesting(kInvalidRevision, kNoPermissions);
EXPECT_TRUE(obsolete_perms.HasPermission(kPermCopy));
EXPECT_TRUE(obsolete_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(obsolete_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(obsolete_perms.HasPermission(kPermPrintHigh));
}
TEST(PDFiumPermissionTest, Revision2SecurityHandler) {
uint32_t permissions = GeneratePermissions2(0);
auto no_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_FALSE(no_perms.HasPermission(kPermCopy));
EXPECT_FALSE(no_perms.HasPermission(kPermCopya11y));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintLow));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintHigh));
permissions =
GeneratePermissions2(kPDFPermissionCopyMask | kPDFPermissionPrintMask);
auto all_known_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopy));
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions2(kPDFPermissionCopyMask);
auto no_print_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_TRUE(no_print_perms.HasPermission(kPermCopy));
EXPECT_TRUE(no_print_perms.HasPermission(kPermCopya11y));
EXPECT_FALSE(no_print_perms.HasPermission(kPermPrintLow));
EXPECT_FALSE(no_print_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions2(kPDFPermissionPrintMask);
auto no_copy_perms = PDFiumPermissions::CreateForTesting(2, permissions);
EXPECT_FALSE(no_copy_perms.HasPermission(kPermCopy));
EXPECT_FALSE(no_copy_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(no_copy_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(no_copy_perms.HasPermission(kPermPrintHigh));
}
TEST(PDFiumPermissionTest, Revision3SecurityHandler) {
uint32_t permissions = GeneratePermissions3(0);
auto no_perms = PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(no_perms.HasPermission(kPermCopy));
EXPECT_FALSE(no_perms.HasPermission(kPermCopya11y));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintLow));
EXPECT_FALSE(no_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions3(
kPDFPermissionCopyAccessibleMask | kPDFPermissionCopyMask |
kPDFPermissionPrintHighQualityMask | kPDFPermissionPrintMask);
auto all_known_perms = PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopy));
EXPECT_TRUE(all_known_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(all_known_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionCopyMask);
auto copy_no_print_perms =
PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(copy_no_print_perms.HasPermission(kPermCopy));
EXPECT_TRUE(copy_no_print_perms.HasPermission(kPermCopya11y));
EXPECT_FALSE(copy_no_print_perms.HasPermission(kPermPrintLow));
EXPECT_FALSE(copy_no_print_perms.HasPermission(kPermPrintHigh));
permissions =
GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionCopyMask | kPDFPermissionPrintMask);
auto copy_low_print_perms =
PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermCopy));
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(copy_low_print_perms.HasPermission(kPermPrintLow));
EXPECT_FALSE(copy_low_print_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions3(kPDFPermissionPrintHighQualityMask |
kPDFPermissionPrintMask);
auto print_no_copy_perms =
PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(print_no_copy_perms.HasPermission(kPermCopy));
EXPECT_FALSE(print_no_copy_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(print_no_copy_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(print_no_copy_perms.HasPermission(kPermPrintHigh));
permissions = GeneratePermissions3(kPDFPermissionCopyAccessibleMask |
kPDFPermissionPrintHighQualityMask |
kPDFPermissionPrintMask);
auto print_a11y_copy_perms =
PDFiumPermissions::CreateForTesting(3, permissions);
EXPECT_FALSE(print_a11y_copy_perms.HasPermission(kPermCopy));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermCopya11y));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermPrintLow));
EXPECT_TRUE(print_a11y_copy_perms.HasPermission(kPermPrintHigh));
}
} // namespace
} // namespace chrome_pdf