Provide more FPDF_FORMFILLINO stubs for embedder_tests
Significant amounts of PDFium library logic may get short-circuited
if a stub is not present, regardless of whether it actually does
anything.
-- move some static methods into anonymous namespace.
Change-Id: I87586ba792161e8cbc1720e9f58a2fc14e900d0a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/93393
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 794acf3..8111945 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -50,6 +50,202 @@
}
#endif // BUILDFLAG(IS_WIN)
+// These "jump" into the delegate to do actual testing.
+void UnsupportedHandlerTrampoline(UNSUPPORT_INFO* info, int type) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ delegate->UnsupportedHandler(type);
+}
+
+int AlertTrampoline(IPDF_JSPLATFORM* platform,
+ FPDF_WIDESTRING message,
+ FPDF_WIDESTRING title,
+ int type,
+ int icon) {
+ auto* delegate = static_cast<EmbedderTest*>(platform)->GetDelegate();
+ return delegate->Alert(message, title, type, icon);
+}
+
+int SetTimerTrampoline(FPDF_FORMFILLINFO* info, int msecs, TimerCallback fn) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->SetTimer(msecs, fn);
+}
+
+void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->KillTimer(id);
+}
+
+FPDF_PAGE GetPageTrampoline(FPDF_FORMFILLINFO* info,
+ FPDF_DOCUMENT document,
+ int page_index) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->GetPage(info, document, page_index);
+}
+
+void DoURIActionTrampoline(FPDF_FORMFILLINFO* info, FPDF_BYTESTRING uri) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->DoURIAction(uri);
+}
+
+void DoGoToActionTrampoline(FPDF_FORMFILLINFO* info,
+ int page_index,
+ int zoom_mode,
+ float* pos_array,
+ int array_size) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->DoGoToAction(info, page_index, zoom_mode, pos_array,
+ array_size);
+}
+
+void OnFocusChangeTrampoline(FPDF_FORMFILLINFO* info,
+ FPDF_ANNOTATION annot,
+ int page_index) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->OnFocusChange(info, annot, page_index);
+}
+
+void DoURIActionWithKeyboardModifierTrampoline(FPDF_FORMFILLINFO* info,
+ FPDF_BYTESTRING uri,
+ int modifiers) {
+ auto* delegate = static_cast<EmbedderTest*>(info)->GetDelegate();
+ return delegate->DoURIActionWithKeyboardModifier(info, uri, modifiers);
+}
+
+// These do nothing (but must return a reasonable default value).
+void InvalidateStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom) {}
+
+void OutputSelectedRectStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom) {}
+
+void SetCursorStub(FPDF_FORMFILLINFO* pThis, int nCursorType) {}
+
+FPDF_SYSTEMTIME GetLocalTimeStub(FPDF_FORMFILLINFO* pThis) {
+ return {122, 11, 6, 28, 12, 59, 59, 500};
+}
+
+void OnChangeStub(FPDF_FORMFILLINFO* pThis) {}
+
+FPDF_PAGE GetCurrentPageStub(FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document) {
+ return GetPageTrampoline(pThis, document, 0);
+}
+
+int GetRotationStub(FPDF_FORMFILLINFO* pThis, FPDF_PAGE page) {
+ return 0;
+}
+
+void ExecuteNamedActionStub(FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING name) {}
+
+void SetTextFieldFocusStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING value,
+ FPDF_DWORD valueLen,
+ FPDF_BOOL is_focus) {}
+
+#ifdef PDF_ENABLE_XFA
+void DisplayCaretStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ FPDF_BOOL bVisible,
+ double left,
+ double top,
+ double right,
+ double bottom) {}
+
+int GetCurrentPageIndexStub(FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document) {
+ return 0;
+}
+
+void SetCurrentPageStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document,
+ int iCurPage) {}
+
+void GotoURLStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_DOCUMENT document,
+ FPDF_WIDESTRING wsURL) {}
+
+void GetPageViewRectStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom) {
+ *left = 0.0;
+ *top = 0.0;
+ *right = 512.0;
+ *bottom = 512.0;
+}
+
+void PageEventStub(FPDF_FORMFILLINFO* pThis,
+ int page_count,
+ FPDF_DWORD event_type) {}
+
+FPDF_BOOL PopupMenuStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ FPDF_WIDGET hWidget,
+ int menuFlag,
+ float x,
+ float y) {
+ return true;
+}
+
+FPDF_FILEHANDLER* OpenFileStub(FPDF_FORMFILLINFO* pThis,
+ int fileFlag,
+ FPDF_WIDESTRING wsURL,
+ const char* mode) {
+ return nullptr;
+}
+
+void EmailToStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_FILEHANDLER* fileHandler,
+ FPDF_WIDESTRING pTo,
+ FPDF_WIDESTRING pSubject,
+ FPDF_WIDESTRING pCC,
+ FPDF_WIDESTRING pBcc,
+ FPDF_WIDESTRING pMsg) {}
+
+void UploadToStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_FILEHANDLER* fileHandler,
+ int fileFlag,
+ FPDF_WIDESTRING uploadTo) {}
+
+int GetPlatformStub(FPDF_FORMFILLINFO* pThis, void* platform, int length) {
+ return 0;
+}
+
+int GetLanguageStub(FPDF_FORMFILLINFO* pThis, void* language, int length) {
+ return 0;
+}
+
+FPDF_FILEHANDLER* DownloadFromURLStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING URL) {
+ return nullptr;
+}
+
+FPDF_BOOL PostRequestURLStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING wsURL,
+ FPDF_WIDESTRING wsData,
+ FPDF_WIDESTRING wsContentType,
+ FPDF_WIDESTRING wsEncode,
+ FPDF_WIDESTRING wsHeader,
+ FPDF_BSTR* response) {
+ return true;
+}
+
+FPDF_BOOL PutRequestURLStub(FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING wsURL,
+ FPDF_WIDESTRING wsData,
+ FPDF_WIDESTRING wsEncode) {
+ return true;
+}
+#endif // PDF_ENABLE_XFA
+
} // namespace
EmbedderTest::EmbedderTest()
@@ -231,11 +427,37 @@
FPDF_FORMFILLINFO* formfillinfo = static_cast<FPDF_FORMFILLINFO*>(this);
memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO));
formfillinfo->version = form_fill_info_version_;
+ formfillinfo->FFI_Invalidate = InvalidateStub;
+ formfillinfo->FFI_OutputSelectedRect = OutputSelectedRectStub;
+ formfillinfo->FFI_SetCursor = SetCursorStub;
formfillinfo->FFI_SetTimer = SetTimerTrampoline;
formfillinfo->FFI_KillTimer = KillTimerTrampoline;
+ formfillinfo->FFI_GetLocalTime = GetLocalTimeStub;
+ formfillinfo->FFI_OnChange = OnChangeStub;
formfillinfo->FFI_GetPage = GetPageTrampoline;
+ formfillinfo->FFI_GetCurrentPage = GetCurrentPageStub;
+ formfillinfo->FFI_GetRotation = GetRotationStub;
+ formfillinfo->FFI_ExecuteNamedAction = ExecuteNamedActionStub;
+ formfillinfo->FFI_SetTextFieldFocus = SetTextFieldFocusStub;
formfillinfo->FFI_DoURIAction = DoURIActionTrampoline;
formfillinfo->FFI_DoGoToAction = DoGoToActionTrampoline;
+#ifdef PDF_ENABLE_XFA
+ formfillinfo->FFI_DisplayCaret = DisplayCaretStub;
+ formfillinfo->FFI_GetCurrentPageIndex = GetCurrentPageIndexStub;
+ formfillinfo->FFI_SetCurrentPage = SetCurrentPageStub;
+ formfillinfo->FFI_GotoURL = GotoURLStub;
+ formfillinfo->FFI_GetPageViewRect = GetPageViewRectStub;
+ formfillinfo->FFI_PageEvent = PageEventStub;
+ formfillinfo->FFI_PopupMenu = PopupMenuStub;
+ formfillinfo->FFI_OpenFile = OpenFileStub;
+ formfillinfo->FFI_EmailTo = EmailToStub;
+ formfillinfo->FFI_UploadTo = UploadToStub;
+ formfillinfo->FFI_GetPlatform = GetPlatformStub;
+ formfillinfo->FFI_GetLanguage = GetLanguageStub;
+ formfillinfo->FFI_DownloadFromURL = DownloadFromURLStub;
+ formfillinfo->FFI_PostRequestURL = PostRequestURLStub;
+ formfillinfo->FFI_PutRequestURL = PutRequestURLStub;
+#endif // PDF_ENABLE_XFA
formfillinfo->FFI_OnFocusChange = OnFocusChangeTrampoline;
formfillinfo->FFI_DoURIActionWithKeyboardModifier =
DoURIActionWithKeyboardModifierTrampoline;
@@ -553,80 +775,6 @@
}
// static
-void EmbedderTest::UnsupportedHandlerTrampoline(UNSUPPORT_INFO* info,
- int type) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- test->delegate_->UnsupportedHandler(type);
-}
-
-// static
-int EmbedderTest::AlertTrampoline(IPDF_JSPLATFORM* platform,
- FPDF_WIDESTRING message,
- FPDF_WIDESTRING title,
- int type,
- int icon) {
- EmbedderTest* test = static_cast<EmbedderTest*>(platform);
- return test->delegate_->Alert(message, title, type, icon);
-}
-
-// static
-int EmbedderTest::SetTimerTrampoline(FPDF_FORMFILLINFO* info,
- int msecs,
- TimerCallback fn) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->SetTimer(msecs, fn);
-}
-
-// static
-void EmbedderTest::KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->KillTimer(id);
-}
-
-// static
-FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_DOCUMENT document,
- int page_index) {
- return static_cast<EmbedderTest*>(info)->delegate_->GetPage(info, document,
- page_index);
-}
-
-// static
-void EmbedderTest::DoURIActionTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_BYTESTRING uri) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->DoURIAction(uri);
-}
-
-// static
-void EmbedderTest::DoGoToActionTrampoline(FPDF_FORMFILLINFO* info,
- int page_index,
- int zoom_mode,
- float* pos_array,
- int array_size) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->DoGoToAction(info, page_index, zoom_mode, pos_array,
- array_size);
-}
-
-// static
-void EmbedderTest::OnFocusChangeTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_ANNOTATION annot,
- int page_index) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->OnFocusChange(info, annot, page_index);
-}
-
-// static
-void EmbedderTest::DoURIActionWithKeyboardModifierTrampoline(
- FPDF_FORMFILLINFO* info,
- FPDF_BYTESTRING uri,
- int modifiers) {
- EmbedderTest* test = static_cast<EmbedderTest*>(info);
- return test->delegate_->DoURIActionWithKeyboardModifier(info, uri, modifiers);
-}
-
-// static
std::string EmbedderTest::HashBitmap(FPDF_BITMAP bitmap) {
int stride = FPDFBitmap_GetStride(bitmap);
int usable_bytes_per_row =
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index 73d8cb3..b32bcde 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -93,6 +93,7 @@
void SetUp() override;
void TearDown() override;
+ Delegate* GetDelegate() { return delegate_; }
void SetDelegate(Delegate* delegate) {
delegate_ = delegate ? delegate : default_delegate_.get();
}
@@ -275,32 +276,6 @@
#endif
private:
- static void UnsupportedHandlerTrampoline(UNSUPPORT_INFO*, int type);
- static int AlertTrampoline(IPDF_JSPLATFORM* plaform,
- FPDF_WIDESTRING message,
- FPDF_WIDESTRING title,
- int type,
- int icon);
- static int SetTimerTrampoline(FPDF_FORMFILLINFO* info,
- int msecs,
- TimerCallback fn);
- static void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id);
- static FPDF_PAGE GetPageTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_DOCUMENT document,
- int page_index);
- static void DoURIActionTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_BYTESTRING uri);
- static void DoGoToActionTrampoline(FPDF_FORMFILLINFO* info,
- int page_index,
- int zoom_mode,
- float* pos_array,
- int array_size);
- static void OnFocusChangeTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_ANNOTATION annot,
- int page_index);
- static void DoURIActionWithKeyboardModifierTrampoline(FPDF_FORMFILLINFO* info,
- FPDF_BYTESTRING uri,
- int modifiers);
static int WriteBlockCallback(FPDF_FILEWRITE* pFileWrite,
const void* data,
unsigned long size);