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;