Pass v8::Isolate to PDFium at init time.
[pdfium.git] / fpdfsdk / src / javascript / JS_Runtime.cpp
index 7ce8a53..5c463ce 100644 (file)
@@ -35,22 +35,17 @@ CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp)
       m_bBlocking(FALSE),
       m_isolate(NULL),
       m_isolateManaged(false) {
-  unsigned int embedderDataSlot = 0;
-  if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
-    m_isolate = reinterpret_cast<v8::Isolate*>(
-        m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate);
-    embedderDataSlot = pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
-  }
-  if (!m_isolate) {
-    m_pArrayBufferAllocator.reset(new FXJS_ArrayBufferAllocator());
-
-    v8::Isolate::CreateParams params;
-    params.array_buffer_allocator = m_pArrayBufferAllocator.get();
-    m_isolate = v8::Isolate::New(params);
-    m_isolateManaged = true;
+  IPDF_JSPLATFORM* pPlatform = m_pApp->GetFormFillInfo()->m_pJsPlatform;
+  if (pPlatform->version <= 2) {
+    unsigned int embedderDataSlot = 0;
+    v8::Isolate* pExternalIsolate = nullptr;
+    if (pPlatform->version == 2) {
+      pExternalIsolate = reinterpret_cast<v8::Isolate*>(pPlatform->m_isolate);
+      embedderDataSlot = pPlatform->m_v8EmbedderSlot;
+    }
+    FXJS_Initialize(embedderDataSlot, pExternalIsolate);
   }
-
-  FXJS_Initialize(embedderDataSlot);
+  m_isolateManaged = FXJS_GetIsolate(&m_isolate);
   DefineJSObjects();
 
   CJS_Context* pContext = (CJS_Context*)NewContext();
@@ -63,13 +58,7 @@ CJS_Runtime::~CJS_Runtime() {
     delete m_ContextArray.GetAt(i);
 
   m_ContextArray.RemoveAll();
-
-  // TODO(raymes): Currently we're freeing per-isolate data everytime a
-  // document is destroyed even though it may be in use by other documents. For
-  // now we leak the per-isolate data (when m_isolateManaged is false) until
-  // crbug.com/531339 is fixed.
-  if (m_isolateManaged)
-    FXJS_ReleaseRuntime(GetIsolate(), m_context);
+  FXJS_ReleaseRuntime(GetIsolate(), m_context);
 
   m_pApp = NULL;
   m_pDocument = NULL;