Test page size APIs for PDFs with /CropBox

Test PDFs with overlapping / no overlapping cropboxes with the following
page size APIs:

- FPDF_GetPageWidthF()
- FPDF_GetPageHeightF()
- FPDF_GetPageSizeByIndex()

Bug: 438884266
Change-Id: I27b31770d827ed76ff051a4558f02642cac8926e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/135050
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Auto-Submit: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 08be8d4..47db125 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -1270,6 +1270,34 @@
   EXPECT_EQ(1u, doc->GetParsedPageCountForTesting());
 }
 
+TEST_F(FPDFViewEmbedderTest, CroppedTextPageSize) {
+  ASSERT_TRUE(OpenDocument("cropped_text.pdf"));
+  ScopedPage page = LoadScopedPage(0);
+  ASSERT_TRUE(page);
+  EXPECT_FLOAT_EQ(100.0f, FPDF_GetPageWidthF(page.get()));
+  EXPECT_FLOAT_EQ(100.0f, FPDF_GetPageHeightF(page.get()));
+
+  double width = 1.0;
+  double height = 1.0;
+  ASSERT_TRUE(FPDF_GetPageSizeByIndex(document(), 0, &width, &height));
+  EXPECT_DOUBLE_EQ(100.0, width);
+  EXPECT_DOUBLE_EQ(100.0, height);
+}
+
+TEST_F(FPDFViewEmbedderTest, CroppedNoOverlapPageSize) {
+  ASSERT_TRUE(OpenDocument("cropped_no_overlap.pdf"));
+  ScopedPage page = LoadScopedPage(0);
+  ASSERT_TRUE(page);
+  EXPECT_FLOAT_EQ(0.0f, FPDF_GetPageWidthF(page.get()));
+  EXPECT_FLOAT_EQ(0.0f, FPDF_GetPageHeightF(page.get()));
+
+  double width = 1.0;
+  double height = 1.0;
+  ASSERT_TRUE(FPDF_GetPageSizeByIndex(document(), 0, &width, &height));
+  EXPECT_DOUBLE_EQ(0.0, width);
+  EXPECT_DOUBLE_EQ(0.0, height);
+}
+
 TEST_F(FPDFViewEmbedderTest, GetXFAArrayData) {
   static constexpr struct {
     int index;
diff --git a/testing/resources/cropped_no_overlap.in b/testing/resources/cropped_no_overlap.in
new file mode 100644
index 0000000..aa1c94d
--- /dev/null
+++ b/testing/resources/cropped_no_overlap.in
@@ -0,0 +1,34 @@
+{{header}}
+{{object 1 0}} <<
+  /Type /Catalog
+  /Pages 2 0 R
+>>
+endobj
+{{object 2 0}} <<
+  /Type /Pages
+  /CropBox [210 310 215 330]
+  /MediaBox [0 0 200 300]
+  /Count 1
+  /Kids [3 0 R]
+>>
+endobj
+{{object 3 0}} <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 4 0 R
+>>
+endobj
+{{object 4 0}} <<
+  {{streamlen}}
+>>
+stream
+q
+1 0 0 rg
+0 0 200 300 re f
+Q
+endstream
+endobj
+{{xref}}
+{{trailer}}
+{{startxref}}
+%%EOF
diff --git a/testing/resources/cropped_no_overlap.pdf b/testing/resources/cropped_no_overlap.pdf
new file mode 100644
index 0000000..35bf792
--- /dev/null
+++ b/testing/resources/cropped_no_overlap.pdf
@@ -0,0 +1,45 @@
+%PDF-1.7
+% ò¤ô
+1 0 obj <<
+  /Type /Catalog
+  /Pages 2 0 R
+>>
+endobj
+2 0 obj <<
+  /Type /Pages
+  /CropBox [210 310 215 330]
+  /MediaBox [0 0 200 300]
+  /Count 1
+  /Kids [3 0 R]
+>>
+endobj
+3 0 obj <<
+  /Type /Page
+  /Parent 2 0 R
+  /Contents 4 0 R
+>>
+endobj
+4 0 obj <<
+  /Length 29
+>>
+stream
+q
+1 0 0 rg
+0 0 200 300 re f
+Q
+endstream
+endobj
+xref
+0 5
+0000000000 65535 f 
+0000000015 00000 n 
+0000000068 00000 n 
+0000000186 00000 n 
+0000000255 00000 n 
+trailer <<
+  /Root 1 0 R
+  /Size 5
+>>
+startxref
+336
+%%EOF