diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-10-07 10:17:53 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-10-07 10:17:53 -0700 |
commit | a72e8e2c4392df725c7e35ed1ae3f891e79e49ec (patch) | |
tree | 99eb91f764c428cd34a3b84e8b9e9bfb239d9e5a /fpdfsdk/src/jsapi/fxjs_v8.cpp | |
parent | cd56a7d6fb05bd0babf316a84280a26ecc649d45 (diff) | |
download | pdfium-a72e8e2c4392df725c7e35ed1ae3f891e79e49ec.tar.xz |
Merge to XFA: Pass v8::Isolate to PDFium at init time.
New code changes in JS_Runtime.cpp.
(cherry picked from commit 3dedace9623fef6161a8666e53a4ab2b9be61e4c)
Original Review URL: https://codereview.chromium.org/1367033002 .
Also merge to XFA: Run FXJS_V8 embedder tests against a shared isolate,
since the two go together.
(cherry picked from commit 4ea721cb7954898a9722c389dae86c62957352d0)
Original Review URL: https://codereview.chromium.org/1377293004 .
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1381633008 .
Diffstat (limited to 'fpdfsdk/src/jsapi/fxjs_v8.cpp')
-rw-r--r-- | fpdfsdk/src/jsapi/fxjs_v8.cpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp index 765ec2700d..0be7cc01e2 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 { @@ -123,6 +123,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)) @@ -135,13 +162,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, |