tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 1 | // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 5 | #include "build/build_config.h" |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 6 | #include "public/fpdf_flatten.h" |
| 7 | #include "public/fpdfview.h" |
| 8 | #include "testing/embedder_test.h" |
| 9 | #include "testing/gtest/include/gtest/gtest.h" |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 10 | |
| 11 | namespace { |
| 12 | |
Lei Zhang | ab41f25 | 2018-12-23 03:10:50 +0000 | [diff] [blame] | 13 | class FPDFFlattenEmbedderTest : public EmbedderTest {}; |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 14 | |
| 15 | } // namespace |
| 16 | |
Lei Zhang | ab41f25 | 2018-12-23 03:10:50 +0000 | [diff] [blame] | 17 | TEST_F(FPDFFlattenEmbedderTest, FlatNothing) { |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 18 | ASSERT_TRUE(OpenDocument("hello_world.pdf")); |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 19 | FPDF_PAGE page = LoadPage(0); |
| 20 | EXPECT_TRUE(page); |
| 21 | EXPECT_EQ(FLATTEN_NOTHINGTODO, FPDFPage_Flatten(page, FLAT_NORMALDISPLAY)); |
| 22 | UnloadPage(page); |
| 23 | } |
| 24 | |
Lei Zhang | ab41f25 | 2018-12-23 03:10:50 +0000 | [diff] [blame] | 25 | TEST_F(FPDFFlattenEmbedderTest, FlatNormal) { |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 26 | ASSERT_TRUE(OpenDocument("annotiter.pdf")); |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 27 | FPDF_PAGE page = LoadPage(0); |
| 28 | EXPECT_TRUE(page); |
| 29 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_NORMALDISPLAY)); |
| 30 | UnloadPage(page); |
| 31 | } |
| 32 | |
Lei Zhang | ab41f25 | 2018-12-23 03:10:50 +0000 | [diff] [blame] | 33 | TEST_F(FPDFFlattenEmbedderTest, FlatPrint) { |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 34 | ASSERT_TRUE(OpenDocument("annotiter.pdf")); |
tsepez | d0ecd89 | 2016-11-08 17:30:04 -0800 | [diff] [blame] | 35 | FPDF_PAGE page = LoadPage(0); |
| 36 | EXPECT_TRUE(page); |
| 37 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT)); |
| 38 | UnloadPage(page); |
| 39 | } |
Lei Zhang | 3d3cf80 | 2018-10-02 18:01:26 +0000 | [diff] [blame] | 40 | |
Hui Yingst | 7ebba63 | 2020-09-11 20:33:44 +0000 | [diff] [blame] | 41 | TEST_F(FPDFFlattenEmbedderTest, BUG_861842) { |
Hui Yingst | bf9eee1 | 2022-05-25 21:20:24 +0000 | [diff] [blame] | 42 | #if defined(_SKIA_SUPPORT_) |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 43 | static constexpr char kCheckboxChecksum[] = |
Hui Yingst | bf9eee1 | 2022-05-25 21:20:24 +0000 | [diff] [blame] | 44 | "252fd5f2299cc16e5a07565df7c30565"; |
| 45 | #elif defined(_SKIA_SUPPORT_PATHS_) |
| 46 | static constexpr char kCheckboxChecksum[] = |
| 47 | "280080feef8787b55ccf5cc828596327"; |
| 48 | #elif BUILDFLAG(IS_APPLE) |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 49 | static constexpr char kCheckboxChecksum[] = |
| 50 | "6aafcb2d98da222964bcdbf5aa1f4f1f"; |
Hui Yingst | 7ebba63 | 2020-09-11 20:33:44 +0000 | [diff] [blame] | 51 | #else |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 52 | static constexpr char kCheckboxChecksum[] = |
| 53 | "594265790b81df2d93120d33b72a6ada"; |
Hui Yingst | bf9eee1 | 2022-05-25 21:20:24 +0000 | [diff] [blame] | 54 | #endif |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 55 | |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 56 | ASSERT_TRUE(OpenDocument("bug_861842.pdf")); |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 57 | FPDF_PAGE page = LoadPage(0); |
| 58 | ASSERT_TRUE(page); |
| 59 | |
| 60 | ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT); |
Hui Yingst | 7ebba63 | 2020-09-11 20:33:44 +0000 | [diff] [blame] | 61 | CompareBitmap(bitmap.get(), 100, 120, kCheckboxChecksum); |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 62 | |
| 63 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT)); |
| 64 | EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); |
| 65 | |
| 66 | UnloadPage(page); |
| 67 | |
| 68 | // TODO(crbug.com/861842): This should not render blank. |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 69 | static constexpr char kBlankPageHash[] = "48400809c3862dae64b0cd00d51057a4"; |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 70 | VerifySavedDocument(100, 120, kBlankPageHash); |
| 71 | } |
| 72 | |
Hui Yingst | 0c2e668 | 2020-12-14 19:04:56 +0000 | [diff] [blame] | 73 | TEST_F(FPDFFlattenEmbedderTest, BUG_889099) { |
Hui Yingst | bf9eee1 | 2022-05-25 21:20:24 +0000 | [diff] [blame] | 74 | #if defined(_SKIA_SUPPORT_) |
| 75 | static constexpr char kPageHash[] = "73678f308625e22f31940e9f732b68bf"; |
Hui Yingst | 0c2e668 | 2020-12-14 19:04:56 +0000 | [diff] [blame] | 76 | static constexpr char kFlattenedPageHash[] = |
Hui Yingst | bf9eee1 | 2022-05-25 21:20:24 +0000 | [diff] [blame] | 77 | "0832157462ea70fbbf053e14b1d6457f"; |
| 78 | #elif defined(_SKIA_SUPPORT_PATHS_) |
| 79 | static constexpr char kPageHash[] = "c82ca7521b802024d7120b23876dd6dd"; |
| 80 | static constexpr char kFlattenedPageHash[] = |
| 81 | "0832157462ea70fbbf053e14b1d6457f"; |
Lei Zhang | 42d30c2 | 2022-01-12 19:24:43 +0000 | [diff] [blame] | 82 | #elif BUILDFLAG(IS_APPLE) |
Tom Anderson | d4fe5f7 | 2021-12-03 20:52:52 +0000 | [diff] [blame] | 83 | static constexpr char kPageHash[] = "049ed3f1e21fc72f929af3410c64bc8f"; |
Hui Yingst | 0c2e668 | 2020-12-14 19:04:56 +0000 | [diff] [blame] | 84 | static constexpr char kFlattenedPageHash[] = |
Tom Anderson | d4fe5f7 | 2021-12-03 20:52:52 +0000 | [diff] [blame] | 85 | "41debc60cf2a8f74c710ec6082d77b18"; |
Daniel Hosseinian | cf5d383 | 2020-04-24 00:07:25 +0000 | [diff] [blame] | 86 | #else |
Tom Anderson | d4fe5f7 | 2021-12-03 20:52:52 +0000 | [diff] [blame] | 87 | static constexpr char kPageHash[] = "3db87245e3f4e37f4cb18654bbe22d97"; |
Hui Yingst | 0c2e668 | 2020-12-14 19:04:56 +0000 | [diff] [blame] | 88 | static constexpr char kFlattenedPageHash[] = |
Tom Anderson | d4fe5f7 | 2021-12-03 20:52:52 +0000 | [diff] [blame] | 89 | "0832157462ea70fbbf053e14b1d6457f"; |
Daniel Hosseinian | cf5d383 | 2020-04-24 00:07:25 +0000 | [diff] [blame] | 90 | #endif |
| 91 | |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 92 | ASSERT_TRUE(OpenDocument("bug_889099.pdf")); |
Daniel Hosseinian | cf5d383 | 2020-04-24 00:07:25 +0000 | [diff] [blame] | 93 | FPDF_PAGE page = LoadPage(0); |
| 94 | ASSERT_TRUE(page); |
| 95 | |
| 96 | // The original document has a malformed media box; the height is -400. |
| 97 | ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT); |
| 98 | CompareBitmap(bitmap.get(), 300, 400, kPageHash); |
| 99 | |
| 100 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT)); |
| 101 | EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); |
| 102 | |
| 103 | UnloadPage(page); |
| 104 | |
Daniel Hosseinian | 7bd0edb | 2020-04-24 00:12:35 +0000 | [diff] [blame] | 105 | VerifySavedDocument(300, 400, kFlattenedPageHash); |
Daniel Hosseinian | cf5d383 | 2020-04-24 00:07:25 +0000 | [diff] [blame] | 106 | } |
| 107 | |
Hui Yingst | acb1b17 | 2020-09-03 23:47:01 +0000 | [diff] [blame] | 108 | TEST_F(FPDFFlattenEmbedderTest, BUG_890322) { |
Lei Zhang | 310ddbf | 2019-09-23 12:50:04 +0000 | [diff] [blame] | 109 | #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_) |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 110 | static constexpr char kChecksum[] = "793689536cf64fe792c2f241888c0cf3"; |
Lei Zhang | 03e5e68 | 2019-09-16 19:45:55 +0000 | [diff] [blame] | 111 | #else |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 112 | static constexpr char kChecksum[] = "6c674642154408e877d88c6c082d67e9"; |
Lei Zhang | 03e5e68 | 2019-09-16 19:45:55 +0000 | [diff] [blame] | 113 | #endif |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 114 | ASSERT_TRUE(OpenDocument("bug_890322.pdf")); |
Lei Zhang | 3d3cf80 | 2018-10-02 18:01:26 +0000 | [diff] [blame] | 115 | FPDF_PAGE page = LoadPage(0); |
| 116 | ASSERT_TRUE(page); |
| 117 | |
| 118 | ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT); |
Hui Yingst | acb1b17 | 2020-09-03 23:47:01 +0000 | [diff] [blame] | 119 | CompareBitmap(bitmap.get(), 200, 200, kChecksum); |
Lei Zhang | 3d3cf80 | 2018-10-02 18:01:26 +0000 | [diff] [blame] | 120 | |
| 121 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT)); |
| 122 | EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); |
| 123 | |
| 124 | UnloadPage(page); |
| 125 | |
Hui Yingst | acb1b17 | 2020-09-03 23:47:01 +0000 | [diff] [blame] | 126 | VerifySavedDocument(200, 200, kChecksum); |
Lei Zhang | 3d3cf80 | 2018-10-02 18:01:26 +0000 | [diff] [blame] | 127 | } |
Lei Zhang | 0233af4 | 2018-10-18 17:46:52 +0000 | [diff] [blame] | 128 | |
Hui Yingst | 55b4d9e | 2020-09-10 22:31:57 +0000 | [diff] [blame] | 129 | TEST_F(FPDFFlattenEmbedderTest, BUG_896366) { |
Lei Zhang | 03e5e68 | 2019-09-16 19:45:55 +0000 | [diff] [blame] | 130 | #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_) |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 131 | static constexpr char kChecksum[] = "c3cccfadc4c5249e6aa0675e511fa4c3"; |
Lei Zhang | 03e5e68 | 2019-09-16 19:45:55 +0000 | [diff] [blame] | 132 | #else |
Hui Yingst | 627c158 | 2020-12-14 20:18:47 +0000 | [diff] [blame] | 133 | static constexpr char kChecksum[] = "f71ab085c52c8445ae785eca3ec858b1"; |
Lei Zhang | 03e5e68 | 2019-09-16 19:45:55 +0000 | [diff] [blame] | 134 | #endif |
Daniel Hosseinian | 5af51b6 | 2020-07-18 00:53:43 +0000 | [diff] [blame] | 135 | ASSERT_TRUE(OpenDocument("bug_896366.pdf")); |
Lei Zhang | 0233af4 | 2018-10-18 17:46:52 +0000 | [diff] [blame] | 136 | FPDF_PAGE page = LoadPage(0); |
| 137 | ASSERT_TRUE(page); |
| 138 | |
| 139 | ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT); |
Hui Yingst | 55b4d9e | 2020-09-10 22:31:57 +0000 | [diff] [blame] | 140 | CompareBitmap(bitmap.get(), 612, 792, kChecksum); |
Lei Zhang | 0233af4 | 2018-10-18 17:46:52 +0000 | [diff] [blame] | 141 | |
| 142 | EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT)); |
| 143 | EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); |
| 144 | |
| 145 | UnloadPage(page); |
| 146 | |
Hui Yingst | 55b4d9e | 2020-09-10 22:31:57 +0000 | [diff] [blame] | 147 | VerifySavedDocument(612, 792, kChecksum); |
Lei Zhang | 0233af4 | 2018-10-18 17:46:52 +0000 | [diff] [blame] | 148 | } |