summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp24
-rw-r--r--testing/embedder_test.cpp15
-rw-r--r--testing/embedder_test.h9
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_;