diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 955c184..7ac7a0e 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -206,12 +206,12 @@
   m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum);
 }
 
-IJS_Runtime* CPDFSDK_FormFillEnvironment::GetJSRuntime() {
-  if (!IsJSInitiated())
+IJS_Runtime* CPDFSDK_FormFillEnvironment::GetIJSRuntime() {
+  if (!IsJSPlatformPresent())
     return nullptr;
-  if (!m_pJSRuntime)
-    m_pJSRuntime.reset(IJS_Runtime::Create(this));
-  return m_pJSRuntime.get();
+  if (!m_pIJSRuntime)
+    m_pIJSRuntime = IJS_Runtime::Create(this);
+  return m_pIJSRuntime.get();
 }
 
 CPDFSDK_AnnotHandlerMgr* CPDFSDK_FormFillEnvironment::GetAnnotHandlerMgr() {
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 31a1c51..f00630c 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -205,7 +205,7 @@
                    FPDF_BOOL bAnnotations);
   void JS_docgotoPage(int nPageNum);
 
-  bool IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
+  bool IsJSPlatformPresent() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
   ByteString GetAppName() const { return ""; }
   CFX_SystemHandler* GetSysHandler() const { return m_pSysHandler.get(); }
   FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
@@ -213,7 +213,7 @@
   // Creates if not present.
   CFFL_InteractiveFormFiller* GetInteractiveFormFiller();
   CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr();  // Creates if not present.
-  IJS_Runtime* GetJSRuntime();                    // Creates if not present.
+  IJS_Runtime* GetIJSRuntime();                   // Creates if not present.
   CPDFSDK_ActionHandler* GetActionHandler();      // Creates if not present.
   CPDFSDK_InterForm* GetInterForm();              // Creates if not present.
 
@@ -223,7 +223,7 @@
   FPDF_FORMFILLINFO* const m_pInfo;
   std::unique_ptr<CPDFSDK_AnnotHandlerMgr> m_pAnnotHandlerMgr;
   std::unique_ptr<CPDFSDK_ActionHandler> m_pActionHandler;
-  std::unique_ptr<IJS_Runtime> m_pJSRuntime;
+  std::unique_ptr<IJS_Runtime> m_pIJSRuntime;
   std::map<UnderlyingPageType*, std::unique_ptr<CPDFSDK_PageView>> m_PageMap;
   std::unique_ptr<CPDFSDK_InterForm> m_pInterForm;
   CPDFSDK_Annot::ObservedPtr m_pFocusAnnot;
diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index 3b76dca..2d25894 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -247,7 +247,7 @@
 #endif  // PDF_ENABLE_XFA
 
 void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) {
-  if (!m_pFormFillEnv->IsJSInitiated())
+  if (!m_pFormFillEnv->IsJSPlatformPresent())
     return;
 
   if (m_bBusy)
@@ -260,7 +260,7 @@
     return;
   }
 
-  IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime();
+  IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime();
   int nSize = m_pInterForm->CountFieldsInCalculationOrder();
   for (int i = 0; i < nSize; i++) {
     CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i);
@@ -301,12 +301,12 @@
 WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
                                        bool& bFormatted) {
   WideString sValue = pFormField->GetValue();
-  if (!m_pFormFillEnv->IsJSInitiated()) {
+  if (!m_pFormFillEnv->IsJSPlatformPresent()) {
     bFormatted = false;
     return sValue;
   }
 
-  IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime();
+  IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime();
   if (pFormField->GetFieldType() == FormFieldType::kComboBox &&
       pFormField->CountSelectedItems() > 0) {
     int index = pFormField->GetSelectedIndex(0);
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index 10aecb3..eba1ac5 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -770,7 +770,7 @@
 FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) {
   CPDFSDK_FormFillEnvironment* pFormFillEnv =
       HandleToCPDFSDKEnvironment(hHandle);
-  if (pFormFillEnv && pFormFillEnv->IsJSInitiated())
+  if (pFormFillEnv && pFormFillEnv->IsJSPlatformPresent())
     pFormFillEnv->ProcJavascriptFun();
 }
 
@@ -778,7 +778,7 @@
 FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle) {
   CPDFSDK_FormFillEnvironment* pFormFillEnv =
       HandleToCPDFSDKEnvironment(hHandle);
-  if (pFormFillEnv && pFormFillEnv->IsJSInitiated())
+  if (pFormFillEnv && pFormFillEnv->IsJSPlatformPresent())
     pFormFillEnv->ProcOpenAction();
 }
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index d05e2f6..784344f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -104,7 +104,7 @@
     return false;
   }
   m_pXFADoc->StopLoad();
-  m_pXFADoc->GetXFADoc()->InitScriptContext(GetJSERuntime());
+  m_pXFADoc->GetXFADoc()->InitScriptContext(GetCJSRuntime()->GetIsolate());
 
   if (m_pXFADoc->GetFormType() == FormType::kXFAFull)
     m_FormType = FormType::kXFAFull;
@@ -198,14 +198,12 @@
     m_pFormFillEnv->ClearChangeMark();
 }
 
-v8::Isolate* CPDFXFA_Context::GetJSERuntime() const {
+CJS_Runtime* CPDFXFA_Context::GetCJSRuntime() const {
   if (!m_pFormFillEnv)
     return nullptr;
 
   // XFA requires V8, if we have V8 then we have a CJS_Runtime and not the stub.
-  CJS_Runtime* runtime =
-      static_cast<CJS_Runtime*>(m_pFormFillEnv->GetJSRuntime());
-  return runtime->GetIsolate();
+  return static_cast<CJS_Runtime*>(m_pFormFillEnv->GetIJSRuntime());
 }
 
 WideString CPDFXFA_Context::GetAppTitle() const {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index acef8f2..3eca1b5 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -45,7 +45,7 @@
     return m_FormType == FormType::kXFAFull ||
            m_FormType == FormType::kXFAForeground;
   }
-  v8::Isolate* GetJSERuntime() const;
+  CJS_Runtime* GetCJSRuntime() const;
   CXFA_FFApp* GetXFAApp() { return m_pXFAApp.get(); }
 
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index f3acf56..d47c145 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -990,13 +990,13 @@
   if (hDoc != m_pContext->GetXFADoc())
     return false;
   if (!m_pContext->GetFormFillEnv() ||
-      !m_pContext->GetFormFillEnv()->GetJSRuntime()) {
+      !m_pContext->GetFormFillEnv()->GetIJSRuntime()) {
     return false;
   }
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
-  IJS_EventContext* pContext = pFormFillEnv->GetJSRuntime()->NewEventContext();
-  bool bRet = pFormFillEnv->GetJSRuntime()->SetValueByName(szPropName, pValue);
-  pFormFillEnv->GetJSRuntime()->ReleaseEventContext(pContext);
+  IJS_EventContext* pContext = pFormFillEnv->GetIJSRuntime()->NewEventContext();
+  bool bRet = pFormFillEnv->GetIJSRuntime()->SetValueByName(szPropName, pValue);
+  pFormFillEnv->GetIJSRuntime()->ReleaseEventContext(pContext);
   return bRet;
 }
 
@@ -1006,12 +1006,12 @@
   if (hDoc != m_pContext->GetXFADoc())
     return false;
   if (!m_pContext->GetFormFillEnv() ||
-      !m_pContext->GetFormFillEnv()->GetJSRuntime()) {
+      !m_pContext->GetFormFillEnv()->GetIJSRuntime()) {
     return false;
   }
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
-  IJS_EventContext* pContext = pFormFillEnv->GetJSRuntime()->NewEventContext();
-  bool bRet = pFormFillEnv->GetJSRuntime()->GetValueByName(szPropName, pValue);
-  pFormFillEnv->GetJSRuntime()->ReleaseEventContext(pContext);
+  IJS_EventContext* pContext = pFormFillEnv->GetIJSRuntime()->NewEventContext();
+  bool bRet = pFormFillEnv->GetIJSRuntime()->GetValueByName(szPropName, pValue);
+  pFormFillEnv->GetIJSRuntime()->ReleaseEventContext(pContext);
   return bRet;
 }
diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp
index 6fcf9d4..0059bb9 100644
--- a/fpdfsdk/fsdk_actionhandler.cpp
+++ b/fpdfsdk/fsdk_actionhandler.cpp
@@ -49,7 +49,7 @@
     CPDF_FormField* pFormField,
     PDFSDK_FieldAction* data) {
   ASSERT(pFormFillEnv);
-  if (pFormFillEnv->IsJSInitiated() &&
+  if (pFormFillEnv->IsJSPlatformPresent() &&
       JsAction.GetType() == CPDF_Action::JavaScript) {
     WideString swJS = JsAction.GetJavaScript();
     if (!swJS.IsEmpty()) {
@@ -124,7 +124,7 @@
 
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
-    if (pFormFillEnv->IsJSInitiated()) {
+    if (pFormFillEnv->IsJSPlatformPresent()) {
       WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty())
         RunDocumentOpenJavaScript(pFormFillEnv, L"", swJS);
@@ -184,7 +184,7 @@
 
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
-    if (pFormFillEnv->IsJSInitiated()) {
+    if (pFormFillEnv->IsJSPlatformPresent()) {
       WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty())
         RunDocumentPageJavaScript(pFormFillEnv, type, swJS);
@@ -229,7 +229,7 @@
 
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
-    if (pFormFillEnv->IsJSInitiated()) {
+    if (pFormFillEnv->IsJSPlatformPresent()) {
       WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
@@ -526,7 +526,7 @@
     const CPDF_Action& action,
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
     std::function<void(IJS_EventContext* context)> cb) {
-  if (!pFormFillEnv->IsJSInitiated())
+  if (!pFormFillEnv->IsJSPlatformPresent())
     return;
 
   WideString swJS = action.GetJavaScript();
@@ -540,7 +540,7 @@
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
     const WideString& script,
     std::function<void(IJS_EventContext* context)> cb) {
-  IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
+  IJS_Runtime* pRuntime = pFormFillEnv->GetIJSRuntime();
   IJS_EventContext* pContext = pRuntime->NewEventContext();
 
   cb(pContext);
diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp
index c8e95e1..919c5a9 100644
--- a/fxjs/cjs_runtime.cpp
+++ b/fxjs/cjs_runtime.cpp
@@ -57,8 +57,9 @@
 }
 
 // static
-IJS_Runtime* IJS_Runtime::Create(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
-  return new CJS_Runtime(pFormFillEnv);
+std::unique_ptr<IJS_Runtime> IJS_Runtime::Create(
+    CPDFSDK_FormFillEnvironment* pFormFillEnv) {
+  return pdfium::MakeUnique<CJS_Runtime>(pFormFillEnv);
 }
 
 // static
diff --git a/fxjs/cjs_runtimestub.cpp b/fxjs/cjs_runtimestub.cpp
index 9196728..964b0ff 100644
--- a/fxjs/cjs_runtimestub.cpp
+++ b/fxjs/cjs_runtimestub.cpp
@@ -55,6 +55,7 @@
 void IJS_Runtime::Destroy() {}
 
 // static
-IJS_Runtime* IJS_Runtime::Create(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
-  return new CJS_RuntimeStub(pFormFillEnv);
+std::unique_ptr<IJS_Runtime> IJS_Runtime::Create(
+    CPDFSDK_FormFillEnvironment* pFormFillEnv) {
+  return pdfium::MakeUnique<CJS_RuntimeStub>(pFormFillEnv);
 }
diff --git a/fxjs/ijs_runtime.h b/fxjs/ijs_runtime.h
index e649aad..9fe5d2f 100644
--- a/fxjs/ijs_runtime.h
+++ b/fxjs/ijs_runtime.h
@@ -7,6 +7,8 @@
 #ifndef FXJS_IJS_RUNTIME_H_
 #define FXJS_IJS_RUNTIME_H_
 
+#include <memory>
+
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 
@@ -22,7 +24,8 @@
  public:
   static void Initialize(unsigned int slot, void* isolate);
   static void Destroy();
-  static IJS_Runtime* Create(CPDFSDK_FormFillEnvironment* pFormFillEnv);
+  static std::unique_ptr<IJS_Runtime> Create(
+      CPDFSDK_FormFillEnvironment* pFormFillEnv);
   virtual ~IJS_Runtime() {}
 
   virtual IJS_EventContext* NewEventContext() = 0;
