Pass CJS_Runtime to JS callbacks.

This is much more convenient, since only a fraction of them
need an IJS_EventContext, which can be obtained from the
CJS_Runtime.

Make GetCurrentEventContext() specific to CJS_Runtime, and
return the concrete type.  This saves a lot of casting.

Change-Id: If79a3bcbf44de513f3caace153099234cc313d47
Reviewed-on: https://pdfium-review.googlesource.com/2793
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/fpdfsdk/javascript/Annot.cpp b/fpdfsdk/javascript/Annot.cpp
index 1a496ec..dbb2cb2 100644
--- a/fpdfsdk/javascript/Annot.cpp
+++ b/fpdfsdk/javascript/Annot.cpp
@@ -37,7 +37,7 @@
 
 Annot::~Annot() {}
 
-bool Annot::hidden(IJS_EventContext* cc,
+bool Annot::hidden(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -73,7 +73,7 @@
   return true;
 }
 
-bool Annot::name(IJS_EventContext* cc,
+bool Annot::name(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -96,7 +96,7 @@
   return true;
 }
 
-bool Annot::type(IJS_EventContext* cc,
+bool Annot::type(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (vp.IsSetting()) {
diff --git a/fpdfsdk/javascript/Annot.h b/fpdfsdk/javascript/Annot.h
index dffa713..d9757fa 100644
--- a/fpdfsdk/javascript/Annot.h
+++ b/fpdfsdk/javascript/Annot.h
@@ -17,9 +17,9 @@
   explicit Annot(CJS_Object* pJSObject);
   ~Annot() override;
 
-  bool hidden(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool name(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool type(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
+  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
 
   void SetSDKAnnot(CPDFSDK_BAAnnot* annot);
 
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index 38600ed..133e1b3 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -163,7 +163,7 @@
 }
 
 // the total number of fileds in document.
-bool Document::numFields(IJS_EventContext* cc,
+bool Document::numFields(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -180,7 +180,7 @@
   return true;
 }
 
-bool Document::dirty(IJS_EventContext* cc,
+bool Document::dirty(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!m_pFormFillEnv) {
@@ -201,16 +201,16 @@
   return true;
 }
 
-bool Document::ADBE(IJS_EventContext* cc,
+bool Document::ADBE(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (vp.IsGetting())
-    vp.GetJSValue()->SetNull(CJS_Runtime::FromEventContext(cc));
+    vp.GetJSValue()->SetNull(pRuntime);
 
   return true;
 }
 
-bool Document::pageNum(IJS_EventContext* cc,
+bool Document::pageNum(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   if (!m_pFormFillEnv) {
@@ -235,7 +235,7 @@
   return true;
 }
 
-bool Document::addAnnot(IJS_EventContext* cc,
+bool Document::addAnnot(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -243,7 +243,7 @@
   return true;
 }
 
-bool Document::addField(IJS_EventContext* cc,
+bool Document::addField(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -251,7 +251,7 @@
   return true;
 }
 
-bool Document::exportAsText(IJS_EventContext* cc,
+bool Document::exportAsText(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -259,7 +259,7 @@
   return true;
 }
 
-bool Document::exportAsFDF(IJS_EventContext* cc,
+bool Document::exportAsFDF(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
@@ -267,7 +267,7 @@
   return true;
 }
 
-bool Document::exportAsXFDF(IJS_EventContext* cc,
+bool Document::exportAsXFDF(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -280,7 +280,7 @@
 // note: the paremter cName, this is clue how to treat if the cName is not a
 // valiable filed name in this document
 
-bool Document::getField(IJS_EventContext* cc,
+bool Document::getField(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -292,7 +292,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
@@ -313,7 +312,7 @@
 }
 
 // Gets the name of the nth field in the document
-bool Document::getNthFieldName(IJS_EventContext* cc,
+bool Document::getNthFieldName(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError) {
@@ -325,7 +324,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int nIndex = params[0].ToInt(pRuntime);
   if (nIndex < 0) {
     sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
@@ -341,7 +339,7 @@
   return true;
 }
 
-bool Document::importAnFDF(IJS_EventContext* cc,
+bool Document::importAnFDF(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
@@ -349,7 +347,7 @@
   return true;
 }
 
-bool Document::importAnXFDF(IJS_EventContext* cc,
+bool Document::importAnXFDF(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -357,7 +355,7 @@
   return true;
 }
 
-bool Document::importTextData(IJS_EventContext* cc,
+bool Document::importTextData(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError) {
@@ -368,7 +366,7 @@
 // exports the form data and mails the resulting fdf file as an attachment to
 // all recipients.
 // comment: need reader supports
-bool Document::mailForm(IJS_EventContext* cc,
+bool Document::mailForm(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -380,7 +378,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iLength = params.size();
   bool bUI = iLength > 0 ? params[0].ToBool(pRuntime) : true;
   CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
@@ -403,7 +400,7 @@
   return true;
 }
 
-bool Document::print(IJS_EventContext* cc,
+bool Document::print(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
@@ -411,7 +408,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   bool bUI = true;
   int nStart = 0;
   int nEnd = 0;
@@ -472,7 +468,7 @@
 // comment:
 // note: if the filed name is not rational, adobe is dumb for it.
 
-bool Document::removeField(IJS_EventContext* cc,
+bool Document::removeField(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
@@ -489,7 +485,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime);
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   std::vector<CPDFSDK_Annot::ObservedPtr> widgets;
@@ -532,7 +527,7 @@
 // comment:
 // note: if the fields names r not rational, aodbe is dumb for it.
 
-bool Document::resetForm(IJS_EventContext* cc,
+bool Document::resetForm(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
@@ -557,9 +552,6 @@
     return true;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
   switch (params[0].GetType()) {
     default:
       aName.Attach(params[0].ToV8Array(pRuntime));
@@ -586,7 +578,7 @@
   return true;
 }
 
-bool Document::saveAs(IJS_EventContext* cc,
+bool Document::saveAs(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
@@ -594,14 +586,14 @@
   return true;
 }
 
-bool Document::syncAnnotScan(IJS_EventContext* cc,
+bool Document::syncAnnotScan(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
   return true;
 }
 
-bool Document::submitForm(IJS_EventContext* cc,
+bool Document::submitForm(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
@@ -614,7 +606,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
+
   CJS_Array aFields;
   CFX_WideString strURL;
   bool bFDF = true;
@@ -683,18 +675,16 @@
   m_pFormFillEnv.Reset(pFormFillEnv);
 }
 
-bool Document::bookmarkRoot(IJS_EventContext* cc,
+bool Document::bookmarkRoot(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
   return true;
 }
 
-bool Document::mailDoc(IJS_EventContext* cc,
+bool Document::mailDoc(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   // TODO(tsepez): Check maximum number of allowed params.
   bool bUI = true;
   CFX_WideString cTo = L"";
@@ -746,13 +736,13 @@
   return true;
 }
 
-bool Document::author(IJS_EventContext* cc,
+bool Document::author(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "Author", sError);
+  return getPropertyInternal(pRuntime, vp, "Author", sError);
 }
 
-bool Document::info(IJS_EventContext* cc,
+bool Document::info(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -778,7 +768,6 @@
   CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
   CFX_WideString cwTrapped = pDictionary->GetUnicodeTextFor("Trapped");
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1);
   pRuntime->PutObjectProperty(pObj, L"Author", pRuntime->NewString(cwAuthor));
   pRuntime->PutObjectProperty(pObj, L"Title", pRuntime->NewString(cwTitle));
@@ -813,7 +802,7 @@
   return true;
 }
 
-bool Document::getPropertyInternal(IJS_EventContext* cc,
+bool Document::getPropertyInternal(CJS_Runtime* pRuntime,
                                    CJS_PropValue& vp,
                                    const CFX_ByteString& propName,
                                    CFX_WideString& sError) {
@@ -841,19 +830,19 @@
   return true;
 }
 
-bool Document::creationDate(IJS_EventContext* cc,
+bool Document::creationDate(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "CreationDate", sError);
+  return getPropertyInternal(pRuntime, vp, "CreationDate", sError);
 }
 
-bool Document::creator(IJS_EventContext* cc,
+bool Document::creator(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "Creator", sError);
+  return getPropertyInternal(pRuntime, vp, "Creator", sError);
 }
 
-bool Document::delay(IJS_EventContext* cc,
+bool Document::delay(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!m_pFormFillEnv) {
@@ -881,41 +870,41 @@
   return true;
 }
 
-bool Document::keywords(IJS_EventContext* cc,
+bool Document::keywords(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "Keywords", sError);
+  return getPropertyInternal(pRuntime, vp, "Keywords", sError);
 }
 
-bool Document::modDate(IJS_EventContext* cc,
+bool Document::modDate(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "ModDate", sError);
+  return getPropertyInternal(pRuntime, vp, "ModDate", sError);
 }
 
-bool Document::producer(IJS_EventContext* cc,
+bool Document::producer(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "Producer", sError);
+  return getPropertyInternal(pRuntime, vp, "Producer", sError);
 }
 
-bool Document::subject(IJS_EventContext* cc,
+bool Document::subject(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
-  return getPropertyInternal(cc, vp, "Subject", sError);
+  return getPropertyInternal(pRuntime, vp, "Subject", sError);
 }
 
-bool Document::title(IJS_EventContext* cc,
+bool Document::title(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  return getPropertyInternal(cc, vp, "Title", sError);
+  return getPropertyInternal(pRuntime, vp, "Title", sError);
 }
 
-bool Document::numPages(IJS_EventContext* cc,
+bool Document::numPages(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -930,7 +919,7 @@
   return true;
 }
 
-bool Document::external(IJS_EventContext* cc,
+bool Document::external(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   // In Chrome case, should always return true.
@@ -940,7 +929,7 @@
   return true;
 }
 
-bool Document::filesize(IJS_EventContext* cc,
+bool Document::filesize(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -951,19 +940,19 @@
   return true;
 }
 
-bool Document::mouseX(IJS_EventContext* cc,
+bool Document::mouseX(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Document::mouseY(IJS_EventContext* cc,
+bool Document::mouseY(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Document::URL(IJS_EventContext* cc,
+bool Document::URL(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -978,7 +967,7 @@
   return true;
 }
 
-bool Document::baseURL(IJS_EventContext* cc,
+bool Document::baseURL(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -989,7 +978,7 @@
   return true;
 }
 
-bool Document::calculate(IJS_EventContext* cc,
+bool Document::calculate(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   if (!m_pFormFillEnv) {
@@ -1007,7 +996,7 @@
   return true;
 }
 
-bool Document::documentFileName(IJS_EventContext* cc,
+bool Document::documentFileName(CJS_Runtime* pRuntime,
                                 CJS_PropValue& vp,
                                 CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1032,7 +1021,7 @@
   return true;
 }
 
-bool Document::path(IJS_EventContext* cc,
+bool Document::path(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1047,40 +1036,40 @@
   return true;
 }
 
-bool Document::pageWindowRect(IJS_EventContext* cc,
+bool Document::pageWindowRect(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
                               CFX_WideString& sError) {
   return true;
 }
 
-bool Document::layout(IJS_EventContext* cc,
+bool Document::layout(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Document::addLink(IJS_EventContext* cc,
+bool Document::addLink(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
   return true;
 }
 
-bool Document::closeDoc(IJS_EventContext* cc,
+bool Document::closeDoc(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
   return true;
 }
 
-bool Document::getPageBox(IJS_EventContext* cc,
+bool Document::getPageBox(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
   return true;
 }
 
-bool Document::getAnnot(IJS_EventContext* cc,
+bool Document::getAnnot(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -1092,7 +1081,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int nPageNo = params[0].ToInt(pRuntime);
   CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
   CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo);
@@ -1131,7 +1119,7 @@
   return true;
 }
 
-bool Document::getAnnots(IJS_EventContext* cc,
+bool Document::getAnnots(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
@@ -1139,8 +1127,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   // TODO(tonikitoo): Add support supported parameters as per
   // the PDF spec.
 
@@ -1180,29 +1166,29 @@
   return true;
 }
 
-bool Document::getAnnot3D(IJS_EventContext* cc,
+bool Document::getAnnot3D(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
-  vRet.SetNull(CJS_Runtime::FromEventContext(cc));
+  vRet.SetNull(pRuntime);
   return true;
 }
 
-bool Document::getAnnots3D(IJS_EventContext* cc,
+bool Document::getAnnots3D(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
   return true;
 }
 
-bool Document::getOCGs(IJS_EventContext* cc,
+bool Document::getOCGs(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
   return true;
 }
 
-bool Document::getLinks(IJS_EventContext* cc,
+bool Document::getLinks(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -1214,7 +1200,7 @@
           rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
 }
 
-bool Document::addIcon(IJS_EventContext* cc,
+bool Document::addIcon(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -1223,7 +1209,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
   if (params[1].GetType() != CJS_Value::VT_object) {
     sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
@@ -1247,22 +1232,19 @@
   return true;
 }
 
-bool Document::icons(IJS_EventContext* cc,
+bool Document::icons(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
   }
-
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   if (m_Icons.empty()) {
     vp.GetJSValue()->SetNull(pRuntime);
     return true;
   }
 
   CJS_Array Icons;
-
   int i = 0;
   for (const auto& pIconElement : m_Icons) {
     v8::Local<v8::Object> pObj =
@@ -1288,7 +1270,7 @@
   return true;
 }
 
-bool Document::getIcon(IJS_EventContext* cc,
+bool Document::getIcon(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -1300,9 +1282,7 @@
   if (m_Icons.empty())
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
-
   for (const auto& pIconElement : m_Icons) {
     if (pIconElement->IconName != swIconName)
       continue;
@@ -1331,7 +1311,7 @@
   return false;
 }
 
-bool Document::removeIcon(IJS_EventContext* cc,
+bool Document::removeIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
@@ -1339,7 +1319,7 @@
   return true;
 }
 
-bool Document::createDataObject(IJS_EventContext* cc,
+bool Document::createDataObject(CJS_Runtime* pRuntime,
                                 const std::vector<CJS_Value>& params,
                                 CJS_Value& vRet,
                                 CFX_WideString& sError) {
@@ -1347,13 +1327,13 @@
   return true;
 }
 
-bool Document::media(IJS_EventContext* cc,
+bool Document::media(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   return true;
 }
 
-bool Document::calculateNow(IJS_EventContext* cc,
+bool Document::calculateNow(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -1371,13 +1351,13 @@
   return true;
 }
 
-bool Document::Collab(IJS_EventContext* cc,
+bool Document::Collab(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Document::getPageNthWord(IJS_EventContext* cc,
+bool Document::getPageNthWord(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError) {
@@ -1389,7 +1369,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
 
   // TODO(tsepez): check maximum allowable params.
 
@@ -1436,7 +1415,7 @@
   return true;
 }
 
-bool Document::getPageNthWordQuads(IJS_EventContext* cc,
+bool Document::getPageNthWordQuads(CJS_Runtime* pRuntime,
                                    const std::vector<CJS_Value>& params,
                                    CJS_Value& vRet,
                                    CFX_WideString& sError) {
@@ -1451,7 +1430,7 @@
   return false;
 }
 
-bool Document::getPageNumWords(IJS_EventContext* cc,
+bool Document::getPageNumWords(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError) {
@@ -1463,7 +1442,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int nPageNo = params.size() > 0 ? params[0].ToInt(pRuntime) : 0;
   CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
   if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
@@ -1488,11 +1466,10 @@
   return true;
 }
 
-bool Document::getPrintParams(IJS_EventContext* cc,
+bool Document::getPrintParams(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   v8::Local<v8::Object> pRetObj =
       pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID);
 
@@ -1574,7 +1551,7 @@
   return swRet;
 }
 
-bool Document::zoom(IJS_EventContext* cc,
+bool Document::zoom(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   return true;
@@ -1590,13 +1567,13 @@
 (refW,  ReflowWidth)
 */
 
-bool Document::zoomType(IJS_EventContext* cc,
+bool Document::zoomType(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   return true;
 }
 
-bool Document::deletePages(IJS_EventContext* cc,
+bool Document::deletePages(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
@@ -1604,7 +1581,7 @@
   return true;
 }
 
-bool Document::extractPages(IJS_EventContext* cc,
+bool Document::extractPages(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -1612,7 +1589,7 @@
   return true;
 }
 
-bool Document::insertPages(IJS_EventContext* cc,
+bool Document::insertPages(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError) {
@@ -1620,7 +1597,7 @@
   return true;
 }
 
-bool Document::replacePages(IJS_EventContext* cc,
+bool Document::replacePages(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError) {
@@ -1628,7 +1605,7 @@
   return true;
 }
 
-bool Document::getURL(IJS_EventContext* cc,
+bool Document::getURL(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
@@ -1636,7 +1613,7 @@
   return true;
 }
 
-bool Document::gotoNamedDest(IJS_EventContext* cc,
+bool Document::gotoNamedDest(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
@@ -1648,7 +1625,6 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
   CFX_ByteString utf8Name = wideName.UTF8Encode();
   CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
diff --git a/fpdfsdk/javascript/Document.h b/fpdfsdk/javascript/Document.h
index 97a93c5..661307e 100644
--- a/fpdfsdk/javascript/Document.h
+++ b/fpdfsdk/javascript/Document.h
@@ -61,231 +61,241 @@
   explicit Document(CJS_Object* pJSObject);
   ~Document() override;
 
-  bool ADBE(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool author(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool baseURL(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool bookmarkRoot(IJS_EventContext* cc,
+  bool ADBE(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool author(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool baseURL(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool bookmarkRoot(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool calculate(IJS_EventContext* cc,
+  bool calculate(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool Collab(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool creationDate(IJS_EventContext* cc,
+  bool Collab(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool creationDate(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool creator(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool delay(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool dirty(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool documentFileName(IJS_EventContext* cc,
+  bool creator(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool dirty(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool documentFileName(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError);
-  bool external(IJS_EventContext* cc,
+  bool external(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool filesize(IJS_EventContext* cc,
+  bool filesize(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool icons(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool info(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool keywords(IJS_EventContext* cc,
+  bool icons(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool info(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool keywords(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool layout(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool media(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool modDate(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool mouseX(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool mouseY(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool numFields(IJS_EventContext* cc,
+  bool layout(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool modDate(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool mouseX(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool mouseY(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool numFields(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool numPages(IJS_EventContext* cc,
+  bool numPages(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool pageNum(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool pageWindowRect(IJS_EventContext* cc,
+  bool pageNum(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool pageWindowRect(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError);
-  bool path(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool producer(IJS_EventContext* cc,
+  bool path(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool producer(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool subject(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool title(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool zoom(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool zoomType(IJS_EventContext* cc,
+  bool subject(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool title(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool zoom(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool zoomType(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
 
-  bool addAnnot(IJS_EventContext* cc,
+  bool addAnnot(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool addField(IJS_EventContext* cc,
+  bool addField(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool addLink(IJS_EventContext* cc,
+  bool addLink(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool addIcon(IJS_EventContext* cc,
+  bool addIcon(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool calculateNow(IJS_EventContext* cc,
+  bool calculateNow(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool closeDoc(IJS_EventContext* cc,
+  bool closeDoc(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool createDataObject(IJS_EventContext* cc,
+  bool createDataObject(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool deletePages(IJS_EventContext* cc,
+  bool deletePages(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool exportAsText(IJS_EventContext* cc,
+  bool exportAsText(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool exportAsFDF(IJS_EventContext* cc,
+  bool exportAsFDF(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool exportAsXFDF(IJS_EventContext* cc,
+  bool exportAsXFDF(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool extractPages(IJS_EventContext* cc,
+  bool extractPages(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool getAnnot(IJS_EventContext* cc,
+  bool getAnnot(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool getAnnots(IJS_EventContext* cc,
+  bool getAnnots(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool getAnnot3D(IJS_EventContext* cc,
+  bool getAnnot3D(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool getAnnots3D(IJS_EventContext* cc,
+  bool getAnnots3D(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool getField(IJS_EventContext* cc,
+  bool getField(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool getIcon(IJS_EventContext* cc,
+  bool getIcon(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool getLinks(IJS_EventContext* cc,
+  bool getLinks(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool getNthFieldName(IJS_EventContext* cc,
+  bool getNthFieldName(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError);
-  bool getOCGs(IJS_EventContext* cc,
+  bool getOCGs(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool getPageBox(IJS_EventContext* cc,
+  bool getPageBox(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool getPageNthWord(IJS_EventContext* cc,
+  bool getPageNthWord(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError);
-  bool getPageNthWordQuads(IJS_EventContext* cc,
+  bool getPageNthWordQuads(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError);
-  bool getPageNumWords(IJS_EventContext* cc,
+  bool getPageNumWords(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError);
-  bool getPrintParams(IJS_EventContext* cc,
+  bool getPrintParams(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError);
-  bool getURL(IJS_EventContext* cc,
+  bool getURL(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool gotoNamedDest(IJS_EventContext* cc,
+  bool gotoNamedDest(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool importAnFDF(IJS_EventContext* cc,
+  bool importAnFDF(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool importAnXFDF(IJS_EventContext* cc,
+  bool importAnXFDF(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool importTextData(IJS_EventContext* cc,
+  bool importTextData(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError);
-  bool insertPages(IJS_EventContext* cc,
+  bool insertPages(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool mailForm(IJS_EventContext* cc,
+  bool mailForm(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool print(IJS_EventContext* cc,
+  bool print(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
              CFX_WideString& sError);
-  bool removeField(IJS_EventContext* cc,
+  bool removeField(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool replacePages(IJS_EventContext* cc,
+  bool replacePages(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool resetForm(IJS_EventContext* cc,
+  bool resetForm(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool saveAs(IJS_EventContext* cc,
+  bool saveAs(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool submitForm(IJS_EventContext* cc,
+  bool submitForm(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool syncAnnotScan(IJS_EventContext* cc,
+  bool syncAnnotScan(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool mailDoc(IJS_EventContext* cc,
+  bool mailDoc(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool removeIcon(IJS_EventContext* cc,
+  bool removeIcon(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool URL(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
+  bool URL(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
 
   void SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
@@ -300,7 +310,7 @@
   int CountWords(CPDF_TextObject* pTextObj);
   CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
 
-  bool getPropertyInternal(IJS_EventContext* cc,
+  bool getPropertyInternal(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            const CFX_ByteString& propName,
                            CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index 3eb3f8e..263e3a7 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -375,7 +375,7 @@
   return pFormField->GetControl(m_nFormControlIndex);
 }
 
-bool Field::alignment(IJS_EventContext* cc,
+bool Field::alignment(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -431,7 +431,7 @@
   // Not supported.
 }
 
-bool Field::borderStyle(IJS_EventContext* cc,
+bool Field::borderStyle(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -540,7 +540,7 @@
   }
 }
 
-bool Field::buttonAlignX(IJS_EventContext* cc,
+bool Field::buttonAlignX(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -589,7 +589,7 @@
   // Not supported.
 }
 
-bool Field::buttonAlignY(IJS_EventContext* cc,
+bool Field::buttonAlignY(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -638,7 +638,7 @@
   // Not supported.
 }
 
-bool Field::buttonFitBounds(IJS_EventContext* cc,
+bool Field::buttonFitBounds(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -682,7 +682,7 @@
   // Not supported.
 }
 
-bool Field::buttonPosition(IJS_EventContext* cc,
+bool Field::buttonPosition(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -725,7 +725,7 @@
   // Not supported.
 }
 
-bool Field::buttonScaleHow(IJS_EventContext* cc,
+bool Field::buttonScaleHow(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -773,7 +773,7 @@
   // Not supported.
 }
 
-bool Field::buttonScaleWhen(IJS_EventContext* cc,
+bool Field::buttonScaleWhen(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -832,7 +832,7 @@
   // Not supported.
 }
 
-bool Field::calcOrderIndex(IJS_EventContext* cc,
+bool Field::calcOrderIndex(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -876,7 +876,7 @@
   // Not supported.
 }
 
-bool Field::charLimit(IJS_EventContext* cc,
+bool Field::charLimit(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -915,7 +915,7 @@
   // Not supported.
 }
 
-bool Field::comb(IJS_EventContext* cc,
+bool Field::comb(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -958,7 +958,7 @@
   // Not supported.
 }
 
-bool Field::commitOnSelChange(IJS_EventContext* cc,
+bool Field::commitOnSelChange(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
                               CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1003,11 +1003,9 @@
   // Not supported.
 }
 
-bool Field::currentValueIndices(IJS_EventContext* cc,
+bool Field::currentValueIndices(CJS_Runtime* pRuntime,
                                 CJS_PropValue& vp,
                                 CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1089,7 +1087,7 @@
   }
 }
 
-bool Field::defaultStyle(IJS_EventContext* cc,
+bool Field::defaultStyle(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   return false;
@@ -1101,7 +1099,7 @@
   // Not supported.
 }
 
-bool Field::defaultValue(IJS_EventContext* cc,
+bool Field::defaultValue(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1142,7 +1140,7 @@
   // Not supported.
 }
 
-bool Field::doNotScroll(IJS_EventContext* cc,
+bool Field::doNotScroll(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1185,7 +1183,7 @@
   // Not supported.
 }
 
-bool Field::doNotSpellCheck(IJS_EventContext* cc,
+bool Field::doNotSpellCheck(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1225,7 +1223,7 @@
   }
 }
 
-bool Field::delay(IJS_EventContext* cc,
+bool Field::delay(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
   if (!vp.IsSetting()) {
@@ -1241,7 +1239,7 @@
   return true;
 }
 
-bool Field::display(IJS_EventContext* cc,
+bool Field::display(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1323,7 +1321,7 @@
   }
 }
 
-bool Field::doc(IJS_EventContext* cc,
+bool Field::doc(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError) {
   if (!vp.IsGetting())
@@ -1333,7 +1331,7 @@
   return true;
 }
 
-bool Field::editable(IJS_EventContext* cc,
+bool Field::editable(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1356,7 +1354,7 @@
   return true;
 }
 
-bool Field::exportValues(IJS_EventContext* cc,
+bool Field::exportValues(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
@@ -1371,7 +1369,6 @@
   if (vp.IsSetting())
     return m_bCanSet && vp.GetJSValue()->IsArrayObject();
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array ExportValusArray;
   if (m_nFormControlIndex < 0) {
     for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
@@ -1397,7 +1394,7 @@
   return true;
 }
 
-bool Field::fileSelect(IJS_EventContext* cc,
+bool Field::fileSelect(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
@@ -1420,10 +1417,9 @@
   return true;
 }
 
-bool Field::fillColor(IJS_EventContext* cc,
+bool Field::fillColor(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array crArray;
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
@@ -1489,7 +1485,7 @@
   // Not supported.
 }
 
-bool Field::hidden(IJS_EventContext* cc,
+bool Field::hidden(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1535,7 +1531,7 @@
   SetDisplay(pFormFillEnv, swFieldName, nControlIndex, display);
 }
 
-bool Field::highlight(IJS_EventContext* cc,
+bool Field::highlight(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1594,7 +1590,7 @@
   // Not supported.
 }
 
-bool Field::lineWidth(IJS_EventContext* cc,
+bool Field::lineWidth(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -1673,7 +1669,7 @@
   }
 }
 
-bool Field::multiline(IJS_EventContext* cc,
+bool Field::multiline(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1716,7 +1712,7 @@
   // Not supported.
 }
 
-bool Field::multipleSelection(IJS_EventContext* cc,
+bool Field::multipleSelection(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
                               CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1753,7 +1749,7 @@
   // Not supported.
 }
 
-bool Field::name(IJS_EventContext* cc,
+bool Field::name(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (!vp.IsGetting())
@@ -1767,7 +1763,7 @@
   return true;
 }
 
-bool Field::numItems(IJS_EventContext* cc,
+bool Field::numItems(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!vp.IsGetting())
@@ -1787,7 +1783,7 @@
   return true;
 }
 
-bool Field::page(IJS_EventContext* cc,
+bool Field::page(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (!vp.IsGetting()) {
@@ -1810,7 +1806,6 @@
     return true;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array PageArray;
   int i = 0;
   for (const auto& pObserved : widgets) {
@@ -1833,7 +1828,7 @@
   return true;
 }
 
-bool Field::password(IJS_EventContext* cc,
+bool Field::password(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -1872,7 +1867,7 @@
   // Not supported.
 }
 
-bool Field::print(IJS_EventContext* cc,
+bool Field::print(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
@@ -1943,7 +1938,7 @@
   return true;
 }
 
-bool Field::radiosInUnison(IJS_EventContext* cc,
+bool Field::radiosInUnison(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
@@ -1966,7 +1961,7 @@
   return true;
 }
 
-bool Field::readonly(IJS_EventContext* cc,
+bool Field::readonly(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
@@ -1985,10 +1980,9 @@
   return true;
 }
 
-bool Field::rect(IJS_EventContext* cc,
+bool Field::rect(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Value Upper_Leftx(pRuntime);
   CJS_Value Upper_Lefty(pRuntime);
   CJS_Value Lower_Rightx(pRuntime);
@@ -2106,7 +2100,7 @@
   }
 }
 
-bool Field::required(IJS_EventContext* cc,
+bool Field::required(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
@@ -2129,7 +2123,7 @@
   return true;
 }
 
-bool Field::richText(IJS_EventContext* cc,
+bool Field::richText(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2158,13 +2152,13 @@
   return true;
 }
 
-bool Field::richValue(IJS_EventContext* cc,
+bool Field::richValue(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Field::rotation(IJS_EventContext* cc,
+bool Field::rotation(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2203,10 +2197,9 @@
   // Not supported.
 }
 
-bool Field::strokeColor(IJS_EventContext* cc,
+bool Field::strokeColor(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array crArray;
 
   if (vp.IsSetting()) {
@@ -2270,7 +2263,7 @@
   // Not supported.
 }
 
-bool Field::style(IJS_EventContext* cc,
+bool Field::style(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2338,16 +2331,15 @@
   // Not supported.
 }
 
-bool Field::submitName(IJS_EventContext* cc,
+bool Field::submitName(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   return true;
 }
 
-bool Field::textColor(IJS_EventContext* cc,
+bool Field::textColor(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array crArray;
 
   if (vp.IsSetting()) {
@@ -2407,7 +2399,7 @@
   // Not supported.
 }
 
-bool Field::textFont(IJS_EventContext* cc,
+bool Field::textFont(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2459,7 +2451,7 @@
   // Not supported.
 }
 
-bool Field::textSize(IJS_EventContext* cc,
+bool Field::textSize(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2504,7 +2496,7 @@
   // Not supported.
 }
 
-bool Field::type(IJS_EventContext* cc,
+bool Field::type(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (!vp.IsGetting())
@@ -2547,7 +2539,7 @@
   return true;
 }
 
-bool Field::userName(IJS_EventContext* cc,
+bool Field::userName(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   ASSERT(m_pFormFillEnv);
@@ -2582,11 +2574,9 @@
   // Not supported.
 }
 
-bool Field::value(IJS_EventContext* cc,
+bool Field::value(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -2723,7 +2713,7 @@
   }
 }
 
-bool Field::valueAsString(IJS_EventContext* cc,
+bool Field::valueAsString(CJS_Runtime* pRuntime,
                           CJS_PropValue& vp,
                           CFX_WideString& sError) {
   if (!vp.IsGetting())
@@ -2765,7 +2755,7 @@
   return true;
 }
 
-bool Field::browseForFileToSubmit(IJS_EventContext* cc,
+bool Field::browseForFileToSubmit(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
                                   CFX_WideString& sError) {
@@ -2786,12 +2776,10 @@
   return false;
 }
 
-bool Field::buttonGetCaption(IJS_EventContext* cc,
+bool Field::buttonGetCaption(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   int nface = 0;
   int iSize = params.size();
   if (iSize >= 1)
@@ -2821,13 +2809,10 @@
   return true;
 }
 
-bool Field::buttonGetIcon(IJS_EventContext* cc,
+bool Field::buttonGetIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
   int nface = 0;
   int iSize = params.size();
   if (iSize >= 1)
@@ -2867,28 +2852,28 @@
   return true;
 }
 
-bool Field::buttonImportIcon(IJS_EventContext* cc,
+bool Field::buttonImportIcon(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
   return true;
 }
 
-bool Field::buttonSetCaption(IJS_EventContext* cc,
+bool Field::buttonSetCaption(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
   return false;
 }
 
-bool Field::buttonSetIcon(IJS_EventContext* cc,
+bool Field::buttonSetIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
   return false;
 }
 
-bool Field::checkThisBox(IJS_EventContext* cc,
+bool Field::checkThisBox(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
@@ -2899,9 +2884,7 @@
   if (!m_bCanSet)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int nWidget = params[0].ToInt(pRuntime);
-
   bool bCheckit = true;
   if (iSize >= 2)
     bCheckit = params[1].ToBool(pRuntime);
@@ -2927,14 +2910,14 @@
   return true;
 }
 
-bool Field::clearItems(IJS_EventContext* cc,
+bool Field::clearItems(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
   return true;
 }
 
-bool Field::defaultIsChecked(IJS_EventContext* cc,
+bool Field::defaultIsChecked(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
@@ -2945,9 +2928,7 @@
   if (iSize < 1)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int nWidget = params[0].ToInt(pRuntime);
-
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -2963,14 +2944,14 @@
   return true;
 }
 
-bool Field::deleteItemAt(IJS_EventContext* cc,
+bool Field::deleteItemAt(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
   return true;
 }
 
-bool Field::getArray(IJS_EventContext* cc,
+bool Field::getArray(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
@@ -2989,8 +2970,6 @@
       [](const std::unique_ptr<CFX_WideString>& p1,
          const std::unique_ptr<CFX_WideString>& p2) { return *p1 < *p2; });
 
-  CJS_EventContext* pContext = (CJS_EventContext*)cc;
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
   CJS_Array FormFieldArray;
 
   int j = 0;
@@ -3010,12 +2989,10 @@
   return true;
 }
 
-bool Field::getItemAt(IJS_EventContext* cc,
+bool Field::getItemAt(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   int iSize = params.size();
   int nIdx = -1;
   if (iSize >= 1)
@@ -3050,26 +3027,24 @@
   return true;
 }
 
-bool Field::getLock(IJS_EventContext* cc,
+bool Field::getLock(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
   return false;
 }
 
-bool Field::insertItemAt(IJS_EventContext* cc,
+bool Field::insertItemAt(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
   return true;
 }
 
-bool Field::isBoxChecked(IJS_EventContext* cc,
+bool Field::isBoxChecked(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = params[0].ToInt(pRuntime);
@@ -3090,12 +3065,10 @@
   return true;
 }
 
-bool Field::isDefaultChecked(IJS_EventContext* cc,
+bool Field::isDefaultChecked(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = params[0].ToInt(pRuntime);
@@ -3115,14 +3088,14 @@
   return true;
 }
 
-bool Field::setAction(IJS_EventContext* cc,
+bool Field::setAction(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool Field::setFocus(IJS_EventContext* cc,
+bool Field::setFocus(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
@@ -3167,63 +3140,63 @@
   return true;
 }
 
-bool Field::setItems(IJS_EventContext* cc,
+bool Field::setItems(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
   return true;
 }
 
-bool Field::setLock(IJS_EventContext* cc,
+bool Field::setLock(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureGetModifications(IJS_EventContext* cc,
+bool Field::signatureGetModifications(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureGetSeedValue(IJS_EventContext* cc,
+bool Field::signatureGetSeedValue(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
                                   CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureInfo(IJS_EventContext* cc,
+bool Field::signatureInfo(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureSetSeedValue(IJS_EventContext* cc,
+bool Field::signatureSetSeedValue(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
                                   CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureSign(IJS_EventContext* cc,
+bool Field::signatureSign(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
                           CFX_WideString& sError) {
   return false;
 }
 
-bool Field::signatureValidate(IJS_EventContext* cc,
+bool Field::signatureValidate(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError) {
   return false;
 }
 
-bool Field::source(IJS_EventContext* cc,
+bool Field::source(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (vp.IsGetting()) {
diff --git a/fpdfsdk/javascript/Field.h b/fpdfsdk/javascript/Field.h
index 9087f82..462c127 100644
--- a/fpdfsdk/javascript/Field.h
+++ b/fpdfsdk/javascript/Field.h
@@ -77,238 +77,240 @@
   explicit Field(CJS_Object* pJSObject);
   ~Field() override;
 
-  bool alignment(IJS_EventContext* cc,
+  bool alignment(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool borderStyle(IJS_EventContext* cc,
+  bool borderStyle(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError);
-  bool buttonAlignX(IJS_EventContext* cc,
+  bool buttonAlignX(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool buttonAlignY(IJS_EventContext* cc,
+  bool buttonAlignY(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool buttonFitBounds(IJS_EventContext* cc,
+  bool buttonFitBounds(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError);
-  bool buttonPosition(IJS_EventContext* cc,
+  bool buttonPosition(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError);
-  bool buttonScaleHow(IJS_EventContext* cc,
+  bool buttonScaleHow(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError);
-  bool buttonScaleWhen(IJS_EventContext* cc,
+  bool buttonScaleWhen(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError);
-  bool calcOrderIndex(IJS_EventContext* cc,
+  bool calcOrderIndex(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError);
-  bool charLimit(IJS_EventContext* cc,
+  bool charLimit(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool comb(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool commitOnSelChange(IJS_EventContext* cc,
+  bool comb(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool commitOnSelChange(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError);
-  bool currentValueIndices(IJS_EventContext* cc,
+  bool currentValueIndices(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError);
-  bool defaultStyle(IJS_EventContext* cc,
+  bool defaultStyle(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool defaultValue(IJS_EventContext* cc,
+  bool defaultValue(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool doNotScroll(IJS_EventContext* cc,
+  bool doNotScroll(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError);
-  bool doNotSpellCheck(IJS_EventContext* cc,
+  bool doNotSpellCheck(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError);
-  bool delay(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool display(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool doc(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool editable(IJS_EventContext* cc,
+  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool display(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool doc(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool editable(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool exportValues(IJS_EventContext* cc,
+  bool exportValues(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool fileSelect(IJS_EventContext* cc,
+  bool fileSelect(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool fillColor(IJS_EventContext* cc,
+  bool fillColor(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool hidden(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool highlight(IJS_EventContext* cc,
+  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool highlight(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool lineWidth(IJS_EventContext* cc,
+  bool lineWidth(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool multiline(IJS_EventContext* cc,
+  bool multiline(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool multipleSelection(IJS_EventContext* cc,
+  bool multipleSelection(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError);
-  bool name(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool numItems(IJS_EventContext* cc,
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool numItems(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool page(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool password(IJS_EventContext* cc,
+  bool page(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool password(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool print(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool radiosInUnison(IJS_EventContext* cc,
+  bool print(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool radiosInUnison(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError);
-  bool readonly(IJS_EventContext* cc,
+  bool readonly(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool rect(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool required(IJS_EventContext* cc,
+  bool rect(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool required(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool richText(IJS_EventContext* cc,
+  bool richText(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool richValue(IJS_EventContext* cc,
+  bool richValue(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool rotation(IJS_EventContext* cc,
+  bool rotation(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool strokeColor(IJS_EventContext* cc,
+  bool strokeColor(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError);
-  bool style(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool submitName(IJS_EventContext* cc,
+  bool style(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool submitName(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool textColor(IJS_EventContext* cc,
+  bool textColor(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool textFont(IJS_EventContext* cc,
+  bool textFont(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool textSize(IJS_EventContext* cc,
+  bool textSize(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool type(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool userName(IJS_EventContext* cc,
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool userName(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool value(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool valueAsString(IJS_EventContext* cc,
+  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool valueAsString(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError);
-  bool source(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
+  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
 
-  bool browseForFileToSubmit(IJS_EventContext* cc,
+  bool browseForFileToSubmit(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError);
-  bool buttonGetCaption(IJS_EventContext* cc,
+  bool buttonGetCaption(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool buttonGetIcon(IJS_EventContext* cc,
+  bool buttonGetIcon(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool buttonImportIcon(IJS_EventContext* cc,
+  bool buttonImportIcon(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool buttonSetCaption(IJS_EventContext* cc,
+  bool buttonSetCaption(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool buttonSetIcon(IJS_EventContext* cc,
+  bool buttonSetIcon(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool checkThisBox(IJS_EventContext* cc,
+  bool checkThisBox(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool clearItems(IJS_EventContext* cc,
+  bool clearItems(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool defaultIsChecked(IJS_EventContext* cc,
+  bool defaultIsChecked(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool deleteItemAt(IJS_EventContext* cc,
+  bool deleteItemAt(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool getArray(IJS_EventContext* cc,
+  bool getArray(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool getItemAt(IJS_EventContext* cc,
+  bool getItemAt(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool getLock(IJS_EventContext* cc,
+  bool getLock(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool insertItemAt(IJS_EventContext* cc,
+  bool insertItemAt(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool isBoxChecked(IJS_EventContext* cc,
+  bool isBoxChecked(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool isDefaultChecked(IJS_EventContext* cc,
+  bool isDefaultChecked(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError);
-  bool setAction(IJS_EventContext* cc,
+  bool setAction(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool setFocus(IJS_EventContext* cc,
+  bool setFocus(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool setItems(IJS_EventContext* cc,
+  bool setItems(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool setLock(IJS_EventContext* cc,
+  bool setLock(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool signatureGetModifications(IJS_EventContext* cc,
+  bool signatureGetModifications(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError);
-  bool signatureGetSeedValue(IJS_EventContext* cc,
+  bool signatureGetSeedValue(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError);
-  bool signatureInfo(IJS_EventContext* cc,
+  bool signatureInfo(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool signatureSetSeedValue(IJS_EventContext* cc,
+  bool signatureSetSeedValue(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
                              CFX_WideString& sError);
-  bool signatureSign(IJS_EventContext* cc,
+  bool signatureSign(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool signatureValidate(IJS_EventContext* cc,
+  bool signatureValidate(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
                          CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/Icon.cpp b/fpdfsdk/javascript/Icon.cpp
index cfce52f..778c1ed 100644
--- a/fpdfsdk/javascript/Icon.cpp
+++ b/fpdfsdk/javascript/Icon.cpp
@@ -44,7 +44,7 @@
   return m_swIconName;
 }
 
-bool Icon::name(IJS_EventContext* cc,
+bool Icon::name(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError) {
   if (!vp.IsGetting())
diff --git a/fpdfsdk/javascript/Icon.h b/fpdfsdk/javascript/Icon.h
index 76bf8e4..5a51f20 100644
--- a/fpdfsdk/javascript/Icon.h
+++ b/fpdfsdk/javascript/Icon.h
@@ -16,7 +16,7 @@
   explicit Icon(CJS_Object* pJSObject);
   ~Icon() override;
 
-  bool name(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
   void SetStream(CPDF_Stream* pIconStream);
   CPDF_Stream* GetStream();
   void SetIconName(CFX_WideString name);
diff --git a/fpdfsdk/javascript/JS_Define.h b/fpdfsdk/javascript/JS_Define.h
index 957f683..718442c 100644
--- a/fpdfsdk/javascript/JS_Define.h
+++ b/fpdfsdk/javascript/JS_Define.h
@@ -70,8 +70,7 @@
   }                            \
   ;  // NOLINT
 
-template <class C,
-          bool (C::*M)(IJS_EventContext*, CJS_PropValue&, CFX_WideString&)>
+template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, CFX_WideString&)>
 void JSPropGetter(const char* prop_name_string,
                   const char* class_name_string,
                   v8::Local<v8::String> property,
@@ -86,7 +85,7 @@
   CFX_WideString sError;
   CJS_PropValue value(pRuntime);
   value.StartGetting();
-  if (!(pObj->*M)(pRuntime->GetCurrentEventContext(), value, sError)) {
+  if (!(pObj->*M)(pRuntime, value, sError)) {
     pRuntime->Error(
         JSFormatErrorString(class_name_string, prop_name_string, sError));
     return;
@@ -94,8 +93,7 @@
   info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime));
 }
 
-template <class C,
-          bool (C::*M)(IJS_EventContext*, CJS_PropValue&, CFX_WideString&)>
+template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, CFX_WideString&)>
 void JSPropSetter(const char* prop_name_string,
                   const char* class_name_string,
                   v8::Local<v8::String> property,
@@ -111,7 +109,7 @@
   CFX_WideString sError;
   CJS_PropValue propValue(pRuntime, CJS_Value(pRuntime, value));
   propValue.StartSetting();
-  if (!(pObj->*M)(pRuntime->GetCurrentEventContext(), propValue, sError)) {
+  if (!(pObj->*M)(pRuntime, propValue, sError)) {
     pRuntime->Error(
         JSFormatErrorString(class_name_string, prop_name_string, sError));
   }
@@ -132,7 +130,7 @@
   }
 
 template <class C,
-          bool (C::*M)(IJS_EventContext*,
+          bool (C::*M)(CJS_Runtime*,
                        const std::vector<CJS_Value>&,
                        CJS_Value&,
                        CFX_WideString&)>
@@ -152,8 +150,7 @@
   C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
   CFX_WideString sError;
   CJS_Value valueRes(pRuntime);
-  if (!(pObj->*M)(pRuntime->GetCurrentEventContext(), parameters, valueRes,
-                  sError)) {
+  if (!(pObj->*M)(pRuntime, parameters, valueRes, sError)) {
     pRuntime->Error(
         JSFormatErrorString(class_name_string, method_name_string, sError));
     return;
@@ -377,8 +374,7 @@
   CFX_WideString sError;
   CJS_PropValue value(pRuntime);
   value.StartGetting();
-  if (!pObj->DoProperty(pRuntime->GetCurrentEventContext(), propname.c_str(),
-                        value, sError)) {
+  if (!pObj->DoProperty(pRuntime, propname.c_str(), value, sError)) {
     pRuntime->Error(JSFormatErrorString(class_name, "GetProperty", sError));
     return;
   }
@@ -403,8 +399,7 @@
   CFX_WideString sError;
   CJS_PropValue PropValue(pRuntime, CJS_Value(pRuntime, value));
   PropValue.StartSetting();
-  if (!pObj->DoProperty(pRuntime->GetCurrentEventContext(), propname.c_str(),
-                        PropValue, sError)) {
+  if (!pObj->DoProperty(pRuntime, propname.c_str(), PropValue, sError)) {
     pRuntime->Error(JSFormatErrorString(class_name, "PutProperty", sError));
   }
 }
@@ -424,15 +419,14 @@
   CFX_WideString propname = CFX_WideString::FromUTF8(
       CFX_ByteStringC(*utf8_value, utf8_value.length()));
   CFX_WideString sError;
-  if (!pObj->DelProperty(pRuntime->GetCurrentEventContext(), propname.c_str(),
-                         sError)) {
+  if (!pObj->DelProperty(pRuntime, propname.c_str(), sError)) {
     CFX_ByteString cbName;
     cbName.Format("%s.%s", class_name, "DelProperty");
     // Probably a missing call to JSFX_Error().
   }
 }
 
-template <bool (*F)(IJS_EventContext*,
+template <bool (*F)(CJS_Runtime*,
                     const std::vector<CJS_Value>&,
                     CJS_Value&,
                     CFX_WideString&)>
@@ -448,7 +442,7 @@
   }
   CJS_Value valueRes(pRuntime);
   CFX_WideString sError;
-  if (!(*F)(pRuntime->GetCurrentEventContext(), parameters, valueRes, sError)) {
+  if (!(*F)(pRuntime, parameters, valueRes, sError)) {
     pRuntime->Error(JSFormatErrorString(func_name_string, nullptr, sError));
     return;
   }
diff --git a/fpdfsdk/javascript/JS_Runtime_Stub.cpp b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
index 12edc1b..dcd8ceb 100644
--- a/fpdfsdk/javascript/JS_Runtime_Stub.cpp
+++ b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
@@ -127,12 +127,9 @@
   IJS_EventContext* NewEventContext() override {
     if (!m_pContext)
       m_pContext = pdfium::MakeUnique<CJS_EventContextStub>();
-    return GetCurrentEventContext();
-  }
-
-  IJS_EventContext* GetCurrentEventContext() override {
     return m_pContext.get();
   }
+
   void ReleaseEventContext(IJS_EventContext* pContext) override {}
 
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override {
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index 32484d4..7eee979 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -750,7 +750,7 @@
 
 // function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency,
 // bCurrencyPrepend)
-bool CJS_PublicMethods::AFNumber_Format(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFNumber_Format(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
                                         CFX_WideString& sError) {
@@ -760,9 +760,8 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
+  CJS_EventHandler* pEvent =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
@@ -855,7 +854,7 @@
         vProp.StartGetting();
         vProp << arColor;
         vProp.StartSetting();
-        fTarget->textColor(cc, vProp, sError);  // red
+        fTarget->textColor(pRuntime, vProp, sError);  // red
       }
     }
   } else {
@@ -872,7 +871,7 @@
 
         CJS_PropValue vProp(pRuntime);
         vProp.StartGetting();
-        fTarget->textColor(cc, vProp, sError);
+        fTarget->textColor(pRuntime, vProp, sError);
 
         CJS_Array aProp;
         vProp.GetJSValue()->ConvertToArray(pRuntime, aProp);
@@ -887,7 +886,7 @@
           vProp2.StartGetting();
           vProp2 << arColor;
           vProp2.StartSetting();
-          fTarget->textColor(cc, vProp2, sError);
+          fTarget->textColor(pRuntime, vProp2, sError);
         }
       }
     }
@@ -898,16 +897,15 @@
 
 // function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency,
 // bCurrencyPrepend)
-bool CJS_PublicMethods::AFNumber_Keystroke(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFNumber_Keystroke(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
                                            CFX_WideString& sError) {
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
   if (params.size() < 2)
     return false;
 
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
+  CJS_EventHandler* pEvent = pContext->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
@@ -945,7 +943,6 @@
     }
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iSepStyle = params[1].ToInt(pRuntime);
   if (iSepStyle < 0 || iSepStyle > 3)
     iSepStyle = 0;
@@ -999,19 +996,18 @@
 }
 
 // function AFPercent_Format(nDec, sepStyle)
-bool CJS_PublicMethods::AFPercent_Format(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFPercent_Format(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
                                          CFX_WideString& sError) {
 #if _FX_OS_ != _FX_ANDROID_
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
+
+  CJS_EventHandler* pEvent =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
@@ -1092,26 +1088,25 @@
 }
 // AFPercent_Keystroke(nDec, sepStyle)
 bool CJS_PublicMethods::AFPercent_Keystroke(
-    IJS_EventContext* cc,
+    CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
     CFX_WideString& sError) {
-  return AFNumber_Keystroke(cc, params, vRet, sError);
+  return AFNumber_Keystroke(pRuntime, params, vRet, sError);
 }
 
 // function AFDate_FormatEx(cFormat)
-bool CJS_PublicMethods::AFDate_FormatEx(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFDate_FormatEx(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
                                         CFX_WideString& sError) {
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
+
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
+  CJS_EventHandler* pEvent = pContext->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
@@ -1200,22 +1195,21 @@
 }
 
 // AFDate_KeystrokeEx(cFormat)
-bool CJS_PublicMethods::AFDate_KeystrokeEx(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFDate_KeystrokeEx(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
                                            CFX_WideString& sError) {
-  CJS_EventContext* pContext = (CJS_EventContext*)cc;
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
   if (params.size() != 1) {
     sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
     return false;
   }
 
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
+  CJS_EventHandler* pEvent = pContext->GetEventHandler();
   if (pEvent->WillCommit()) {
     if (!pEvent->m_pValue)
       return false;
+
     CFX_WideString strValue = pEvent->Value();
     if (strValue.IsEmpty())
       return true;
@@ -1235,7 +1229,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFDate_Format(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFDate_Format(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -1244,7 +1238,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iIndex = params[0].ToInt(pRuntime);
   const FX_WCHAR* cFormats[] = {L"m/d",
                                 L"m/d/yy",
@@ -1265,13 +1258,12 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(
-      CJS_Value(CJS_Runtime::FromEventContext(cc), cFormats[iIndex]));
-  return AFDate_FormatEx(cc, newParams, vRet, sError);
+  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  return AFDate_FormatEx(pRuntime, newParams, vRet, sError);
 }
 
 // AFDate_KeystrokeEx(cFormat)
-bool CJS_PublicMethods::AFDate_Keystroke(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFDate_Keystroke(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
                                          CFX_WideString& sError) {
@@ -1280,7 +1272,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iIndex = params[0].ToInt(pRuntime);
   const FX_WCHAR* cFormats[] = {L"m/d",
                                 L"m/d/yy",
@@ -1301,13 +1292,12 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(
-      CJS_Value(CJS_Runtime::FromEventContext(cc), cFormats[iIndex]));
-  return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
+  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  return AFDate_KeystrokeEx(pRuntime, newParams, vRet, sError);
 }
 
 // function AFTime_Format(ptf)
-bool CJS_PublicMethods::AFTime_Format(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFTime_Format(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -1316,7 +1306,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iIndex = params[0].ToInt(pRuntime);
   const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
                                 L"h:MM:ss tt"};
@@ -1325,12 +1314,11 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(
-      CJS_Value(CJS_Runtime::FromEventContext(cc), cFormats[iIndex]));
-  return AFDate_FormatEx(cc, newParams, vRet, sError);
+  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  return AFDate_FormatEx(pRuntime, newParams, vRet, sError);
 }
 
-bool CJS_PublicMethods::AFTime_Keystroke(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFTime_Keystroke(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
                                          CFX_WideString& sError) {
@@ -1339,7 +1327,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iIndex = params[0].ToInt(pRuntime);
   const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
                                 L"h:MM:ss tt"};
@@ -1348,27 +1335,26 @@
     iIndex = 0;
 
   std::vector<CJS_Value> newParams;
-  newParams.push_back(
-      CJS_Value(CJS_Runtime::FromEventContext(cc), cFormats[iIndex]));
-  return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
+  newParams.push_back(CJS_Value(pRuntime, cFormats[iIndex]));
+  return AFDate_KeystrokeEx(pRuntime, newParams, vRet, sError);
 }
 
-bool CJS_PublicMethods::AFTime_FormatEx(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFTime_FormatEx(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
                                         CFX_WideString& sError) {
-  return AFDate_FormatEx(cc, params, vRet, sError);
+  return AFDate_FormatEx(pRuntime, params, vRet, sError);
 }
 
-bool CJS_PublicMethods::AFTime_KeystrokeEx(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFTime_KeystrokeEx(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
                                            CFX_WideString& sError) {
-  return AFDate_KeystrokeEx(cc, params, vRet, sError);
+  return AFDate_KeystrokeEx(pRuntime, params, vRet, sError);
 }
 
 // function AFSpecial_Format(psf)
-bool CJS_PublicMethods::AFSpecial_Format(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFSpecial_Format(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
                                          CFX_WideString& sError) {
@@ -1377,12 +1363,11 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
+  CJS_EventHandler* pEvent =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString wsSource = pEvent->Value();
   CFX_WideString wsFormat;
   switch (params[0].ToInt(pRuntime)) {
@@ -1409,19 +1394,17 @@
 
 // function AFSpecial_KeystrokeEx(mask)
 bool CJS_PublicMethods::AFSpecial_KeystrokeEx(
-    IJS_EventContext* cc,
+    CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
     CFX_WideString& sError) {
-  CJS_EventContext* pContext = (CJS_EventContext*)cc;
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
-
   if (params.size() < 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
+  CJS_EventHandler* pEvent = pContext->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
@@ -1494,7 +1477,7 @@
 
 // function AFSpecial_Keystroke(psf)
 bool CJS_PublicMethods::AFSpecial_Keystroke(
-    IJS_EventContext* cc,
+    CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
     CFX_WideString& sError) {
@@ -1503,13 +1486,12 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
+  CJS_EventHandler* pEvent =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
 
   const char* cFormat = "";
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   switch (params[0].ToInt(pRuntime)) {
     case 0:
       cFormat = "99999";
@@ -1529,11 +1511,11 @@
   }
 
   std::vector<CJS_Value> params2;
-  params2.push_back(CJS_Value(CJS_Runtime::FromEventContext(cc), cFormat));
-  return AFSpecial_KeystrokeEx(cc, params2, vRet, sError);
+  params2.push_back(CJS_Value(pRuntime, cFormat));
+  return AFSpecial_KeystrokeEx(pRuntime, params2, vRet, sError);
 }
 
-bool CJS_PublicMethods::AFMergeChange(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFMergeChange(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -1542,9 +1524,8 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
-  CJS_EventHandler* pEventHandler = pContext->GetEventHandler();
+  CJS_EventHandler* pEventHandler =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   CFX_WideString swValue;
   if (pEventHandler->m_pValue)
@@ -1574,7 +1555,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFParseDateEx(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFParseDateEx(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -1583,8 +1564,6 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
   CFX_WideString sValue = params[0].ToCFXWideString(pRuntime);
   CFX_WideString sFormat = params[1].ToCFXWideString(pRuntime);
   double dDate = MakeRegularDate(sValue, sFormat, nullptr);
@@ -1592,7 +1571,7 @@
     CFX_WideString swMsg;
     swMsg.Format(JSGetStringFromID(IDS_STRING_JSPARSEDATE).c_str(),
                  sFormat.c_str());
-    AlertIfPossible(pContext, swMsg.c_str());
+    AlertIfPossible(pRuntime->GetCurrentEventContext(), swMsg.c_str());
     return false;
   }
 
@@ -1600,7 +1579,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFSimple(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFSimple(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError) {
@@ -1609,7 +1588,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   vRet = CJS_Value(pRuntime, static_cast<double>(AF_Simple(
                                  params[0].ToCFXWideString(pRuntime).c_str(),
                                  params[1].ToDouble(pRuntime),
@@ -1618,7 +1596,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFMakeNumber(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFMakeNumber(CJS_Runtime* pRuntime,
                                      const std::vector<CJS_Value>& params,
                                      CJS_Value& vRet,
                                      CFX_WideString& sError) {
@@ -1627,7 +1605,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString ws = params[0].ToCFXWideString(pRuntime);
   ws.Replace(L",", L".");
   vRet = CJS_Value(pRuntime, ws.c_str());
@@ -1637,7 +1614,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFSimple_Calculate(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFSimple_Calculate(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
                                            CFX_WideString& sError) {
@@ -1652,10 +1629,8 @@
     return false;
   }
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CPDFSDK_InterForm* pReaderInterForm =
-      pContext->GetFormFillEnv()->GetInterForm();
+      pRuntime->GetFormFillEnv()->GetInterForm();
   CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
 
   CFX_WideString sFunction = params[0].ToCFXWideString(pRuntime);
@@ -1726,7 +1701,9 @@
 
   dValue = (double)floor(dValue * FXSYS_pow((double)10, (double)6) + 0.49) /
            FXSYS_pow((double)10, (double)6);
+
   CJS_Value jsValue(pRuntime, dValue);
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
   if (pContext->GetEventHandler()->m_pValue)
     pContext->GetEventHandler()->Value() = jsValue.ToCFXWideString(pRuntime);
 
@@ -1736,7 +1713,7 @@
 /* This function validates the current event to ensure that its value is
 ** within the specified range. */
 
-bool CJS_PublicMethods::AFRange_Validate(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFRange_Validate(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
                                          CFX_WideString& sError) {
@@ -1744,8 +1721,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
+  CJS_EventContext* pContext = pRuntime->GetCurrentEventContext();
   CJS_EventHandler* pEvent = pContext->GetEventHandler();
   if (!pEvent->m_pValue)
     return false;
@@ -1783,7 +1759,7 @@
   return true;
 }
 
-bool CJS_PublicMethods::AFExtractNums(IJS_EventContext* cc,
+bool CJS_PublicMethods::AFExtractNums(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -1792,14 +1768,12 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString str = params[0].ToCFXWideString(pRuntime);
-  CFX_WideString sPart;
-  CJS_Array nums;
-
   if (str.GetAt(0) == L'.' || str.GetAt(0) == L',')
     str = L"0" + str;
 
+  CFX_WideString sPart;
+  CJS_Array nums;
   int nIndex = 0;
   for (int i = 0, sz = str.GetLength(); i < sz; i++) {
     FX_WCHAR wc = str.GetAt(i);
diff --git a/fpdfsdk/javascript/PublicMethods.h b/fpdfsdk/javascript/PublicMethods.h
index bb01ea3..060c743 100644
--- a/fpdfsdk/javascript/PublicMethods.h
+++ b/fpdfsdk/javascript/PublicMethods.h
@@ -18,91 +18,91 @@
       : CJS_Object(pObject) {}
   ~CJS_PublicMethods() override {}
 
-  static bool AFNumber_Format(IJS_EventContext* cc,
+  static bool AFNumber_Format(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError);
-  static bool AFNumber_Keystroke(IJS_EventContext* cc,
+  static bool AFNumber_Keystroke(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError);
-  static bool AFPercent_Format(IJS_EventContext* cc,
+  static bool AFPercent_Format(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError);
-  static bool AFPercent_Keystroke(IJS_EventContext* cc,
+  static bool AFPercent_Keystroke(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
                                   CFX_WideString& sError);
-  static bool AFDate_FormatEx(IJS_EventContext* cc,
+  static bool AFDate_FormatEx(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError);
-  static bool AFDate_KeystrokeEx(IJS_EventContext* cc,
+  static bool AFDate_KeystrokeEx(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError);
-  static bool AFDate_Format(IJS_EventContext* cc,
+  static bool AFDate_Format(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError);
-  static bool AFDate_Keystroke(IJS_EventContext* cc,
+  static bool AFDate_Keystroke(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError);
-  static bool AFTime_FormatEx(IJS_EventContext* cc,
+  static bool AFTime_FormatEx(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
                               CFX_WideString& sError);  //
-  static bool AFTime_KeystrokeEx(IJS_EventContext* cc,
+  static bool AFTime_KeystrokeEx(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError);
-  static bool AFTime_Format(IJS_EventContext* cc,
+  static bool AFTime_Format(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError);
-  static bool AFTime_Keystroke(IJS_EventContext* cc,
+  static bool AFTime_Keystroke(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError);
-  static bool AFSpecial_Format(IJS_EventContext* cc,
+  static bool AFSpecial_Format(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError);
-  static bool AFSpecial_Keystroke(IJS_EventContext* cc,
+  static bool AFSpecial_Keystroke(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
                                   CFX_WideString& sError);
-  static bool AFSpecial_KeystrokeEx(IJS_EventContext* cc,
+  static bool AFSpecial_KeystrokeEx(CJS_Runtime* pRuntime,
                                     const std::vector<CJS_Value>& params,
                                     CJS_Value& vRet,
                                     CFX_WideString& sError);  //
-  static bool AFSimple(IJS_EventContext* cc,
+  static bool AFSimple(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError);
-  static bool AFMakeNumber(IJS_EventContext* cc,
+  static bool AFMakeNumber(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
                            CFX_WideString& sError);
-  static bool AFSimple_Calculate(IJS_EventContext* cc,
+  static bool AFSimple_Calculate(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
                                  CFX_WideString& sError);
-  static bool AFRange_Validate(IJS_EventContext* cc,
+  static bool AFRange_Validate(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
                                CFX_WideString& sError);
-  static bool AFMergeChange(IJS_EventContext* cc,
+  static bool AFMergeChange(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError);
-  static bool AFParseDateEx(IJS_EventContext* cc,
+  static bool AFParseDateEx(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError);
-  static bool AFExtractNums(IJS_EventContext* cc,
+  static bool AFExtractNums(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
                             CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index 6de4d20..dfd2cc1 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -211,14 +211,12 @@
 app::~app() {
 }
 
-bool app::activeDocs(IJS_EventContext* cc,
+bool app::activeDocs(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  CJS_Runtime* pRuntime = pContext->GetJSRuntime();
   CJS_Document* pJSDocument = nullptr;
   v8::Local<v8::Object> pObj = pRuntime->GetThisObj();
   if (CFXJS_Engine::GetObjDefnID(pObj) == CJS_Document::g_nObjDefnID) {
@@ -236,16 +234,14 @@
   return true;
 }
 
-bool app::calculate(IJS_EventContext* cc,
+bool app::calculate(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (vp.IsSetting()) {
     bool bVP;
     vp >> bVP;
     m_bCalculate = (bool)bVP;
-
-    CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-    pContext->GetFormFillEnv()->GetInterForm()->EnableCalculate(
+    pRuntime->GetFormFillEnv()->GetInterForm()->EnableCalculate(
         (bool)m_bCalculate);
   } else {
     vp << (bool)m_bCalculate;
@@ -253,7 +249,7 @@
   return true;
 }
 
-bool app::formsVersion(IJS_EventContext* cc,
+bool app::formsVersion(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -264,7 +260,7 @@
   return false;
 }
 
-bool app::viewerType(IJS_EventContext* cc,
+bool app::viewerType(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -275,7 +271,7 @@
   return false;
 }
 
-bool app::viewerVariation(IJS_EventContext* cc,
+bool app::viewerVariation(CJS_Runtime* pRuntime,
                           CJS_PropValue& vp,
                           CFX_WideString& sError) {
   if (vp.IsGetting()) {
@@ -286,14 +282,13 @@
   return false;
 }
 
-bool app::viewerVersion(IJS_EventContext* cc,
+bool app::viewerVersion(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
-  CJS_EventContext* pJSContext = static_cast<CJS_EventContext*>(cc);
-  CPDFXFA_Context* pXFAContext = pJSContext->GetFormFillEnv()->GetXFAContext();
+  CPDFXFA_Context* pXFAContext = pRuntime->GetFormFillEnv()->GetXFAContext();
   if (pXFAContext->GetDocType() == 1 || pXFAContext->GetDocType() == 2) {
     vp << JS_NUM_VIEWERVERSION_XFA;
     return true;
@@ -303,14 +298,13 @@
   return true;
 }
 
-bool app::platform(IJS_EventContext* cc,
+bool app::platform(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
-  CPDFSDK_FormFillEnvironment* pFormFillEnv =
-      CJS_Runtime::FromEventContext(cc)->GetFormFillEnv();
+  CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
   if (!pFormFillEnv)
     return false;
   CFX_WideString platfrom = pFormFillEnv->GetPlatform();
@@ -323,14 +317,13 @@
   return true;
 }
 
-bool app::language(IJS_EventContext* cc,
+bool app::language(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
-  CPDFSDK_FormFillEnvironment* pFormFillEnv =
-      CJS_Runtime::FromEventContext(cc)->GetFormFillEnv();
+  CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
   if (!pFormFillEnv)
     return false;
   CFX_WideString language = pFormFillEnv->GetLanguage();
@@ -347,7 +340,7 @@
 // comment: need reader support
 // note:
 // CFDF_Document * CPDFSDK_FormFillEnvironment::NewFDF();
-bool app::newFDF(IJS_EventContext* cc,
+bool app::newFDF(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError) {
@@ -360,18 +353,17 @@
 // CFDF_Document * CPDFSDK_FormFillEnvironment::OpenFDF(string strPath,bool
 // bUserConv);
 
-bool app::openFDF(IJS_EventContext* cc,
+bool app::openFDF(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
   return true;
 }
 
-bool app::alert(IJS_EventContext* cc,
+bool app::alert(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   std::vector<CJS_Value> newParams = JS_ExpandKeywordParams(
       pRuntime, params, 4, L"cMsg", L"nIcon", L"nType", L"cTitle");
 
@@ -429,12 +421,11 @@
   return true;
 }
 
-bool app::beep(IJS_EventContext* cc,
+bool app::beep(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError) {
   if (params.size() == 1) {
-    CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
     pRuntime->GetFormFillEnv()->JS_appBeep(params[0].ToInt(pRuntime));
     return true;
   }
@@ -443,25 +434,25 @@
   return false;
 }
 
-bool app::findComponent(IJS_EventContext* cc,
+bool app::findComponent(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
   return true;
 }
 
-bool app::popUpMenuEx(IJS_EventContext* cc,
+bool app::popUpMenuEx(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
   return false;
 }
 
-bool app::fs(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError) {
+bool app::fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError) {
   return false;
 }
 
-bool app::setInterval(IJS_EventContext* cc,
+bool app::setInterval(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
@@ -470,7 +461,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString script =
       params.size() > 0 ? params[0].ToCFXWideString(pRuntime) : L"";
   if (script.IsEmpty()) {
@@ -495,7 +485,7 @@
   return true;
 }
 
-bool app::setTimeOut(IJS_EventContext* cc,
+bool app::setTimeOut(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
@@ -504,7 +494,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CFX_WideString script = params[0].ToCFXWideString(pRuntime);
   if (script.IsEmpty()) {
     sError = JSGetStringFromID(IDS_STRING_JSAFNUMBER_KEYSTROKE);
@@ -530,7 +519,7 @@
   return true;
 }
 
-bool app::clearTimeOut(IJS_EventContext* cc,
+bool app::clearTimeOut(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -539,11 +528,11 @@
     return false;
   }
 
-  app::ClearTimerCommon(CJS_Runtime::FromEventContext(cc), params[0]);
+  app::ClearTimerCommon(pRuntime, params[0]);
   return true;
 }
 
-bool app::clearInterval(IJS_EventContext* cc,
+bool app::clearInterval(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
                         CFX_WideString& sError) {
@@ -552,7 +541,7 @@
     return false;
   }
 
-  app::ClearTimerCommon(CJS_Runtime::FromEventContext(cc), params[0]);
+  app::ClearTimerCommon(pRuntime, params[0]);
   return true;
 }
 
@@ -575,7 +564,7 @@
   GlobalTimer::Cancel(pTimerObj->GetTimerID());
 }
 
-bool app::execMenuItem(IJS_EventContext* cc,
+bool app::execMenuItem(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -602,7 +591,7 @@
   }
 }
 
-bool app::goBack(IJS_EventContext* cc,
+bool app::goBack(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError) {
@@ -610,7 +599,7 @@
   return true;
 }
 
-bool app::goForward(IJS_EventContext* cc,
+bool app::goForward(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
@@ -618,11 +607,10 @@
   return true;
 }
 
-bool app::mailMsg(IJS_EventContext* cc,
+bool app::mailMsg(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   std::vector<CJS_Value> newParams =
       JS_ExpandKeywordParams(pRuntime, params, 6, L"bUI", L"cTo", L"cCc",
                              L"cBcc", L"cSubject", L"cMsg");
@@ -661,15 +649,14 @@
     cMsg = newParams[5].ToCFXWideString(pRuntime);
 
   pRuntime->BeginBlock();
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  pContext->GetFormFillEnv()->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(),
+  pRuntime->GetFormFillEnv()->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(),
                                              cSubject.c_str(), cCc.c_str(),
                                              cBcc.c_str(), cMsg.c_str());
   pRuntime->EndBlock();
   return true;
 }
 
-bool app::launchURL(IJS_EventContext* cc,
+bool app::launchURL(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
@@ -677,7 +664,7 @@
   return true;
 }
 
-bool app::runtimeHighlight(IJS_EventContext* cc,
+bool app::runtimeHighlight(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
                            CFX_WideString& sError) {
   if (vp.IsSetting()) {
@@ -688,20 +675,20 @@
   return true;
 }
 
-bool app::fullscreen(IJS_EventContext* cc,
+bool app::fullscreen(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   return false;
 }
 
-bool app::popUpMenu(IJS_EventContext* cc,
+bool app::popUpMenu(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
   return false;
 }
 
-bool app::browseForDoc(IJS_EventContext* cc,
+bool app::browseForDoc(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -727,25 +714,24 @@
   return sRet;
 }
 
-bool app::newDoc(IJS_EventContext* cc,
+bool app::newDoc(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError) {
   return false;
 }
 
-bool app::openDoc(IJS_EventContext* cc,
+bool app::openDoc(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
   return false;
 }
 
-bool app::response(IJS_EventContext* cc,
+bool app::response(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   std::vector<CJS_Value> newParams =
       JS_ExpandKeywordParams(pRuntime, params, 5, L"cQuestion", L"cTitle",
                              L"cDefault", L"bPassword", L"cLabel");
@@ -776,8 +762,7 @@
   std::unique_ptr<char[]> pBuff(new char[MAX_INPUT_BYTES + 2]);
   memset(pBuff.get(), 0, MAX_INPUT_BYTES + 2);
 
-  CJS_EventContext* pContext = static_cast<CJS_EventContext*>(cc);
-  int nLengthBytes = pContext->GetFormFillEnv()->JS_appResponse(
+  int nLengthBytes = pRuntime->GetFormFillEnv()->JS_appResponse(
       swQuestion.c_str(), swTitle.c_str(), swDefault.c_str(), swLabel.c_str(),
       bPassword, pBuff.get(), MAX_INPUT_BYTES);
 
@@ -794,13 +779,13 @@
   return true;
 }
 
-bool app::media(IJS_EventContext* cc,
+bool app::media(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError) {
   return false;
 }
 
-bool app::execDialog(IJS_EventContext* cc,
+bool app::execDialog(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError) {
diff --git a/fpdfsdk/javascript/app.h b/fpdfsdk/javascript/app.h
index 6cd68d3..9e11b82 100644
--- a/fpdfsdk/javascript/app.h
+++ b/fpdfsdk/javascript/app.h
@@ -41,120 +41,120 @@
   explicit app(CJS_Object* pJSObject);
   ~app() override;
 
-  bool activeDocs(IJS_EventContext* cc,
+  bool activeDocs(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool calculate(IJS_EventContext* cc,
+  bool calculate(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool formsVersion(IJS_EventContext* cc,
+  bool formsVersion(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool fs(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool fullscreen(IJS_EventContext* cc,
+  bool fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool fullscreen(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool language(IJS_EventContext* cc,
+  bool language(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool media(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool platform(IJS_EventContext* cc,
+  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool platform(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool runtimeHighlight(IJS_EventContext* cc,
+  bool runtimeHighlight(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
                         CFX_WideString& sError);
-  bool viewerType(IJS_EventContext* cc,
+  bool viewerType(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool viewerVariation(IJS_EventContext* cc,
+  bool viewerVariation(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError);
-  bool viewerVersion(IJS_EventContext* cc,
+  bool viewerVersion(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError);
 
-  bool alert(IJS_EventContext* cc,
+  bool alert(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
              CFX_WideString& sError);
-  bool beep(IJS_EventContext* cc,
+  bool beep(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
             CFX_WideString& sError);
-  bool browseForDoc(IJS_EventContext* cc,
+  bool browseForDoc(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool clearInterval(IJS_EventContext* cc,
+  bool clearInterval(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool clearTimeOut(IJS_EventContext* cc,
+  bool clearTimeOut(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool execDialog(IJS_EventContext* cc,
+  bool execDialog(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
-  bool execMenuItem(IJS_EventContext* cc,
+  bool execMenuItem(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError);
-  bool findComponent(IJS_EventContext* cc,
+  bool findComponent(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
-  bool goBack(IJS_EventContext* cc,
+  bool goBack(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool goForward(IJS_EventContext* cc,
+  bool goForward(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool launchURL(IJS_EventContext* cc,
+  bool launchURL(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool mailMsg(IJS_EventContext* cc,
+  bool mailMsg(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool newFDF(IJS_EventContext* cc,
+  bool newFDF(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool newDoc(IJS_EventContext* cc,
+  bool newDoc(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool openDoc(IJS_EventContext* cc,
+  bool openDoc(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool openFDF(IJS_EventContext* cc,
+  bool openFDF(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool popUpMenuEx(IJS_EventContext* cc,
+  bool popUpMenuEx(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool popUpMenu(IJS_EventContext* cc,
+  bool popUpMenu(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
-  bool response(IJS_EventContext* cc,
+  bool response(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
                 CFX_WideString& sError);
-  bool setInterval(IJS_EventContext* cc,
+  bool setInterval(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError);
-  bool setTimeOut(IJS_EventContext* cc,
+  bool setTimeOut(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/cjs_runtime.cpp b/fpdfsdk/javascript/cjs_runtime.cpp
index bf50ca9..8466e4d 100644
--- a/fpdfsdk/javascript/cjs_runtime.cpp
+++ b/fpdfsdk/javascript/cjs_runtime.cpp
@@ -51,11 +51,6 @@
 }
 
 // static
-CJS_Runtime* CJS_Runtime::FromEventContext(const IJS_EventContext* cc) {
-  return static_cast<const CJS_EventContext*>(cc)->GetJSRuntime();
-}
-
-// static
 CJS_Runtime* CJS_Runtime::CurrentRuntimeFromIsolate(v8::Isolate* pIsolate) {
   return static_cast<CJS_Runtime*>(
       CFXJS_Engine::CurrentEngineFromIsolate(pIsolate));
@@ -165,7 +160,7 @@
     m_EventContextArray.erase(it);
 }
 
-IJS_EventContext* CJS_Runtime::GetCurrentEventContext() {
+CJS_EventContext* CJS_Runtime::GetCurrentEventContext() const {
   return m_EventContextArray.empty() ? nullptr
                                      : m_EventContextArray.back().get();
 }
diff --git a/fpdfsdk/javascript/cjs_runtime.h b/fpdfsdk/javascript/cjs_runtime.h
index 96b171b..039e24b 100644
--- a/fpdfsdk/javascript/cjs_runtime.h
+++ b/fpdfsdk/javascript/cjs_runtime.h
@@ -27,7 +27,6 @@
  public:
   using FieldEvent = std::pair<CFX_WideString, JS_EVENT_T>;
 
-  static CJS_Runtime* FromEventContext(const IJS_EventContext* cc);
   static CJS_Runtime* CurrentRuntimeFromIsolate(v8::Isolate* pIsolate);
 
   explicit CJS_Runtime(CPDFSDK_FormFillEnvironment* pFormFillEnv);
@@ -36,11 +35,12 @@
   // IJS_Runtime
   IJS_EventContext* NewEventContext() override;
   void ReleaseEventContext(IJS_EventContext* pContext) override;
-  IJS_EventContext* GetCurrentEventContext() override;
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override;
   int ExecuteScript(const CFX_WideString& script,
                     CFX_WideString* info) override;
 
+  CJS_EventContext* GetCurrentEventContext() const;
+
   // Returns true if the event isn't already found in the set.
   bool AddEventToSet(const FieldEvent& event);
   void RemoveEventFromSet(const FieldEvent& event);
diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp
index be26987..90a8495 100644
--- a/fpdfsdk/javascript/color.cpp
+++ b/fpdfsdk/javascript/color.cpp
@@ -133,20 +133,19 @@
   }
 }
 
-#define JS_IMPLEMENT_COLORPROP(prop, var)                      \
-  bool color::prop(IJS_EventContext* cc, CJS_PropValue& vp,    \
-                   CFX_WideString& sError) {                   \
-    CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc); \
-    CJS_Array array;                                           \
-    if (vp.IsGetting()) {                                      \
-      ConvertPWLColorToArray(pRuntime, var, &array);           \
-      vp << array;                                             \
-    } else {                                                   \
-      if (!vp.GetJSValue()->ConvertToArray(pRuntime, array))   \
-        return false;                                          \
-      ConvertArrayToPWLColor(pRuntime, array, &var);           \
-    }                                                          \
-    return true;                                               \
+#define JS_IMPLEMENT_COLORPROP(prop, var)                    \
+  bool color::prop(CJS_Runtime* pRuntime, CJS_PropValue& vp, \
+                   CFX_WideString& sError) {                 \
+    CJS_Array array;                                         \
+    if (vp.IsGetting()) {                                    \
+      ConvertPWLColorToArray(pRuntime, var, &array);         \
+      vp << array;                                           \
+    } else {                                                 \
+      if (!vp.GetJSValue()->ConvertToArray(pRuntime, array)) \
+        return false;                                        \
+      ConvertArrayToPWLColor(pRuntime, array, &var);         \
+    }                                                        \
+    return true;                                             \
   }
 
 JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent)
@@ -162,7 +161,7 @@
 JS_IMPLEMENT_COLORPROP(gray, m_crGray)
 JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray)
 
-bool color::convert(IJS_EventContext* cc,
+bool color::convert(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
@@ -170,7 +169,6 @@
   if (iSize < 2)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array aSource;
   if (!params[0].ConvertToArray(pRuntime, aSource))
     return false;
@@ -200,14 +198,13 @@
   return true;
 }
 
-bool color::equal(IJS_EventContext* cc,
+bool color::equal(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
   if (params.size() < 2)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Array array1;
   CJS_Array array2;
   if (!params[0].ConvertToArray(pRuntime, array1))
diff --git a/fpdfsdk/javascript/color.h b/fpdfsdk/javascript/color.h
index df53b4a..f966ca7 100644
--- a/fpdfsdk/javascript/color.h
+++ b/fpdfsdk/javascript/color.h
@@ -17,26 +17,28 @@
   explicit color(CJS_Object* pJSObject);
   ~color() override;
 
-  bool black(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool blue(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool cyan(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool dkGray(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool gray(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool green(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool ltGray(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool magenta(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool red(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool transparent(IJS_EventContext* cc,
+  bool black(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool blue(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool cyan(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool dkGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool gray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool green(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool ltGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool magenta(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool red(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool transparent(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError);
-  bool white(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool yellow(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
+  bool white(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool yellow(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
 
-  bool convert(IJS_EventContext* cc,
+  bool convert(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool equal(IJS_EventContext* cc,
+  bool equal(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
              CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/console.cpp b/fpdfsdk/javascript/console.cpp
index 538a4ef..fdef98f 100644
--- a/fpdfsdk/javascript/console.cpp
+++ b/fpdfsdk/javascript/console.cpp
@@ -33,21 +33,21 @@
 
 console::~console() {}
 
-bool console::clear(IJS_EventContext* cc,
+bool console::clear(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
                     CFX_WideString& sError) {
   return true;
 }
 
-bool console::hide(IJS_EventContext* cc,
+bool console::hide(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError) {
   return true;
 }
 
-bool console::println(IJS_EventContext* cc,
+bool console::println(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
@@ -57,7 +57,7 @@
   return true;
 }
 
-bool console::show(IJS_EventContext* cc,
+bool console::show(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
                    CFX_WideString& sError) {
diff --git a/fpdfsdk/javascript/console.h b/fpdfsdk/javascript/console.h
index 1b6e9dd..a7e4d8e 100644
--- a/fpdfsdk/javascript/console.h
+++ b/fpdfsdk/javascript/console.h
@@ -17,19 +17,19 @@
   ~console() override;
 
  public:
-  bool clear(IJS_EventContext* cc,
+  bool clear(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
              CFX_WideString& sError);
-  bool hide(IJS_EventContext* cc,
+  bool hide(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
             CFX_WideString& sError);
-  bool println(IJS_EventContext* cc,
+  bool println(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
                CFX_WideString& sError);
-  bool show(IJS_EventContext* cc,
+  bool show(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
             CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/event.cpp b/fpdfsdk/javascript/event.cpp
index 48f3ce8..88dce4b 100644
--- a/fpdfsdk/javascript/event.cpp
+++ b/fpdfsdk/javascript/event.cpp
@@ -48,11 +48,11 @@
 
 event::~event() {}
 
-bool event::change(IJS_EventContext* cc,
+bool event::change(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
   CFX_WideString& wChange = pEvent->Change();
   if (vp.IsSetting()) {
     if (vp.GetJSValue()->GetType() == CJS_Value::VT_string)
@@ -63,99 +63,90 @@
   return true;
 }
 
-bool event::changeEx(IJS_EventContext* cc,
+bool event::changeEx(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->ChangeEx();
   return true;
 }
 
-bool event::commitKey(IJS_EventContext* cc,
+bool event::commitKey(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->CommitKey();
   return true;
 }
 
-bool event::fieldFull(IJS_EventContext* cc,
+bool event::fieldFull(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   if (!vp.IsGetting() &&
       wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0)
     return false;
 
-  if (pEvent->FieldFull())
-    vp << true;
-  else
-    vp << false;
+  vp << pEvent->FieldFull();
   return true;
 }
 
-bool event::keyDown(IJS_EventContext* cc,
+bool event::keyDown(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
-  if (pEvent->KeyDown())
-    vp << true;
-  else
-    vp << false;
+  vp << pEvent->KeyDown();
   return true;
 }
 
-bool event::modifier(IJS_EventContext* cc,
+bool event::modifier(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
-  if (pEvent->Modifier())
-    vp << true;
-  else
-    vp << false;
+  vp << pEvent->Modifier();
   return true;
 }
 
-bool event::name(IJS_EventContext* cc,
+bool event::name(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->Name();
   return true;
 }
 
-bool event::rc(IJS_EventContext* cc,
+bool event::rc(CJS_Runtime* pRuntime,
                CJS_PropValue& vp,
                CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   bool& bRc = pEvent->Rc();
   if (vp.IsSetting())
@@ -166,29 +157,29 @@
   return true;
 }
 
-bool event::richChange(IJS_EventContext* cc,
+bool event::richChange(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   return true;
 }
 
-bool event::richChangeEx(IJS_EventContext* cc,
+bool event::richChangeEx(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
                          CFX_WideString& sError) {
   return true;
 }
 
-bool event::richValue(IJS_EventContext* cc,
+bool event::richValue(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
                       CFX_WideString& sError) {
   return true;
 }
 
-bool event::selEnd(IJS_EventContext* cc,
+bool event::selEnd(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0)
     return true;
@@ -202,11 +193,11 @@
   return true;
 }
 
-bool event::selStart(IJS_EventContext* cc,
+bool event::selStart(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0)
     return true;
@@ -220,79 +211,76 @@
   return true;
 }
 
-bool event::shift(IJS_EventContext* cc,
+bool event::shift(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
-  if (pEvent->Shift())
-    vp << true;
-  else
-    vp << false;
+  vp << pEvent->Shift();
   return true;
 }
 
-bool event::source(IJS_EventContext* cc,
+bool event::source(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->Source()->GetJSObject();
   return true;
 }
 
-bool event::target(IJS_EventContext* cc,
+bool event::target(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
                    CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->Target_Field()->GetJSObject();
   return true;
 }
 
-bool event::targetName(IJS_EventContext* cc,
+bool event::targetName(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
-  CJS_EventContext* pContext = (CJS_EventContext*)cc;
-  CJS_EventHandler* pEvent = pContext->GetEventHandler();
+  CJS_EventHandler* pEvent =
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->TargetName();
   return true;
 }
 
-bool event::type(IJS_EventContext* cc,
+bool event::type(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   vp << pEvent->Type();
   return true;
 }
 
-bool event::value(IJS_EventContext* cc,
+bool event::value(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError) {
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
   if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0)
     return false;
@@ -309,19 +297,15 @@
   return true;
 }
 
-bool event::willCommit(IJS_EventContext* cc,
+bool event::willCommit(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
                        CFX_WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
   CJS_EventHandler* pEvent =
-      static_cast<CJS_EventContext*>(cc)->GetEventHandler();
+      pRuntime->GetCurrentEventContext()->GetEventHandler();
 
-  if (pEvent->WillCommit())
-    vp << true;
-  else
-    vp << false;
-
+  vp << pEvent->WillCommit();
   return true;
 }
diff --git a/fpdfsdk/javascript/event.h b/fpdfsdk/javascript/event.h
index 54ba3f0..2be8a0a 100644
--- a/fpdfsdk/javascript/event.h
+++ b/fpdfsdk/javascript/event.h
@@ -15,44 +15,46 @@
   ~event() override;
 
  public:
-  bool change(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool changeEx(IJS_EventContext* cc,
+  bool change(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool changeEx(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool commitKey(IJS_EventContext* cc,
+  bool commitKey(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool fieldFull(IJS_EventContext* cc,
+  bool fieldFull(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool keyDown(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool modifier(IJS_EventContext* cc,
+  bool keyDown(CJS_Runtime* pRuntime,
+               CJS_PropValue& vp,
+               CFX_WideString& sError);
+  bool modifier(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool name(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool rc(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool richChange(IJS_EventContext* cc,
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool rc(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool richChange(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool richChangeEx(IJS_EventContext* cc,
+  bool richChangeEx(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
                     CFX_WideString& sError);
-  bool richValue(IJS_EventContext* cc,
+  bool richValue(CJS_Runtime* pRuntime,
                  CJS_PropValue& vp,
                  CFX_WideString& sError);
-  bool selEnd(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool selStart(IJS_EventContext* cc,
+  bool selEnd(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool selStart(CJS_Runtime* pRuntime,
                 CJS_PropValue& vp,
                 CFX_WideString& sError);
-  bool shift(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool source(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool target(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool targetName(IJS_EventContext* cc,
+  bool shift(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool target(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool targetName(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool type(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool value(IJS_EventContext* cc, CJS_PropValue& vp, CFX_WideString& sError);
-  bool willCommit(IJS_EventContext* cc,
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool willCommit(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
 };
diff --git a/fpdfsdk/javascript/global.cpp b/fpdfsdk/javascript/global.cpp
index 06b9d67..8f9ce1a 100644
--- a/fpdfsdk/javascript/global.cpp
+++ b/fpdfsdk/javascript/global.cpp
@@ -66,7 +66,7 @@
   return CFX_WideString(propname) != L"setPersistent";
 }
 
-bool JSGlobalAlternate::DelProperty(IJS_EventContext* cc,
+bool JSGlobalAlternate::DelProperty(CJS_Runtime* pRuntime,
                                     const FX_WCHAR* propname,
                                     CFX_WideString& sError) {
   auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname));
@@ -77,11 +77,10 @@
   return true;
 }
 
-bool JSGlobalAlternate::DoProperty(IJS_EventContext* cc,
+bool JSGlobalAlternate::DoProperty(CJS_Runtime* pRuntime,
                                    const FX_WCHAR* propname,
                                    CJS_PropValue& vp,
                                    CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   if (vp.IsSetting()) {
     CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
     switch (vp.GetJSValue()->GetType()) {
@@ -114,7 +113,7 @@
                                   false, "", v8::Local<v8::Object>(), false);
       }
       case CJS_Value::VT_undefined: {
-        DelProperty(cc, propname, sError);
+        DelProperty(pRuntime, propname, sError);
         return true;
       }
       default:
@@ -157,7 +156,7 @@
   return false;
 }
 
-bool JSGlobalAlternate::setPersistent(IJS_EventContext* cc,
+bool JSGlobalAlternate::setPersistent(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
                                       CFX_WideString& sError) {
@@ -166,7 +165,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   auto it = m_mapGlobal.find(params[0].ToCFXByteString(pRuntime));
   if (it != m_mapGlobal.end()) {
     JSGlobalData* pData = it->second;
@@ -232,7 +230,8 @@
   }
 }
 
-void JSGlobalAlternate::CommitGlobalPersisitentVariables(IJS_EventContext* cc) {
+void JSGlobalAlternate::CommitGlobalPersisitentVariables(
+    CJS_Runtime* pRuntime) {
   for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) {
     CFX_ByteString name = it->first;
     JSGlobalData* pData = it->second;
@@ -256,7 +255,7 @@
           CJS_GlobalVariableArray array;
           v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(
               GetJSObject()->GetIsolate(), pData->pData);
-          ObjectToArray(cc, obj, array);
+          ObjectToArray(pRuntime, obj, array);
           m_pGlobalData->SetGlobalVariableObject(name, array);
           m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
         } break;
@@ -269,10 +268,9 @@
   }
 }
 
-void JSGlobalAlternate::ObjectToArray(IJS_EventContext* cc,
+void JSGlobalAlternate::ObjectToArray(CJS_Runtime* pRuntime,
                                       v8::Local<v8::Object> pObj,
                                       CJS_GlobalVariableArray& array) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   std::vector<CFX_WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj);
   for (const auto& ws : pKeyList) {
     CFX_ByteString sKey = ws.UTF8Encode();
@@ -305,7 +303,7 @@
         CJS_KeyValue* pObjElement = new CJS_KeyValue;
         pObjElement->nType = JS_GlobalDataType::OBJECT;
         pObjElement->sKey = sKey;
-        ObjectToArray(cc, pRuntime->ToObject(v), pObjElement->objData);
+        ObjectToArray(pRuntime, pRuntime->ToObject(v), pObjElement->objData);
         array.Add(pObjElement);
       } break;
       case CJS_Value::VT_null: {
diff --git a/fpdfsdk/javascript/global.h b/fpdfsdk/javascript/global.h
index cc5601c..50dfcf3 100644
--- a/fpdfsdk/javascript/global.h
+++ b/fpdfsdk/javascript/global.h
@@ -35,23 +35,23 @@
   explicit JSGlobalAlternate(CJS_Object* pJSObject);
   ~JSGlobalAlternate() override;
 
-  bool setPersistent(IJS_EventContext* cc,
+  bool setPersistent(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
                      CFX_WideString& sError);
   bool QueryProperty(const FX_WCHAR* propname);
-  bool DoProperty(IJS_EventContext* cc,
+  bool DoProperty(CJS_Runtime* pRuntime,
                   const FX_WCHAR* propname,
                   CJS_PropValue& vp,
                   CFX_WideString& sError);
-  bool DelProperty(IJS_EventContext* cc,
+  bool DelProperty(CJS_Runtime* pRuntime,
                    const FX_WCHAR* propname,
                    CFX_WideString& sError);
   void Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv);
 
  private:
   void UpdateGlobalPersistentVariables();
-  void CommitGlobalPersisitentVariables(IJS_EventContext* cc);
+  void CommitGlobalPersisitentVariables(CJS_Runtime* pRuntime);
   void DestroyGlobalPersisitentVariables();
   bool SetGlobalVariables(const CFX_ByteString& propname,
                           JS_GlobalDataType nType,
@@ -60,7 +60,7 @@
                           const CFX_ByteString& sData,
                           v8::Local<v8::Object> pData,
                           bool bDefaultPersistent);
-  void ObjectToArray(IJS_EventContext* cc,
+  void ObjectToArray(CJS_Runtime* pRuntime,
                      v8::Local<v8::Object> pObj,
                      CJS_GlobalVariableArray& array);
   void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
diff --git a/fpdfsdk/javascript/ijs_runtime.h b/fpdfsdk/javascript/ijs_runtime.h
index a0e69d8..babc418 100644
--- a/fpdfsdk/javascript/ijs_runtime.h
+++ b/fpdfsdk/javascript/ijs_runtime.h
@@ -27,7 +27,6 @@
 
   virtual IJS_EventContext* NewEventContext() = 0;
   virtual void ReleaseEventContext(IJS_EventContext* pContext) = 0;
-  virtual IJS_EventContext* GetCurrentEventContext() = 0;
   virtual CPDFSDK_FormFillEnvironment* GetFormFillEnv() const = 0;
   virtual int ExecuteScript(const CFX_WideString& script,
                             CFX_WideString* info) = 0;
diff --git a/fpdfsdk/javascript/report.cpp b/fpdfsdk/javascript/report.cpp
index 87ed416..2cb123a 100644
--- a/fpdfsdk/javascript/report.cpp
+++ b/fpdfsdk/javascript/report.cpp
@@ -29,7 +29,7 @@
 
 Report::~Report() {}
 
-bool Report::writeText(IJS_EventContext* cc,
+bool Report::writeText(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
                        CFX_WideString& sError) {
@@ -37,7 +37,7 @@
   return true;
 }
 
-bool Report::save(IJS_EventContext* cc,
+bool Report::save(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
diff --git a/fpdfsdk/javascript/report.h b/fpdfsdk/javascript/report.h
index 566b2e8..c66db80 100644
--- a/fpdfsdk/javascript/report.h
+++ b/fpdfsdk/javascript/report.h
@@ -17,11 +17,11 @@
   ~Report() override;
 
  public:
-  bool save(IJS_EventContext* cc,
+  bool save(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
             CFX_WideString& sError);
-  bool writeText(IJS_EventContext* cc,
+  bool writeText(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError);
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index 0baca53..8ae1773 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -114,11 +114,10 @@
 
 util::~util() {}
 
-bool util::printf(IJS_EventContext* cc,
+bool util::printf(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iSize = params.size();
   if (iSize < 1)
     return false;
@@ -177,7 +176,7 @@
   return true;
 }
 
-bool util::printd(IJS_EventContext* cc,
+bool util::printd(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
@@ -185,7 +184,6 @@
   if (iSize < 2)
     return false;
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   CJS_Value p1 = params[0];
   CJS_Value p2 = params[1];
   CJS_Date jsDate;
@@ -307,7 +305,7 @@
   return false;
 }
 
-bool util::printx(IJS_EventContext* cc,
+bool util::printx(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError) {
@@ -316,7 +314,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   vRet = CJS_Value(pRuntime, printx(params[0].ToCFXWideString(pRuntime),
                                     params[1].ToCFXWideString(pRuntime))
                                  .c_str());
@@ -425,11 +422,10 @@
   return wsResult;
 }
 
-bool util::scand(IJS_EventContext* cc,
+bool util::scand(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
                  CFX_WideString& sError) {
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int iSize = params.size();
   if (iSize < 2)
     return false;
@@ -450,7 +446,7 @@
   return true;
 }
 
-bool util::byteToChar(IJS_EventContext* cc,
+bool util::byteToChar(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
                       CFX_WideString& sError) {
@@ -459,7 +455,6 @@
     return false;
   }
 
-  CJS_Runtime* pRuntime = CJS_Runtime::FromEventContext(cc);
   int arg = params[0].ToInt(pRuntime);
   if (arg < 0 || arg > 255) {
     sError = JSGetStringFromID(IDS_STRING_JSVALUEERROR);
diff --git a/fpdfsdk/javascript/util.h b/fpdfsdk/javascript/util.h
index e7adb20..98761b6 100644
--- a/fpdfsdk/javascript/util.h
+++ b/fpdfsdk/javascript/util.h
@@ -17,23 +17,23 @@
   explicit util(CJS_Object* pJSObject);
   ~util() override;
 
-  bool printd(IJS_EventContext* cc,
+  bool printd(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool printf(IJS_EventContext* cc,
+  bool printf(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool printx(IJS_EventContext* cc,
+  bool printx(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
               CFX_WideString& sError);
-  bool scand(IJS_EventContext* cc,
+  bool scand(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
              CFX_WideString& sError);
-  bool byteToChar(IJS_EventContext* cc,
+  bool byteToChar(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
                   CFX_WideString& sError);