Test rendering an annotation with FPDF_PRINTING flag
Add a test to render an non-print type annotation with FPDF_PRINTING
flag. This will excise the following condition in CPDF_AnnotList::DisplayPass():
"bPrinting && (annot_flags & pdfium::annotation_flags::kPrint) == 0".
Bug: pdfium:1658
Change-Id: Ic07d93f8f1f6be5205f60120a2127987a9ac2a57
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/109392
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 098762c..06b337e 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -1479,6 +1479,27 @@
UnloadPage(page);
}
+TEST_F(FPDFViewEmbedderTest, RenderAnnotationWithPrintingFlag) {
+ const char* annotation_checksum = []() {
+ if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+ return "eaece6b8041c0cb9b33398e5b6d5ddda";
+ }
+ return "c108ba6e0a9743652f12e4bc223f9b32";
+ }();
+ static const char kPrintingChecksum[] = "3e235b9f88f652f2b97b1fc393924849";
+ ASSERT_TRUE(OpenDocument("bug_1658.pdf"));
+ FPDF_PAGE page = LoadPage(0);
+ ASSERT_TRUE(page);
+
+ // A yellow highlight is rendered with `FPDF_ANNOT` flag.
+ TestRenderPageBitmapWithFlags(page, FPDF_ANNOT, annotation_checksum);
+
+ // After adding `FPDF_PRINTING` flag, the yellow highlight is not rendered.
+ TestRenderPageBitmapWithFlags(page, FPDF_PRINTING | FPDF_ANNOT,
+ kPrintingChecksum);
+ UnloadPage(page);
+}
+
// TODO(crbug.com/pdfium/1955): Remove this test once pixel tests can pass with
// `reverse-byte-order` option.
TEST_F(FPDFViewEmbedderTest, RenderBlueAndRedImagesWithReverByteOrderFlag) {
diff --git a/testing/resources/bug_1658.in b/testing/resources/bug_1658.in
new file mode 100644
index 0000000..0301c9d
--- /dev/null
+++ b/testing/resources/bug_1658.in
@@ -0,0 +1,65 @@
+{{header}}
+{{object 1 0}} <<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+endobj
+{{object 2 0}} <<
+ /Type /Pages
+ /Count 1
+ /MediaBox [0 0 400 400]
+ /Kids [3 0 R]
+>>
+endobj
+{{object 3 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Annots [4 0 R]
+>>
+endobj
+{{object 4 0}} <<
+ /Type /Annot
+ /Subtype /Highlight
+ /AP <<
+ /N 5 0 R
+ >>
+ /F 8
+ /P 3 0 R
+ /Rect 6 0 R
+>>
+endobj
+{{object 5 0}} <<
+ /Type /XObject
+ /Subtype /Form
+ /FormType 1
+ /BBox 6 0 R
+ /ProcSet [/PDF]
+ /Resources <<
+ /ExtGState <<
+ /R0 <<
+ /Type /ExtGState
+ /AIS false
+ /BM /Multiply
+ >>
+ >>
+ >>
+ {{streamlen}}
+>>
+stream
+/R0 gs
+1 1 0 rg
+1 w
+72 305 m
+68 309 68 317 72 321 c
+132 321 l
+136 317 136 309 132 305 c
+f
+endstream
+endobj
+{{object 6 0}}
+[67 304 137 322]
+endobj
+{{xref}}
+{{trailer}}
+{{startxref}}
+%%EOF
diff --git a/testing/resources/bug_1658.pdf b/testing/resources/bug_1658.pdf
new file mode 100644
index 0000000..8c47b65
--- /dev/null
+++ b/testing/resources/bug_1658.pdf
@@ -0,0 +1,78 @@
+%PDF-1.7
+% ò¤ô
+1 0 obj <<
+ /Type /Catalog
+ /Pages 2 0 R
+>>
+endobj
+2 0 obj <<
+ /Type /Pages
+ /Count 1
+ /MediaBox [0 0 400 400]
+ /Kids [3 0 R]
+>>
+endobj
+3 0 obj <<
+ /Type /Page
+ /Parent 2 0 R
+ /Annots [4 0 R]
+>>
+endobj
+4 0 obj <<
+ /Type /Annot
+ /Subtype /Highlight
+ /AP <<
+ /N 5 0 R
+ >>
+ /F 8
+ /P 3 0 R
+ /Rect 6 0 R
+>>
+endobj
+5 0 obj <<
+ /Type /XObject
+ /Subtype /Form
+ /FormType 1
+ /BBox 6 0 R
+ /ProcSet [/PDF]
+ /Resources <<
+ /ExtGState <<
+ /R0 <<
+ /Type /ExtGState
+ /AIS false
+ /BM /Multiply
+ >>
+ >>
+ >>
+ /Length 90
+>>
+stream
+/R0 gs
+1 1 0 rg
+1 w
+72 305 m
+68 309 68 317 72 321 c
+132 321 l
+136 317 136 309 132 305 c
+f
+endstream
+endobj
+6 0 obj
+[67 304 137 322]
+endobj
+xref
+0 7
+0000000000 65535 f
+0000000015 00000 n
+0000000068 00000 n
+0000000157 00000 n
+0000000226 00000 n
+0000000343 00000 n
+0000000698 00000 n
+trailer <<
+ /Root 1 0 R
+ /Size 7
+>>
+startxref
+730
+%%EOF