Index: testing/embedder_test.cpp |
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp |
index d62810d0871ece5fbd64aaeaf6fddbd9806873b2..151987fbb298dea2c4131c25f2235badbe49786b 100644 |
--- a/testing/embedder_test.cpp |
+++ b/testing/embedder_test.cpp |
@@ -232,6 +232,7 @@ bool EmbedderTest::OpenDocument(const std::string& filename) { |
formfillinfo->version = 1; |
formfillinfo->FFI_SetTimer = SetTimerTrampoline; |
formfillinfo->FFI_KillTimer = KillTimerTrampoline; |
+ formfillinfo->FFI_GetPage = GetPageTrampoline; |
formfillinfo->m_pJsPlatform = platform; |
form_handle_ = FPDFDOC_InitFormFillEnvironment(document_, formfillinfo); |
@@ -270,6 +271,15 @@ FPDF_PAGE EmbedderTest::LoadPage(int page_number) { |
return page; |
} |
+FPDF_PAGE EmbedderTest::LoadAndCachePage(int page_number) { |
+ FPDF_PAGE page = delegate_->GetPage(form_handle_, document_, page_number); |
+ if (!page) { |
+ return nullptr; |
+ } |
+ FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_OPEN); |
+ return page; |
+} |
+ |
FPDF_BITMAP EmbedderTest::RenderPage(FPDF_PAGE page) { |
int width = static_cast<int>(FPDF_GetPageWidth(page)); |
int height = static_cast<int>(FPDF_GetPageHeight(page)); |
@@ -286,6 +296,22 @@ void EmbedderTest::UnloadPage(FPDF_PAGE page) { |
FPDF_ClosePage(page); |
} |
+FPDF_PAGE EmbedderTest::Delegate::GetPage(FPDF_FORMHANDLE form_handle, |
+ FPDF_DOCUMENT document, |
+ int page_index) { |
+ auto it = m_pageMap.find(page_index); |
+ if (it != m_pageMap.end()) { |
+ return it->second; |
+ } |
+ FPDF_PAGE page = FPDF_LoadPage(document, page_index); |
+ if (!page) { |
+ return nullptr; |
+ } |
+ m_pageMap[page_index] = page; |
+ FORM_OnAfterLoadPage(page, form_handle); |
+ return page; |
+} |
+ |
// static |
void EmbedderTest::UnsupportedHandlerTrampoline(UNSUPPORT_INFO* info, |
int type) { |
@@ -317,6 +343,14 @@ void EmbedderTest::KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id) { |
return test->delegate_->KillTimer(id); |
} |
+// static |
+FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info, |
+ FPDF_DOCUMENT document, |
+ int page_index) { |
+ EmbedderTest* test = static_cast<EmbedderTest*>(info); |
+ return test->delegate_->GetPage(test->m_pFormfillinfo, document, page_index); |
+} |
+ |
// Can't use gtest-provided main since we need to stash the path to the |
// executable in order to find the external V8 binary data files. |
int main(int argc, char** argv) { |