From 486615821300724aef55035f4f831f548fb9cab6 Mon Sep 17 00:00:00 2001 From: jinming_wang Date: Thu, 4 Feb 2016 09:41:56 +0800 Subject: Pdfium does not create isolate when it runs in chromium BUG=pdfium:373 R=jochen@chromium.org Review URL: https://codereview.chromium.org/1652873003 . --- fpdfsdk/src/fpdfview.cpp | 5 ++++- fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp | 10 ++++++---- fpdfsdk/src/javascript/JS_Runtime.cpp | 2 -- fpdfsdk/src/jsapi/fxjs_v8.cpp | 5 ----- 4 files changed, 10 insertions(+), 12 deletions(-) (limited to 'fpdfsdk/src') diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp index ba647093eb..418d35d720 100644 --- a/fpdfsdk/src/fpdfview.cpp +++ b/fpdfsdk/src/fpdfview.cpp @@ -241,7 +241,10 @@ DLLEXPORT void STDCALL FPDF_InitLibraryWithConfig( pModuleMgr->InitPageModule(); pModuleMgr->InitRenderModule(); #ifdef PDF_ENABLE_XFA - CPDFXFA_App::GetInstance()->Initialize(); + CPDFXFA_App::GetInstance()->Initialize( + (cfg && cfg->version >= 2) + ? reinterpret_cast(cfg->m_pIsolate) + : nullptr); #else // PDF_ENABLE_XFA pModuleMgr->LoadEmbeddedGB1CMaps(); pModuleMgr->LoadEmbeddedJapan1CMaps(); diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp index 44e9c72ddc..1006bf9c44 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp @@ -31,7 +31,8 @@ CPDFXFA_App::CPDFXFA_App() m_pXFAApp(NULL), m_pFontMgr(NULL), m_hJSERuntime(NULL), - m_csAppType(JS_STR_VIEWERTYPE_STANDARD) { + m_csAppType(JS_STR_VIEWERTYPE_STANDARD), + m_bOwnedRuntime(false) { m_pEnvList.RemoveAll(); } @@ -43,7 +44,7 @@ CPDFXFA_App::~CPDFXFA_App() { m_pXFAApp = NULL; #ifdef PDF_ENABLE_XFA - FXJSE_Runtime_Release(m_hJSERuntime); + FXJSE_Runtime_Release(m_hJSERuntime, m_bOwnedRuntime); m_hJSERuntime = NULL; FXJSE_Finalize(); @@ -51,12 +52,13 @@ CPDFXFA_App::~CPDFXFA_App() { #endif } -FX_BOOL CPDFXFA_App::Initialize() { +FX_BOOL CPDFXFA_App::Initialize(FXJSE_HRUNTIME hRuntime) { #ifdef PDF_ENABLE_XFA BC_Library_Init(); FXJSE_Initialize(); - m_hJSERuntime = FXJSE_Runtime_Create(); + m_bOwnedRuntime = !hRuntime; + m_hJSERuntime = hRuntime ? hRuntime : FXJSE_Runtime_Create(); if (!m_hJSERuntime) return FALSE; diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp index ba6d748ade..95f392487a 100644 --- a/fpdfsdk/src/javascript/JS_Runtime.cpp +++ b/fpdfsdk/src/javascript/JS_Runtime.cpp @@ -121,9 +121,7 @@ CJS_Runtime::~CJS_Runtime() { delete m_ContextArray.GetAt(i); m_ContextArray.RemoveAll(); -#ifndef PDF_ENABLE_XFA FXJS_ReleaseRuntime(GetIsolate(), &m_context, &m_StaticObjects); -#endif m_pApp = NULL; m_pDocument = NULL; diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp index 9b6b5fa445..f015f87136 100644 --- a/fpdfsdk/src/jsapi/fxjs_v8.cpp +++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp @@ -370,11 +370,6 @@ void FXJS_ReleaseRuntime(v8::Isolate* pIsolate, return; pData->ReleaseDynamicObjsMap(); -#ifdef PDF_ENABLE_XFA - // XFA, if present, should have already cleaned itself up. - FXSYS_assert(!pData->m_pFXJSERuntimeData); -#endif // PDF_ENABLE_XFA - int maxID = CFXJS_ObjDefinition::MaxID(pIsolate); for (int i = 0; i < maxID; ++i) { CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i); -- cgit v1.2.3