Add EmbedderTest::LoadPageNoEvents() and UnloadPageNoEvents() Call it in fpdf_annot_embeddertest.cpp. This fixes a couple of TODOs, and allows the use of the rest of the embedder test mechanism on these cases in a subsequent cl. Change-Id: I41a7136b62c2f9d8010057f157a0e182ba12fdf7 Reviewed-on: https://pdfium-review.googlesource.com/c/45170 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp index 7be5d75..777d821 100644 --- a/fpdfsdk/fpdf_annot_embeddertest.cpp +++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -97,10 +97,7 @@ TEST_F(FPDFAnnotEmbeddertest, ExtractHighlightLongContent) { // Open a file with one annotation and load its first page. ASSERT_TRUE(OpenDocument("annotation_highlight_long_content.pdf")); - // TODO(thestig): This test should use LoadPage() and UnloadPage(), but one of - // the FORM API calls in LoadPage() makes this test fail. So use - // FPDF_LoadPage() and FPDF_ClosePage() for now. - FPDF_PAGE page = FPDF_LoadPage(document(), 0); + FPDF_PAGE page = LoadPageNoEvents(0); ASSERT_TRUE(page); // Check that there is a total of 1 annotation on its first page. @@ -174,16 +171,13 @@ EXPECT_EQ(157.211182f, quadpoints.x4); EXPECT_EQ(706.264465f, quadpoints.y4); } - FPDF_ClosePage(page); + UnloadPageNoEvents(page); } TEST_F(FPDFAnnotEmbeddertest, ExtractInkMultiple) { // Open a file with three annotations and load its first page. ASSERT_TRUE(OpenDocument("annotation_ink_multiple.pdf")); - // TODO(thestig): This test should use LoadPage() and UnloadPage(), but one of - // the FORM API calls in LoadPage() makes this test fail. So use - // FPDF_LoadPage() and FPDF_ClosePage() for now. - FPDF_PAGE page = FPDF_LoadPage(document(), 0); + FPDF_PAGE page = LoadPageNoEvents(0); ASSERT_TRUE(page); // Check that there is a total of 3 annotation on its first page. @@ -220,7 +214,7 @@ EXPECT_EQ(475.336090f, rect.right); EXPECT_EQ(681.535034f, rect.top); } - FPDF_ClosePage(page); + UnloadPageNoEvents(page); } TEST_F(FPDFAnnotEmbeddertest, AddIllegalSubtypeAnnotation) { @@ -600,10 +594,7 @@ TEST_F(FPDFAnnotEmbeddertest, RemoveAnnotation) { // Open a file with 3 annotations on its first page. ASSERT_TRUE(OpenDocument("annotation_ink_multiple.pdf")); - // TODO(thestig): This test should use LoadPage() and UnloadPage(), but one of - // the FORM API calls in LoadPage() makes this test fail. So use - // FPDF_LoadPage() and FPDF_ClosePage() for now. - FPDF_PAGE page = FPDF_LoadPage(document(), 0); + FPDF_PAGE page = LoadPageNoEvents(0); ASSERT_TRUE(page); EXPECT_EQ(3, FPDFPage_GetAnnotCount(page)); @@ -641,7 +632,7 @@ // Save the document, closing the page and document. EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - FPDF_ClosePage(page); + UnloadPageNoEvents(page); // TODO(npm): VerifySavedRendering changes annot rect dimensions by 1?? // Open the saved document.
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index 6dd13e2..a94b7ef 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp
@@ -282,6 +282,14 @@ } FPDF_PAGE EmbedderTest::LoadPage(int page_number) { + return LoadPageCommon(page_number, true); +} + +FPDF_PAGE EmbedderTest::LoadPageNoEvents(int page_number) { + return LoadPageCommon(page_number, false); +} + +FPDF_PAGE EmbedderTest::LoadPageCommon(int page_number, bool do_events) { ASSERT(form_handle_); ASSERT(page_number >= 0); ASSERT(!pdfium::ContainsKey(page_map_, page_number)); @@ -290,25 +298,34 @@ if (!page) return nullptr; - FORM_OnAfterLoadPage(page, form_handle_); - FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_OPEN); + if (do_events) { + FORM_OnAfterLoadPage(page, form_handle_); + FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_OPEN); + } page_map_[page_number] = page; return page; } void EmbedderTest::UnloadPage(FPDF_PAGE page) { - ASSERT(form_handle_); + UnloadPageCommon(page, true); +} +void EmbedderTest::UnloadPageNoEvents(FPDF_PAGE page) { + UnloadPageCommon(page, false); +} + +void EmbedderTest::UnloadPageCommon(FPDF_PAGE page, bool do_events) { + ASSERT(form_handle_); int page_number = GetPageNumberForLoadedPage(page); if (page_number < 0) { NOTREACHED(); return; } - - FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_CLOSE); - FORM_OnBeforeClosePage(page, form_handle_); + if (do_events) { + FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_CLOSE); + FORM_OnBeforeClosePage(page, form_handle_); + } FPDF_ClosePage(page); - page_map_.erase(page_number); }
diff --git a/testing/embedder_test.h b/testing/embedder_test.h index 37c5ca8..4ba5d44 100644 --- a/testing/embedder_test.h +++ b/testing/embedder_test.h
@@ -119,10 +119,16 @@ // holds the page handle for that page. FPDF_PAGE LoadPage(int page_number); + // Same as LoadPage(), but does not fire form events. + FPDF_PAGE LoadPageNoEvents(int page_number); + // Fire form unload events and release the resources for a |page| obtained // from LoadPage(). Further use of |page| is prohibited after calling this. void UnloadPage(FPDF_PAGE page); + // Same as UnloadPage(), but does not fire form events. + void UnloadPageNoEvents(FPDF_PAGE page); + // RenderLoadedPageWithFlags() with no flags. ScopedFPDFBitmap RenderLoadedPage(FPDF_PAGE page); @@ -258,6 +264,9 @@ // Same as GetPageNumberForLoadedPage(), but with |saved_page_map_|. int GetPageNumberForSavedPage(FPDF_PAGE page) const; + void UnloadPageCommon(FPDF_PAGE page, bool do_events); + FPDF_PAGE LoadPageCommon(int page_number, bool do_events); + std::string data_string_; std::string saved_document_file_data_; std::ofstream filestream_;