Implement IJS_Runtime::Destroy().
And call it from FPDF_DestroyLibrary(). Otherwise further attempts to
FPDF_InitLibraryWithConfig() can hit fail an assertion in
IJS_Runtime::Initialize().
BUG=604587
Review-Url: https://codereview.chromium.org/2103443004
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 38d704d..646fb46 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -291,6 +291,8 @@
delete g_pCodecModule;
g_pCodecModule = nullptr;
+
+ IJS_Runtime::Destroy();
}
#ifndef _WIN32
diff --git a/fpdfsdk/javascript/JS_Runtime_Stub.cpp b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
index 4930900..39c191a 100644
--- a/fpdfsdk/javascript/JS_Runtime_Stub.cpp
+++ b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
@@ -161,6 +161,9 @@
void IJS_Runtime::Initialize(unsigned int slot, void* isolate) {}
// static
+void IJS_Runtime::Destroy() {}
+
+// static
IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) {
return new CJS_RuntimeStub;
}
diff --git a/fpdfsdk/javascript/cjs_runtime.cpp b/fpdfsdk/javascript/cjs_runtime.cpp
index 2bcdc22..88530f7 100644
--- a/fpdfsdk/javascript/cjs_runtime.cpp
+++ b/fpdfsdk/javascript/cjs_runtime.cpp
@@ -40,6 +40,11 @@
}
// static
+void IJS_Runtime::Destroy() {
+ FXJS_Release();
+}
+
+// static
IJS_Runtime* IJS_Runtime::Create(CPDFDoc_Environment* pEnv) {
return new CJS_Runtime(pEnv);
}
diff --git a/fpdfsdk/javascript/ijs_runtime.h b/fpdfsdk/javascript/ijs_runtime.h
index 4083f86..b24a2dd 100644
--- a/fpdfsdk/javascript/ijs_runtime.h
+++ b/fpdfsdk/javascript/ijs_runtime.h
@@ -22,6 +22,7 @@
class IJS_Runtime {
public:
static void Initialize(unsigned int slot, void* isolate);
+ static void Destroy();
static IJS_Runtime* Create(CPDFDoc_Environment* pEnv);
virtual ~IJS_Runtime() {}
diff --git a/testing/js_embedder_test.cpp b/testing/js_embedder_test.cpp
index bdd1573..5927d89 100644
--- a/testing/js_embedder_test.cpp
+++ b/testing/js_embedder_test.cpp
@@ -28,7 +28,6 @@
void JSEmbedderTest::TearDown() {
FXJS_ReleaseRuntime(m_pIsolate, &m_pPersistentContext, &m_StaticObjects);
m_pPersistentContext.Reset();
- FXJS_Release();
EmbedderTest::TearDown();
m_pIsolate->Dispose();
m_pIsolate = nullptr;