Index: testing/embedder_test.cpp |
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp |
index 59190a7751de2cca2e9b9f19294688cb0248e0a1..f9b636a6018a4602b21ddb28c2f3b38507b57419 100644 |
--- a/testing/embedder_test.cpp |
+++ b/testing/embedder_test.cpp |
@@ -25,7 +25,16 @@ |
#endif // PDF_ENABLE_V8 |
namespace { |
-const char* g_exe_path_ = nullptr; |
+ |
+const char* g_exe_path = nullptr; |
+ |
+#ifdef PDF_ENABLE_V8 |
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
+v8::StartupData* g_v8_natives = nullptr; |
+v8::StartupData* g_v8_snapshot = nullptr; |
+#endif // V8_USE_EXTERNAL_STARTUP_DATA |
+#endif // PDF_ENABLE_V8 |
+ |
} // namespace |
FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { |
@@ -50,10 +59,17 @@ EmbedderTest::EmbedderTest() |
#ifdef PDF_ENABLE_V8 |
#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
- InitializeV8ForPDFium(g_exe_path_, std::string(), &natives_, &snapshot_, |
- &platform_); |
+ if (g_v8_natives && g_v8_snapshot) { |
+ InitializeV8ForPDFium(g_exe_path, std::string(), nullptr, nullptr, |
+ &platform_); |
+ } else { |
+ g_v8_natives = new v8::StartupData; |
+ g_v8_snapshot = new v8::StartupData; |
+ InitializeV8ForPDFium(g_exe_path, std::string(), g_v8_natives, |
+ g_v8_snapshot, &platform_); |
+ } |
#else |
- InitializeV8ForPDFium(g_exe_path_, &platform_); |
+ InitializeV8ForPDFium(g_exe_path, &platform_); |
#endif // V8_USE_EXTERNAL_STARTUP_DATA |
#endif // FPDF_ENABLE_V8 |
} |
@@ -319,8 +335,19 @@ FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info, |
// 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) { |
- g_exe_path_ = argv[0]; |
+ g_exe_path = argv[0]; |
testing::InitGoogleTest(&argc, argv); |
testing::InitGoogleMock(&argc, argv); |
- return RUN_ALL_TESTS(); |
+ int ret_val = RUN_ALL_TESTS(); |
+ |
+#ifdef PDF_ENABLE_V8 |
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
+ if (g_v8_natives) |
+ free(const_cast<char*>(g_v8_natives->data)); |
+ if (g_v8_snapshot) |
+ free(const_cast<char*>(g_v8_snapshot->data)); |
+#endif // V8_USE_EXTERNAL_STARTUP_DATA |
+#endif // PDF_ENABLE_V8 |
+ |
+ return ret_val; |
} |