summaryrefslogtreecommitdiff
path: root/fpdfsdk/src/jsapi/fxjs_v8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/src/jsapi/fxjs_v8.cpp')
-rw-r--r--fpdfsdk/src/jsapi/fxjs_v8.cpp40
1 files changed, 30 insertions, 10 deletions
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp
index 667132fde4..ff45a7a0ce 100644
--- a/fpdfsdk/src/jsapi/fxjs_v8.cpp
+++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp
@@ -16,14 +16,14 @@ const wchar_t kFXJSValueNameFxobj[] = L"fxobj";
const wchar_t kFXJSValueNameNull[] = L"null";
const wchar_t kFXJSValueNameUndefined[] = L"undefined";
-static unsigned int g_embedderDataSlot = 1u;
-
// Keep this consistent with the values defined in gin/public/context_holder.h
// (without actually requiring a dependency on gin itself for the standalone
// embedders of PDFIum). The value we want to use is:
// kPerContextDataStartIndex + kEmbedderPDFium, which is 3.
static const unsigned int kPerContextDataIndex = 3u;
-
+static unsigned int g_embedderDataSlot = 1u;
+static v8::Isolate* g_isolate = nullptr;
+static FXJS_ArrayBufferAllocator* g_arrayBufferAllocator = nullptr;
static v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr;
class CFXJS_PrivateData {
@@ -131,6 +131,33 @@ void FXJS_ArrayBufferAllocator::Free(void* data, size_t length) {
free(data);
}
+void FXJS_Initialize(unsigned int embedderDataSlot, v8::Isolate* pIsolate) {
+ g_embedderDataSlot = embedderDataSlot;
+ g_isolate = pIsolate;
+}
+
+void FXJS_Release() {
+ g_DefaultGlobalObjectTemplate = nullptr;
+ g_isolate = nullptr;
+
+ delete g_arrayBufferAllocator;
+ g_arrayBufferAllocator = nullptr;
+}
+
+bool FXJS_GetIsolate(v8::Isolate** pResultIsolate) {
+ if (g_isolate) {
+ *pResultIsolate = g_isolate;
+ return false;
+ }
+ // Provide backwards compatibility when no external isolate.
+ if (!g_arrayBufferAllocator)
+ g_arrayBufferAllocator = new FXJS_ArrayBufferAllocator();
+ v8::Isolate::CreateParams params;
+ params.array_buffer_allocator = g_arrayBufferAllocator;
+ *pResultIsolate = v8::Isolate::New(params);
+ return true;
+}
+
// static
void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) {
if (!pIsolate->GetData(g_embedderDataSlot))
@@ -143,13 +170,6 @@ FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) {
pIsolate->GetData(g_embedderDataSlot));
}
-void FXJS_Initialize(unsigned int embedderDataSlot) {
- g_embedderDataSlot = embedderDataSlot;
-}
-
-void FXJS_Release() {
-}
-
int FXJS_DefineObj(v8::Isolate* pIsolate,
const wchar_t* sObjName,
FXJSOBJTYPE eObjType,