From 6efc0ad16665ab74c5033bdc36dbcb7c8aad7e6c Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 2 Jun 2015 17:11:18 -0700 Subject: Merge to XFA: Automated test case for 487928. Original Review URL: https://codereview.chromium.org/1153213004 R=thestig@chromium.org TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/1158483004 --- testing/embedder_test.cpp | 86 +++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 58 deletions(-) (limited to 'testing/embedder_test.cpp') 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(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(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(info); + return test->delegate_->SetTimer(msecs, fn); +} + +// static +void EmbedderTest::KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id) { + EmbedderTest* test = static_cast(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) { -- cgit v1.2.3