summaryrefslogtreecommitdiff
path: root/testing/embedder_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'testing/embedder_test.cpp')
-rw-r--r--testing/embedder_test.cpp86
1 files changed, 28 insertions, 58 deletions
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 29de4caad4..1003cb5187 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -18,8 +18,8 @@
#include "../public/fpdf_text.h"
#include "../public/fpdfview.h"
#include "testing/gmock/include/gmock/gmock.h"
-#include "v8/include/v8.h"
#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8.h"
#ifdef _WIN32
#define snprintf _snprintf
@@ -95,58 +95,6 @@ static bool GetExternalData(const std::string& exe_path,
} // namespace
-class EmbedderTestDefaultDelegate : public EmbedderTest::Delegate {
- public:
- int Alert(FPDF_WIDESTRING, FPDF_WIDESTRING, int, int) override {
- printf("Form_Alert called.\n");
- return 0;
- }
-
- void UnsupportedHandler(int type) {
- std::string feature = "Unknown";
- switch (type) {
- case FPDF_UNSP_DOC_XFAFORM:
- feature = "XFA";
- break;
- case FPDF_UNSP_DOC_PORTABLECOLLECTION:
- feature = "Portfolios_Packages";
- break;
- case FPDF_UNSP_DOC_ATTACHMENT:
- case FPDF_UNSP_ANNOT_ATTACHMENT:
- feature = "Attachment";
- break;
- case FPDF_UNSP_DOC_SECURITY:
- feature = "Rights_Management";
- break;
- case FPDF_UNSP_DOC_SHAREDREVIEW:
- feature = "Shared_Review";
- break;
- case FPDF_UNSP_DOC_SHAREDFORM_ACROBAT:
- case FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM:
- case FPDF_UNSP_DOC_SHAREDFORM_EMAIL:
- feature = "Shared_Form";
- break;
- case FPDF_UNSP_ANNOT_3DANNOT:
- feature = "3D";
- break;
- case FPDF_UNSP_ANNOT_MOVIE:
- feature = "Movie";
- break;
- case FPDF_UNSP_ANNOT_SOUND:
- feature = "Sound";
- break;
- case FPDF_UNSP_ANNOT_SCREEN_MEDIA:
- case FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA:
- feature = "Screen";
- break;
- case FPDF_UNSP_ANNOT_SIG:
- feature = "Digital_Signature";
- break;
- }
- printf("Unsupported feature: %s.\n", feature.c_str());
- }
-};
-
class TestLoader {
public:
TestLoader(const char* pBuf, size_t len);
@@ -184,7 +132,7 @@ EmbedderTest::EmbedderTest() :
memset(&hints_, 0, sizeof(hints_));
memset(&file_access_, 0, sizeof(file_access_));
memset(&file_avail_, 0, sizeof(file_avail_));
- default_delegate_ = new EmbedderTestDefaultDelegate();
+ default_delegate_ = new EmbedderTest::Delegate();
delegate_ = default_delegate_;
}
@@ -194,9 +142,15 @@ EmbedderTest::~EmbedderTest() {
void EmbedderTest::SetUp() {
v8::V8::InitializeICU();
- v8::Platform* platform = v8::platform::CreateDefaultPlatform();
- v8::V8::InitializePlatform(platform);
- v8::V8::Initialize();
+
+ platform_ = v8::platform::CreateDefaultPlatform();
+ v8::V8::InitializePlatform(platform_);
+ v8::V8::Initialize();
+
+ // By enabling predictable mode, V8 won't post any background tasks.
+ const char predictable_flag[] = "--predictable";
+ v8::V8::SetFlagsFromString(predictable_flag,
+ static_cast<int>(strlen(predictable_flag)));
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
ASSERT_TRUE(GetExternalData(g_exe_path_, "natives_blob.bin", &natives_));
@@ -222,9 +176,10 @@ void EmbedderTest::TearDown() {
}
FPDFAvail_Destroy(avail_);
FPDF_DestroyLibrary();
+ v8::V8::ShutdownPlatform();
+ delete platform_;
delete loader_;
free(file_contents_);
- v8::V8::ShutdownPlatform();
}
bool EmbedderTest::OpenDocument(const std::string& filename) {
@@ -272,6 +227,8 @@ bool EmbedderTest::OpenDocument(const std::string& filename) {
FPDF_FORMFILLINFO* formfillinfo = static_cast<FPDF_FORMFILLINFO*>(this);
memset(formfillinfo, 0, sizeof(FPDF_FORMFILLINFO));
formfillinfo->version = 1;
+ formfillinfo->FFI_SetTimer = SetTimerTrampoline;
+ formfillinfo->FFI_KillTimer = KillTimerTrampoline;
formfillinfo->m_pJsPlatform = platform;
form_handle_ = FPDFDOC_InitFormFillEnvironment(document_, formfillinfo);
@@ -343,6 +300,19 @@ int EmbedderTest::AlertTrampoline(IPDF_JSPLATFORM* 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);
+}
+
// 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) {