diff options
-rw-r--r-- | fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp | 24 | ||||
-rw-r--r-- | testing/embedder_test.cpp | 15 | ||||
-rw-r--r-- | testing/embedder_test.h | 9 |
3 files changed, 30 insertions, 18 deletions
diff --git a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp index 394933a9ff..187d611770 100644 --- a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp +++ b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp @@ -16,39 +16,41 @@ const wchar_t kScript[] = L"fred = 7"; class FXJSV8Embeddertest : public EmbedderTest { public: - FXJSV8Embeddertest() : m_pIsolate(nullptr) {} - ~FXJSV8Embeddertest() override {} + FXJSV8Embeddertest() + : m_pArrayBufferAllocator(new FXJS_ArrayBufferAllocator) { + v8::Isolate::CreateParams params; + params.array_buffer_allocator = m_pArrayBufferAllocator.get(); + m_pIsolate = v8::Isolate::New(params); + } + + ~FXJSV8Embeddertest() override { m_pIsolate->Dispose(); } void SetUp() override { + EmbedderTest::SetExternalIsolate(m_pIsolate); EmbedderTest::SetUp(); - m_pAllocator.reset(new FXJS_ArrayBufferAllocator()); - - v8::Isolate::CreateParams params; - params.array_buffer_allocator = m_pAllocator.get(); - m_pIsolate = v8::Isolate::New(params); v8::Isolate::Scope isolate_scope(m_pIsolate); v8::HandleScope handle_scope(m_pIsolate); - FXJS_Initialize(0, nullptr); FXJS_PerIsolateData::SetUp(m_pIsolate); FXJS_InitializeRuntime(m_pIsolate, nullptr, nullptr, m_pPersistentContext); } void TearDown() override { FXJS_ReleaseRuntime(m_pIsolate, m_pPersistentContext); + m_pPersistentContext.Reset(); FXJS_Release(); EmbedderTest::TearDown(); } - v8::Isolate* isolate() const { return m_pIsolate; } + v8::Isolate* isolate() { return m_pIsolate; } v8::Local<v8::Context> GetV8Context() { - return v8::Local<v8::Context>::New(m_pIsolate, m_pPersistentContext); + return m_pPersistentContext.Get(m_pIsolate); } private: + nonstd::unique_ptr<FXJS_ArrayBufferAllocator> m_pArrayBufferAllocator; v8::Isolate* m_pIsolate; v8::Global<v8::Context> m_pPersistentContext; - nonstd::unique_ptr<FXJS_ArrayBufferAllocator> m_pAllocator; }; TEST_F(FXJSV8Embeddertest, Getters) { diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index 951da8470c..d17df9a458 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp @@ -123,21 +123,21 @@ FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {} EmbedderTest::EmbedderTest() - : document_(nullptr), + : default_delegate_(new EmbedderTest::Delegate()), + document_(nullptr), form_handle_(nullptr), avail_(nullptr), + external_isolate_(nullptr), loader_(nullptr), file_length_(0), file_contents_(nullptr) { memset(&hints_, 0, sizeof(hints_)); memset(&file_access_, 0, sizeof(file_access_)); memset(&file_avail_, 0, sizeof(file_avail_)); - default_delegate_ = new EmbedderTest::Delegate(); - delegate_ = default_delegate_; + delegate_ = default_delegate_.get(); } EmbedderTest::~EmbedderTest() { - delete default_delegate_; } void EmbedderTest::SetUp() { @@ -159,7 +159,12 @@ void EmbedderTest::SetUp() { v8::V8::SetSnapshotDataBlob(&snapshot_); #endif // V8_USE_EXTERNAL_STARTUP_DATA - FPDF_InitLibrary(); + FPDF_LIBRARY_CONFIG config; + config.version = 2; + config.m_pUserFontPaths = nullptr; + config.m_pIsolate = external_isolate_; + config.m_v8EmbedderSlot = 0; + FPDF_InitLibraryWithConfig(&config); UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(this); memset(info, 0, sizeof(UNSUPPORT_INFO)); diff --git a/testing/embedder_test.h b/testing/embedder_test.h index f490f82536..f6842d23c3 100644 --- a/testing/embedder_test.h +++ b/testing/embedder_test.h @@ -12,6 +12,7 @@ #include "../public/fpdf_ext.h" #include "../public/fpdf_formfill.h" #include "../public/fpdfview.h" +#include "../third_party/base/nonstd_unique_ptr.h" #include "testing/gtest/include/gtest/gtest.h" #include "v8/include/v8.h" @@ -60,8 +61,11 @@ class EmbedderTest : public ::testing::Test, void SetUp() override; void TearDown() override; + // Call before SetUp to pass shared isolate, otherwise PDFium creates one. + void SetExternalIsolate(v8::Isolate* isolate) { external_isolate_ = isolate; } + void SetDelegate(Delegate* delegate) { - delegate_ = delegate ? delegate : default_delegate_; + delegate_ = delegate ? delegate : default_delegate_.get(); } FPDF_DOCUMENT document() { return document_; } @@ -94,7 +98,7 @@ class EmbedderTest : public ::testing::Test, protected: Delegate* delegate_; - Delegate* default_delegate_; + nonstd::unique_ptr<Delegate> default_delegate_; FPDF_DOCUMENT document_; FPDF_FORMHANDLE form_handle_; FPDF_AVAIL avail_; @@ -104,6 +108,7 @@ class EmbedderTest : public ::testing::Test, v8::Platform* platform_; v8::StartupData natives_; v8::StartupData snapshot_; + v8::Isolate* external_isolate_; TestLoader* loader_; size_t file_length_; char* file_contents_; |