Remove pointer to isolate from CFXJSE_Value

Task #1 from the referenced bug.

Bug: pdfium:1610
Change-Id: I44a6347e9384216f08baeaa879fd774587816f15
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/75870
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp
index 86512c5..21c4258 100644
--- a/fxjs/xfa/cfxjse_class.cpp
+++ b/fxjs/xfa/cfxjse_class.cpp
@@ -122,10 +122,10 @@
   int32_t nPropType =
       lpClass->dynPropTypeGetter == nullptr
           ? FXJSE_ClassPropType_Property
-          : lpClass->dynPropTypeGetter(pObject, szPropName, false);
+          : lpClass->dynPropTypeGetter(pIsolate, pObject, szPropName, false);
   if (nPropType == FXJSE_ClassPropType_Property) {
     if (lpClass->dynPropGetter)
-      lpClass->dynPropGetter(pObject, szPropName, pValue);
+      lpClass->dynPropGetter(pIsolate, pObject, szPropName, pValue);
   } else if (nPropType == FXJSE_ClassPropType_Method) {
     if (lpClass->dynMethodCall && pValue) {
       v8::HandleScope hscope(pIsolate);
@@ -140,6 +140,7 @@
       hCallBackInfo->SetInternalField(
           1, fxv8::NewStringHelper(pIsolate, szPropName));
       pValue->ForceSetValue(
+          pIsolate,
           v8::Function::New(pIsolate->GetCurrentContext(),
                             DynPropGetterAdapter_MethodCallback, hCallBackInfo,
                             0, v8::ConstructorBehavior::kThrow)
@@ -148,7 +149,8 @@
   }
 }
 
-void DynPropSetterAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
+void DynPropSetterAdapter(v8::Isolate* pIsolate,
+                          const FXJSE_CLASS_DESCRIPTOR* lpClass,
                           CFXJSE_Value* pObject,
                           ByteStringView szPropName,
                           CFXJSE_Value* pValue) {
@@ -156,21 +158,22 @@
   int32_t nPropType =
       lpClass->dynPropTypeGetter == nullptr
           ? FXJSE_ClassPropType_Property
-          : lpClass->dynPropTypeGetter(pObject, szPropName, false);
+          : lpClass->dynPropTypeGetter(pIsolate, pObject, szPropName, false);
   if (nPropType != FXJSE_ClassPropType_Method) {
     if (lpClass->dynPropSetter)
-      lpClass->dynPropSetter(pObject, szPropName, pValue);
+      lpClass->dynPropSetter(pIsolate, pObject, szPropName, pValue);
   }
 }
 
-bool DynPropQueryAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
+bool DynPropQueryAdapter(v8::Isolate* pIsolate,
+                         const FXJSE_CLASS_DESCRIPTOR* lpClass,
                          CFXJSE_Value* pObject,
                          ByteStringView szPropName) {
   ASSERT(lpClass);
   int32_t nPropType =
       lpClass->dynPropTypeGetter == nullptr
           ? FXJSE_ClassPropType_Property
-          : lpClass->dynPropTypeGetter(pObject, szPropName, true);
+          : lpClass->dynPropTypeGetter(pIsolate, pObject, szPropName, true);
   return nPropType != FXJSE_ClassPropType_None;
 }
 
@@ -187,8 +190,9 @@
   v8::String::Utf8Value szPropName(info.GetIsolate(), property);
   ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  lpThisValue->ForceSetValue(thisObject);
-  if (DynPropQueryAdapter(lpClass, lpThisValue.get(), szFxPropName)) {
+  lpThisValue->ForceSetValue(info.GetIsolate(), thisObject);
+  if (DynPropQueryAdapter(info.GetIsolate(), lpClass, lpThisValue.get(),
+                          szFxPropName)) {
     info.GetReturnValue().Set(v8::DontDelete);
     return;
   }
@@ -208,7 +212,7 @@
   v8::String::Utf8Value szPropName(info.GetIsolate(), property);
   ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  lpThisValue->ForceSetValue(thisObject);
+  lpThisValue->ForceSetValue(info.GetIsolate(), thisObject);
   auto lpNewValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
   DynPropGetterAdapter(info.GetIsolate(), lpClass, lpThisValue.get(),
                        szFxPropName, lpNewValue.get());
@@ -228,11 +232,11 @@
   v8::String::Utf8Value szPropName(info.GetIsolate(), property);
   ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  lpThisValue->ForceSetValue(thisObject);
+  lpThisValue->ForceSetValue(info.GetIsolate(), thisObject);
   auto lpNewValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  lpNewValue->ForceSetValue(value);
-  DynPropSetterAdapter(lpClass, lpThisValue.get(), szFxPropName,
-                       lpNewValue.get());
+  lpNewValue->ForceSetValue(info.GetIsolate(), value);
+  DynPropSetterAdapter(info.GetIsolate(), lpClass, lpThisValue.get(),
+                       szFxPropName, lpNewValue.get());
   info.GetReturnValue().Set(value);
 }
 
diff --git a/fxjs/xfa/cfxjse_context.cpp b/fxjs/xfa/cfxjse_context.cpp
index 27196b4..54fd290 100644
--- a/fxjs/xfa/cfxjse_context.cpp
+++ b/fxjs/xfa/cfxjse_context.cpp
@@ -224,7 +224,7 @@
       v8::Local<v8::Context>::New(GetIsolate(), m_hContext);
   v8::Local<v8::Object> hGlobalObject =
       hContext->Global()->GetPrototype().As<v8::Object>();
-  pValue->ForceSetValue(hGlobalObject);
+  pValue->ForceSetValue(GetIsolate(), hGlobalObject);
   return pValue;
 }
 
@@ -266,12 +266,13 @@
       if (hScript->Run(hContext).ToLocal(&hValue)) {
         ASSERT(!trycatch.HasCaught());
         if (lpRetValue)
-          lpRetValue->ForceSetValue(hValue);
+          lpRetValue->ForceSetValue(GetIsolate(), hValue);
         return true;
       }
     }
     if (lpRetValue)
-      lpRetValue->ForceSetValue(CreateReturnValue(GetIsolate(), &trycatch));
+      lpRetValue->ForceSetValue(GetIsolate(),
+                                CreateReturnValue(GetIsolate(), &trycatch));
     return false;
   }
 
@@ -292,7 +293,7 @@
             .ToLocal(&hValue)) {
       ASSERT(!trycatch.HasCaught());
       if (lpRetValue)
-        lpRetValue->ForceSetValue(hValue);
+        lpRetValue->ForceSetValue(GetIsolate(), hValue);
       return true;
     }
   }
@@ -311,7 +312,9 @@
   }
 #endif  // NDEBUG
 
-  if (lpRetValue)
-    lpRetValue->ForceSetValue(CreateReturnValue(GetIsolate(), &trycatch));
+  if (lpRetValue) {
+    lpRetValue->ForceSetValue(GetIsolate(),
+                              CreateReturnValue(GetIsolate(), &trycatch));
+  }
   return false;
 }
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index 46ed7bf..7764232 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -77,11 +77,12 @@
 // static
 CXFA_Object* CFXJSE_Engine::ToObject(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  return ToObject(info.Holder());
+  return ToObject(info.GetIsolate(), info.Holder());
 }
 
 // static
-CXFA_Object* CFXJSE_Engine::ToObject(v8::Local<v8::Value> value) {
+CXFA_Object* CFXJSE_Engine::ToObject(v8::Isolate* pIsolate,
+                                     v8::Local<v8::Value> value) {
   if (!value->IsObject())
     return nullptr;
 
@@ -89,8 +90,9 @@
 }
 
 // static.
-CXFA_Object* CFXJSE_Engine::ToObject(CFXJSE_Value* pValue) {
-  return ToObject(pValue->ToHostObject());
+CXFA_Object* CFXJSE_Engine::ToObject(v8::Isolate* pIsolate,
+                                     CFXJSE_Value* pValue) {
+  return ToObject(pValue->ToHostObject(pIsolate));
 }
 
 // static
@@ -125,7 +127,7 @@
   // This is what ensures that the v8 object bound to a CJX_Object
   // no longer retains that binding since it will outlive that object.
   for (const auto& pair : m_mapObjectToValue)
-    pair.second->ClearHostObject();
+    pair.second->ClearHostObject(GetIsolate());
 }
 
 bool CFXJSE_Engine::RunScript(CXFA_Script::Type eScriptType,
@@ -143,7 +145,7 @@
     Optional<CFX_WideTextBuf> wsJavaScript =
         CFXJSE_FormCalcContext::Translate(m_pDocument->GetHeap(), wsScript);
     if (!wsJavaScript.has_value()) {
-      hRetValue->SetUndefined();
+      hRetValue->SetUndefined(GetIsolate());
       return false;
     }
     btScript = FX_UTF8Encode(wsJavaScript.value().AsStringView());
@@ -171,24 +173,26 @@
   if (!ResolveObjects(refNode, propname, &resolveRs, dwFlag, nullptr))
     return false;
   if (resolveRs.dwFlags == XFA_ResolveNodeRS::Type::kNodes) {
-    pValue->Assign(
-        GetOrCreateJSBindingFromMap(resolveRs.objects.front().Get()));
+    pValue->Assign(GetIsolate(), GetOrCreateJSBindingFromMap(
+                                     resolveRs.objects.front().Get()));
     return true;
   }
   if (resolveRs.dwFlags == XFA_ResolveNodeRS::Type::kAttribute &&
       resolveRs.script_attribute.callback) {
     CJX_Object* jsObject = resolveRs.objects.front()->JSObject();
     (*resolveRs.script_attribute.callback)(
-        jsObject, pValue, bSetting, resolveRs.script_attribute.attribute);
+        GetIsolate(), jsObject, pValue, bSetting,
+        resolveRs.script_attribute.attribute);
   }
   return true;
 }
 
 // static
-void CFXJSE_Engine::GlobalPropertySetter(CFXJSE_Value* pObject,
+void CFXJSE_Engine::GlobalPropertySetter(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pObject,
                                          ByteStringView szPropName,
                                          CFXJSE_Value* pValue) {
-  CXFA_Object* lpOrginalNode = ToObject(pObject);
+  CXFA_Object* lpOrginalNode = ToObject(pIsolate, pObject);
   CXFA_Document* pDoc = lpOrginalNode->GetDocument();
   CFXJSE_Engine* lpScriptContext = pDoc->GetScriptContext();
   CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject());
@@ -204,8 +208,8 @@
           true)) {
     return;
   }
-  if (lpOrginalNode->IsThisProxy() && pValue && pValue->IsUndefined()) {
-    pObject->DeleteObjectProperty(szPropName);
+  if (lpOrginalNode->IsThisProxy() && pValue && pValue->IsUndefined(pIsolate)) {
+    pObject->DeleteObjectProperty(lpScriptContext->GetIsolate(), szPropName);
     return;
   }
   CXFA_FFNotify* pNotify = pDoc->GetNotify();
@@ -225,15 +229,16 @@
 }
 
 // static
-void CFXJSE_Engine::GlobalPropertyGetter(CFXJSE_Value* pObject,
+void CFXJSE_Engine::GlobalPropertyGetter(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pObject,
                                          ByteStringView szPropName,
                                          CFXJSE_Value* pValue) {
-  CXFA_Object* pOriginalObject = ToObject(pObject);
+  CXFA_Object* pOriginalObject = ToObject(pIsolate, pObject);
   CXFA_Document* pDoc = pOriginalObject->GetDocument();
   CFXJSE_Engine* lpScriptContext = pDoc->GetScriptContext();
   WideString wsPropName = WideString::FromUTF8(szPropName);
 
-  pValue->SetUndefined();  // Assume failure.
+  pValue->SetUndefined(pIsolate);  // Assume failure.
   if (lpScriptContext->GetType() == CXFA_Script::Type::Formcalc) {
     if (szPropName == kFormCalcRuntime) {
       lpScriptContext->m_FM2JSContext->GlobalPropertyGetter(pValue);
@@ -245,7 +250,8 @@
       CXFA_Object* pObj =
           lpScriptContext->GetDocument()->GetXFAObject(uHashCode);
       if (pObj) {
-        pValue->Assign(lpScriptContext->GetOrCreateJSBindingFromMap(pObj));
+        pValue->Assign(pIsolate,
+                       lpScriptContext->GetOrCreateJSBindingFromMap(pObj));
         return;
       }
     }
@@ -293,13 +299,15 @@
   if (temp_value.IsEmpty())
     return;
 
-  pValue->ForceSetValue(temp_value);
+  pValue->ForceSetValue(pIsolate, temp_value);
 }
 
-int32_t CFXJSE_Engine::GlobalPropTypeGetter(CFXJSE_Value* pOriginalValue,
+// static
+int32_t CFXJSE_Engine::GlobalPropTypeGetter(v8::Isolate* pIsolate,
+                                            CFXJSE_Value* pOriginalValue,
                                             ByteStringView szPropName,
                                             bool bQueryIn) {
-  CXFA_Object* pObject = ToObject(pOriginalValue);
+  CXFA_Object* pObject = ToObject(pIsolate, pOriginalValue);
   if (!pObject)
     return FXJSE_ClassPropType_None;
 
@@ -313,11 +321,12 @@
 }
 
 // static
-void CFXJSE_Engine::NormalPropertyGetter(CFXJSE_Value* pOriginalValue,
+void CFXJSE_Engine::NormalPropertyGetter(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pOriginalValue,
                                          ByteStringView szPropName,
                                          CFXJSE_Value* pReturnValue) {
-  pReturnValue->SetUndefined();  // Assume failure.
-  CXFA_Object* pOriginalObject = ToObject(pOriginalValue);
+  pReturnValue->SetUndefined(pIsolate);  // Assume failure.
+  CXFA_Object* pOriginalObject = ToObject(pIsolate, pOriginalValue);
   if (!pOriginalObject)
     return;
 
@@ -328,7 +337,7 @@
   if (wsPropName.EqualsASCII("xfa")) {
     CFXJSE_Value* pValue = lpScriptContext->GetOrCreateJSBindingFromMap(
         lpScriptContext->GetDocument()->GetRoot());
-    pReturnValue->Assign(pValue);
+    pReturnValue->Assign(pIsolate, pValue);
     return;
   }
 
@@ -364,7 +373,7 @@
       pObject->GetElementType(), wsPropName.AsStringView());
   if (info.has_value()) {
     CJX_Object* jsObject = pObject->JSObject();
-    (*info.value().callback)(jsObject, pReturnValue, false,
+    (*info.value().callback)(pIsolate, jsObject, pReturnValue, false,
                              info.value().attribute);
     return;
   }
@@ -387,14 +396,15 @@
   if (temp_local.IsEmpty())
     return;
 
-  pReturnValue->ForceSetValue(temp_local);
+  pReturnValue->ForceSetValue(lpScriptContext->GetIsolate(), temp_local);
 }
 
 // static
-void CFXJSE_Engine::NormalPropertySetter(CFXJSE_Value* pOriginalValue,
+void CFXJSE_Engine::NormalPropertySetter(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pOriginalValue,
                                          ByteStringView szPropName,
                                          CFXJSE_Value* pReturnValue) {
-  CXFA_Object* pOriginalObject = ToObject(pOriginalValue);
+  CXFA_Object* pOriginalObject = ToObject(pIsolate, pOriginalValue);
   if (!pOriginalObject)
     return;
 
@@ -407,7 +417,7 @@
       XFA_GetScriptAttributeByName(pObject->GetElementType(), wsPropNameView);
   if (info.has_value()) {
     CJX_Object* jsObject = pObject->JSObject();
-    (*info.value().callback)(jsObject, pReturnValue, true,
+    (*info.value().callback)(pIsolate, jsObject, pReturnValue, true,
                              info.value().attribute);
     return;
   }
@@ -430,8 +440,8 @@
       info = XFA_GetScriptAttributeByName(pPropOrChild->GetElementType(),
                                           L"{default}");
       if (info.has_value()) {
-        pPropOrChild->JSObject()->ScriptSomDefaultValue(pReturnValue, true,
-                                                        XFA_Attribute::Unknown);
+        pPropOrChild->JSObject()->ScriptSomDefaultValue(
+            pIsolate, pReturnValue, true, XFA_Attribute::Unknown);
         return;
       }
     }
@@ -445,10 +455,11 @@
   }
 }
 
-int32_t CFXJSE_Engine::NormalPropTypeGetter(CFXJSE_Value* pOriginalValue,
+int32_t CFXJSE_Engine::NormalPropTypeGetter(v8::Isolate* pIsolate,
+                                            CFXJSE_Value* pOriginalValue,
                                             ByteStringView szPropName,
                                             bool bQueryIn) {
-  CXFA_Object* pObject = ToObject(pOriginalValue);
+  CXFA_Object* pObject = ToObject(pIsolate, pOriginalValue);
   if (!pObject)
     return FXJSE_ClassPropType_None;
 
@@ -573,20 +584,20 @@
   std::unique_ptr<CFXJSE_Value> pObject = pVariableContext->GetGlobalObject();
   auto hVariableValue = std::make_unique<CFXJSE_Value>(GetIsolate());
   if (!bGetter) {
-    pObject->SetObjectOwnProperty(szPropName, pValue);
+    pObject->SetObjectOwnProperty(GetIsolate(), szPropName, pValue);
     return true;
   }
 
-  if (!pObject->HasObjectOwnProperty(szPropName, false))
+  if (!pObject->HasObjectOwnProperty(GetIsolate(), szPropName, false))
     return false;
 
-  pObject->GetObjectProperty(szPropName, hVariableValue.get());
-  if (hVariableValue->IsFunction())
-    pValue->SetFunctionBind(hVariableValue.get(), pObject.get());
+  pObject->GetObjectProperty(GetIsolate(), szPropName, hVariableValue.get());
+  if (hVariableValue->IsFunction(GetIsolate()))
+    pValue->SetFunctionBind(GetIsolate(), hVariableValue.get(), pObject.get());
   else if (bGetter)
-    pValue->Assign(hVariableValue.get());
+    pValue->Assign(GetIsolate(), hVariableValue.get());
   else
-    hVariableValue.get()->Assign(pValue);
+    hVariableValue.get()->Assign(GetIsolate(), pValue);
   return true;
 }
 
@@ -595,8 +606,8 @@
   std::unique_ptr<CFXJSE_Value> pObject = pContext->GetGlobalObject();
   auto hProp = std::make_unique<CFXJSE_Value>(GetIsolate());
   for (const auto& obj : kObjNames) {
-    if (pObject->GetObjectProperty(obj, hProp.get()))
-      pObject->DeleteObjectProperty(obj);
+    if (pObject->GetObjectProperty(GetIsolate(), obj, hProp.get()))
+      pObject->DeleteObjectProperty(GetIsolate(), obj);
   }
 }
 
@@ -685,7 +696,7 @@
       rndFind.m_CurObject = findObjects[i++].Get();
       rndFind.m_nLevel = nLevel;
       rndFind.m_dwFlag = XFA_ResolveNodeRS::Type::kNodes;
-      if (!m_ResolveProcessor->Resolve(rndFind))
+      if (!m_ResolveProcessor->Resolve(GetIsolate(), rndFind))
         continue;
 
       if (rndFind.m_dwFlag == XFA_ResolveNodeRS::Type::kAttribute &&
@@ -695,9 +706,10 @@
         auto pValue = std::make_unique<CFXJSE_Value>(GetIsolate());
         CJX_Object* jsObject = rndFind.m_Objects.front()->JSObject();
         (*rndFind.m_ScriptAttribute.callback)(
-            jsObject, pValue.get(), false, rndFind.m_ScriptAttribute.attribute);
+            GetIsolate(), jsObject, pValue.get(), false,
+            rndFind.m_ScriptAttribute.attribute);
         if (!pValue->IsEmpty())
-          rndFind.m_Objects.front() = ToObject(pValue.get());
+          rndFind.m_Objects.front() = ToObject(GetIsolate(), pValue.get());
       }
       if (!m_upObjectArray.empty())
         m_upObjectArray.pop_back();
@@ -777,7 +789,7 @@
     return iter->second.get();
 
   auto jsValue = std::make_unique<CFXJSE_Value>(GetIsolate());
-  jsValue->SetHostObject(pCJXObject, m_pJsClass.Get());
+  jsValue->SetHostObject(GetIsolate(), pCJXObject, m_pJsClass.Get());
 
   CFXJSE_Value* pValue = jsValue.get();
   m_mapObjectToValue[pCJXObject] = std::move(jsValue);
diff --git a/fxjs/xfa/cfxjse_engine.h b/fxjs/xfa/cfxjse_engine.h
index ba3c2a8..19e5225 100644
--- a/fxjs/xfa/cfxjse_engine.h
+++ b/fxjs/xfa/cfxjse_engine.h
@@ -43,28 +43,35 @@
 class CFXJSE_Engine final : public CFX_V8 {
  public:
   static CXFA_Object* ToObject(const v8::FunctionCallbackInfo<v8::Value>& info);
-  static CXFA_Object* ToObject(v8::Local<v8::Value> value);
-  static CXFA_Object* ToObject(CFXJSE_Value* pValue);
+  static CXFA_Object* ToObject(v8::Isolate* pIsolate,
+                               v8::Local<v8::Value> value);
+  static CXFA_Object* ToObject(v8::Isolate* pIsolate, CFXJSE_Value* pValue);
   static CXFA_Object* ToObject(CFXJSE_HostObject* pHostObj);
-  static void GlobalPropertyGetter(CFXJSE_Value* pObject,
+  static void GlobalPropertyGetter(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pObject,
                                    ByteStringView szPropName,
                                    CFXJSE_Value* pValue);
-  static void GlobalPropertySetter(CFXJSE_Value* pObject,
+  static void GlobalPropertySetter(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pObject,
                                    ByteStringView szPropName,
                                    CFXJSE_Value* pValue);
-  static void NormalPropertyGetter(CFXJSE_Value* pObject,
+  static void NormalPropertyGetter(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pObject,
                                    ByteStringView szPropName,
                                    CFXJSE_Value* pValue);
-  static void NormalPropertySetter(CFXJSE_Value* pObject,
+  static void NormalPropertySetter(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pObject,
                                    ByteStringView szPropName,
                                    CFXJSE_Value* pValue);
   static CJS_Result NormalMethodCall(
       const v8::FunctionCallbackInfo<v8::Value>& info,
       const WideString& functionName);
-  static int32_t NormalPropTypeGetter(CFXJSE_Value* pObject,
+  static int32_t NormalPropTypeGetter(v8::Isolate* pIsolate,
+                                      CFXJSE_Value* pObject,
                                       ByteStringView szPropName,
                                       bool bQueryIn);
-  static int32_t GlobalPropTypeGetter(CFXJSE_Value* pObject,
+  static int32_t GlobalPropTypeGetter(v8::Isolate* pIsolate,
+                                      CFXJSE_Value* pObject,
                                       ByteStringView szPropName,
                                       bool bQueryIn);
 
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index ea79b20..0052af5 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -1319,22 +1319,26 @@
   return ByteString(strBuf);
 }
 
-void GetObjectDefaultValue(CFXJSE_Value* pValue, CFXJSE_Value* pDefaultValue) {
-  CXFA_Node* pNode = ToNode(CFXJSE_Engine::ToObject(pValue));
+void GetObjectDefaultValue(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
+                           CFXJSE_Value* pDefaultValue) {
+  CXFA_Node* pNode = ToNode(CFXJSE_Engine::ToObject(pIsolate, pValue));
   if (!pNode) {
-    pDefaultValue->SetNull();
+    pDefaultValue->SetNull(pIsolate);
     return;
   }
-  pNode->JSObject()->ScriptSomDefaultValue(pDefaultValue, false,
+  pNode->JSObject()->ScriptSomDefaultValue(pIsolate, pDefaultValue, false,
                                            XFA_Attribute::Unknown);
 }
 
-bool SetObjectDefaultValue(CFXJSE_Value* pValue, CFXJSE_Value* hNewValue) {
-  CXFA_Node* pNode = ToNode(CFXJSE_Engine::ToObject(pValue));
+bool SetObjectDefaultValue(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
+                           CFXJSE_Value* hNewValue) {
+  CXFA_Node* pNode = ToNode(CFXJSE_Engine::ToObject(pIsolate, pValue));
   if (!pNode)
     return false;
 
-  pNode->JSObject()->ScriptSomDefaultValue(hNewValue, true,
+  pNode->JSObject()->ScriptSomDefaultValue(pIsolate, hNewValue, true,
                                            XFA_Attribute::Unknown);
   return true;
 }
@@ -1362,7 +1366,7 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -1383,35 +1387,36 @@
     return;
   }
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
   uint32_t uCount = 0;
   double dSum = 0.0;
   for (int32_t i = 0; i < argc; i++) {
     auto argValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[i]);
-    if (argValue->IsNull())
+    if (argValue->IsNull(pIsolate))
       continue;
 
-    if (!argValue->IsArray()) {
+    if (!argValue->IsArray(pIsolate)) {
       dSum += ValueToDouble(pThis, argValue.get());
       uCount++;
       continue;
     }
 
     auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argValue->GetObjectProperty("length", lengthValue.get());
-    int32_t iLength = lengthValue->ToInteger();
+    argValue->GetObjectProperty(pIsolate, "length", lengthValue.get());
+    int32_t iLength = lengthValue->ToInteger(pIsolate);
 
     if (iLength > 2) {
       auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectPropertyByIdx(1, propertyValue.get());
+      argValue->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
 
       auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      if (propertyValue->IsNull()) {
+      if (propertyValue->IsNull(pIsolate)) {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
           auto defaultPropValue = std::make_unique<CFXJSE_Value>(pIsolate);
-          GetObjectDefaultValue(jsObjectValue.get(), defaultPropValue.get());
-          if (defaultPropValue->IsNull())
+          GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                                defaultPropValue.get());
+          if (defaultPropValue->IsNull(pIsolate))
             continue;
 
           dSum += ValueToDouble(pThis, defaultPropValue.get());
@@ -1419,11 +1424,12 @@
         }
       } else {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
           auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+              pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+              newPropertyValue.get());
+          if (newPropertyValue->IsNull(pIsolate))
             continue;
 
           dSum += ValueToDouble(pThis, newPropertyValue.get());
@@ -1450,7 +1456,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -1463,18 +1469,18 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   int32_t iCount = 0;
   for (int32_t i = 0; i < info.Length(); i++) {
     auto argValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[i]);
-    if (argValue->IsNull())
+    if (argValue->IsNull(pIsolate))
       continue;
 
-    if (argValue->IsArray()) {
+    if (argValue->IsArray(pIsolate)) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectProperty("length", lengthValue.get());
+      argValue->GetObjectProperty(pIsolate, "length", lengthValue.get());
 
-      int32_t iLength = lengthValue->ToInteger();
+      int32_t iLength = lengthValue->ToInteger(pIsolate);
       if (iLength <= 2) {
         pContext->ThrowArgumentMismatchException();
         return;
@@ -1483,27 +1489,29 @@
       auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectPropertyByIdx(1, propertyValue.get());
-      argValue->GetObjectPropertyByIdx(2, jsObjectValue.get());
-      if (propertyValue->IsNull()) {
+      argValue->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+      argValue->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+      if (propertyValue->IsNull(pIsolate)) {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
-          GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
-          if (!newPropertyValue->IsNull())
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
+          GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                                newPropertyValue.get());
+          if (!newPropertyValue->IsNull(pIsolate))
             iCount++;
         }
       } else {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
-          iCount += newPropertyValue->IsNull() ? 0 : 1;
+              pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+              newPropertyValue.get());
+          iCount += newPropertyValue->IsNull(pIsolate) ? 0 : 1;
         }
       }
-    } else if (argValue->IsObject()) {
+    } else if (argValue->IsObject(pIsolate)) {
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      GetObjectDefaultValue(argValue.get(), newPropertyValue.get());
-      if (!newPropertyValue->IsNull())
+      GetObjectDefaultValue(pIsolate, argValue.get(), newPropertyValue.get());
+      if (!newPropertyValue->IsNull(pIsolate))
         iCount++;
     } else {
       iCount++;
@@ -1522,7 +1530,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -1535,18 +1543,19 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   uint32_t uCount = 0;
   double dMaxValue = 0.0;
   for (int32_t i = 0; i < info.Length(); i++) {
     auto argValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[i]);
-    if (argValue->IsNull())
+    if (argValue->IsNull(info.GetIsolate()))
       continue;
 
-    if (argValue->IsArray()) {
+    if (argValue->IsArray(info.GetIsolate())) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectProperty("length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger();
+      argValue->GetObjectProperty(info.GetIsolate(), "length",
+                                  lengthValue.get());
+      int32_t iLength = lengthValue->ToInteger(info.GetIsolate());
       if (iLength <= 2) {
         pContext->ThrowArgumentMismatchException();
         return;
@@ -1555,13 +1564,14 @@
       auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectPropertyByIdx(1, propertyValue.get());
-      argValue->GetObjectPropertyByIdx(2, jsObjectValue.get());
-      if (propertyValue->IsNull()) {
+      argValue->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+      argValue->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+      if (propertyValue->IsNull(pIsolate)) {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
-          GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
+          GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                                newPropertyValue.get());
+          if (newPropertyValue->IsNull(pIsolate))
             continue;
 
           uCount++;
@@ -1570,10 +1580,11 @@
         }
       } else {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+              pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+              newPropertyValue.get());
+          if (newPropertyValue->IsNull(pIsolate))
             continue;
 
           uCount++;
@@ -1581,10 +1592,10 @@
           dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue);
         }
       }
-    } else if (argValue->IsObject()) {
+    } else if (argValue->IsObject(pIsolate)) {
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      GetObjectDefaultValue(argValue.get(), newPropertyValue.get());
-      if (newPropertyValue->IsNull())
+      GetObjectDefaultValue(pIsolate, argValue.get(), newPropertyValue.get());
+      if (newPropertyValue->IsNull(pIsolate))
         continue;
 
       uCount++;
@@ -1608,18 +1619,18 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   uint32_t uCount = 0;
   double dMinValue = 0.0;
   for (int32_t i = 0; i < info.Length(); i++) {
     auto argValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[i]);
-    if (argValue->IsNull())
+    if (argValue->IsNull(pIsolate))
       continue;
 
-    if (argValue->IsArray()) {
+    if (argValue->IsArray(pIsolate)) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectProperty("length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger();
+      argValue->GetObjectProperty(pIsolate, "length", lengthValue.get());
+      int32_t iLength = lengthValue->ToInteger(pIsolate);
       if (iLength <= 2) {
         pContext->ThrowArgumentMismatchException();
         return;
@@ -1628,13 +1639,14 @@
       auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectPropertyByIdx(1, propertyValue.get());
-      argValue->GetObjectPropertyByIdx(2, jsObjectValue.get());
-      if (propertyValue->IsNull()) {
+      argValue->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+      argValue->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+      if (propertyValue->IsNull(pIsolate)) {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
-          GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
+          GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                                newPropertyValue.get());
+          if (newPropertyValue->IsNull(pIsolate))
             continue;
 
           uCount++;
@@ -1643,10 +1655,11 @@
         }
       } else {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+              pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+              newPropertyValue.get());
+          if (newPropertyValue->IsNull(pIsolate))
             continue;
 
           uCount++;
@@ -1654,10 +1667,10 @@
           dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue);
         }
       }
-    } else if (argValue->IsObject()) {
+    } else if (argValue->IsObject(pIsolate)) {
       auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      GetObjectDefaultValue(argValue.get(), newPropertyValue.get());
-      if (newPropertyValue->IsNull())
+      GetObjectDefaultValue(pIsolate, argValue.get(), newPropertyValue.get());
+      if (newPropertyValue->IsNull(pIsolate))
         continue;
 
       uCount++;
@@ -1689,7 +1702,7 @@
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
   auto argTwo = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[1]);
-  if (argOne->IsNull() || argTwo->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate()) || argTwo->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -1724,7 +1737,7 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -1739,7 +1752,7 @@
   uint8_t uPrecision = 0;
   if (argc > 1) {
     auto argTwo = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[1]);
-    if (argTwo->IsNull()) {
+    if (argTwo->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -1769,32 +1782,35 @@
   }
 
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
   uint32_t uCount = 0;
   double dSum = 0.0;
   for (int32_t i = 0; i < argc; i++) {
     auto argValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[i]);
-    if (argValue->IsNull())
+    if (argValue->IsNull(info.GetIsolate()))
       continue;
 
-    if (argValue->IsArray()) {
-      auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectProperty("length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger();
+    if (argValue->IsArray(info.GetIsolate())) {
+      auto lengthValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+      argValue->GetObjectProperty(info.GetIsolate(), "length",
+                                  lengthValue.get());
+      int32_t iLength = lengthValue->ToInteger(info.GetIsolate());
       if (iLength <= 2) {
         pContext->ThrowArgumentMismatchException();
         return;
       }
 
-      auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectPropertyByIdx(1, propertyValue.get());
-      auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      if (propertyValue->IsNull()) {
+      auto propertyValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+      argValue->GetObjectPropertyByIdx(info.GetIsolate(), 1,
+                                       propertyValue.get());
+      auto jsObjectValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+      auto newPropertyValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+      if (propertyValue->IsNull(info.GetIsolate())) {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
-          GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+          argValue->GetObjectPropertyByIdx(info.GetIsolate(), j,
+                                           jsObjectValue.get());
+          GetObjectDefaultValue(info.GetIsolate(), jsObjectValue.get(),
+                                newPropertyValue.get());
+          if (newPropertyValue->IsNull(info.GetIsolate()))
             continue;
 
           dSum += ValueToDouble(pThis, jsObjectValue.get());
@@ -1802,20 +1818,24 @@
         }
       } else {
         for (int32_t j = 2; j < iLength; j++) {
-          argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
+          argValue->GetObjectPropertyByIdx(info.GetIsolate(), j,
+                                           jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
-          if (newPropertyValue->IsNull())
+              info.GetIsolate(),
+              propertyValue->ToString(info.GetIsolate()).AsStringView(),
+              newPropertyValue.get());
+          if (newPropertyValue->IsNull(info.GetIsolate()))
             continue;
 
           dSum += ValueToDouble(pThis, newPropertyValue.get());
           uCount++;
         }
       }
-    } else if (argValue->IsObject()) {
-      auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      GetObjectDefaultValue(argValue.get(), newPropertyValue.get());
-      if (newPropertyValue->IsNull())
+    } else if (argValue->IsObject(info.GetIsolate())) {
+      auto newPropertyValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+      GetObjectDefaultValue(info.GetIsolate(), argValue.get(),
+                            newPropertyValue.get());
+      if (newPropertyValue->IsNull(info.GetIsolate()))
         continue;
 
       dSum += ValueToDouble(pThis, argValue.get());
@@ -1863,30 +1883,30 @@
   }
 
   std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, dateValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, dateValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsDate = ValueToUTF8String(dateValue.get());
+  ByteString bsDate = ValueToUTF8String(pThis, dateValue.get());
   ByteString bsFormat;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, info, 1);
-    if (ValueIsNull(pThis, formatValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, formatValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsFormat = ValueToUTF8String(formatValue.get());
+    bsFormat = ValueToUTF8String(pThis, formatValue.get());
   }
 
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (ValueIsNull(pThis, localeValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, localeValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   ByteString bsIsoDate =
@@ -1908,7 +1928,7 @@
   int32_t iStyle = 0;
   if (argc > 0) {
     std::unique_ptr<CFXJSE_Value> infotyle = GetSimpleValue(pThis, info, 0);
-    if (infotyle->IsNull()) {
+    if (infotyle->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -1921,11 +1941,11 @@
   ByteString bsLocale;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocale = GetSimpleValue(pThis, info, 1);
-    if (argLocale->IsNull()) {
+    if (argLocale->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(argLocale.get());
+    bsLocale = ValueToUTF8String(pThis, argLocale.get());
   }
 
   ByteString bsFormat =
@@ -1943,11 +1963,11 @@
     return;
   }
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
-  ByteString bsArg = ValueToUTF8String(argOne.get());
+  ByteString bsArg = ValueToUTF8String(pThis, argOne.get());
   info.GetReturnValue().Set(DateString2Num(bsArg.AsStringView()));
 }
 
@@ -1962,14 +1982,14 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocaleMgr();
-  ByteString bsArg = ValueToUTF8String(argOne.get());
+  ByteString bsArg = ValueToUTF8String(pThis, argOne.get());
   auto pos = bsArg.Find('T', 0);
   if (!pos.has_value() || pos.value() == bsArg.GetLength() - 1) {
     info.GetReturnValue().Set(0);
@@ -2018,7 +2038,7 @@
   int32_t iStyle = 0;
   if (argc > 0) {
     std::unique_ptr<CFXJSE_Value> infotyle = GetSimpleValue(pThis, info, 0);
-    if (infotyle->IsNull()) {
+    if (infotyle->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -2030,11 +2050,11 @@
   ByteString bsLocale;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocale = GetSimpleValue(pThis, info, 1);
-    if (argLocale->IsNull()) {
+    if (argLocale->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(argLocale.get());
+    bsLocale = ValueToUTF8String(pThis, argLocale.get());
   }
 
   ByteString bsFormat =
@@ -2056,7 +2076,7 @@
   int32_t iStyle = 0;
   if (argc > 0) {
     std::unique_ptr<CFXJSE_Value> infotyle = GetSimpleValue(pThis, info, 0);
-    if (infotyle->IsNull()) {
+    if (infotyle->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -2068,11 +2088,11 @@
   ByteString bsLocale;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocale = GetSimpleValue(pThis, info, 1);
-    if (argLocale->IsNull()) {
+    if (argLocale->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(argLocale.get());
+    bsLocale = ValueToUTF8String(pThis, argLocale.get());
   }
 
   ByteString bsFormat =
@@ -2092,7 +2112,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, dateValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, dateValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2105,21 +2125,21 @@
   ByteString bsFormat;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, info, 1);
-    if (ValueIsNull(pThis, formatValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, formatValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsFormat = ValueToUTF8String(formatValue.get());
+    bsFormat = ValueToUTF8String(pThis, formatValue.get());
   }
 
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (ValueIsNull(pThis, localeValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, localeValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   int32_t iYear = 1900;
@@ -2233,7 +2253,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, info, 0);
-  if (timeValue->IsNull()) {
+  if (timeValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2246,21 +2266,21 @@
   ByteString bsFormat;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, info, 1);
-    if (formatValue->IsNull()) {
+    if (formatValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsFormat = ValueToUTF8String(formatValue.get());
+    bsFormat = ValueToUTF8String(pThis, formatValue.get());
   }
 
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (localeValue->IsNull()) {
+    if (localeValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   ByteString bsGMTTime = Num2AllTime(pThis, iTime, bsFormat.AsStringView(),
@@ -2280,7 +2300,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, info, 0);
-  if (timeValue->IsNull()) {
+  if (timeValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2293,21 +2313,21 @@
   ByteString bsFormat;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, info, 1);
-    if (formatValue->IsNull()) {
+    if (formatValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsFormat = ValueToUTF8String(formatValue.get());
+    bsFormat = ValueToUTF8String(pThis, formatValue.get());
   }
 
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (localeValue->IsNull()) {
+    if (localeValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   ByteString bsLocalTime =
@@ -2345,30 +2365,30 @@
 
   ByteString bsTime;
   std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, timeValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, timeValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
-  bsTime = ValueToUTF8String(timeValue.get());
+  bsTime = ValueToUTF8String(pThis, timeValue.get());
 
   ByteString bsFormat;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, info, 1);
-    if (ValueIsNull(pThis, formatValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, formatValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsFormat = ValueToUTF8String(formatValue.get());
+    bsFormat = ValueToUTF8String(pThis, formatValue.get());
   }
 
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (ValueIsNull(pThis, localeValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, localeValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   CXFA_Document* pDoc = ToFormCalcContext(pThis)->GetDocument();
@@ -2431,7 +2451,7 @@
   int32_t iStyle = 0;
   if (argc > 0) {
     std::unique_ptr<CFXJSE_Value> infotyle = GetSimpleValue(pThis, info, 0);
-    if (infotyle->IsNull()) {
+    if (infotyle->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -2443,11 +2463,11 @@
   ByteString bsLocale;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocale = GetSimpleValue(pThis, info, 1);
-    if (argLocale->IsNull()) {
+    if (argLocale->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(argLocale.get());
+    bsLocale = ValueToUTF8String(pThis, argLocale.get());
   }
 
   ByteString bsFormat =
@@ -2607,8 +2627,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2660,8 +2681,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2691,8 +2713,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2734,9 +2757,11 @@
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
   std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, info, 3);
   std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, info, 4);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) ||
-      ValueIsNull(pThis, argFive.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argFour.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argFive.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2788,7 +2813,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argValue.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argValue.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2802,7 +2827,7 @@
   std::vector<double> data;
   for (int32_t i = 1; i < argc; i++) {
     argValue = GetSimpleValue(pThis, info, i);
-    if (ValueIsNull(pThis, argValue.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, argValue.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -2832,8 +2857,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2869,9 +2895,11 @@
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
   std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, info, 3);
   std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, info, 4);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) ||
-      ValueIsNull(pThis, argFive.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argFour.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argFive.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2925,8 +2953,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2960,8 +2989,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -2991,8 +3021,9 @@
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) ||
-      ValueIsNull(pThis, argThree.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argThree.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -3021,7 +3052,7 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -3036,14 +3067,15 @@
   bool bStopCounterFlags = false;
   int32_t iArgIndex = 1;
   int32_t iValueIndex = 0;
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) {
     auto argIndexValue =
         std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[iArgIndex]);
-    if (argIndexValue->IsArray()) {
+    if (argIndexValue->IsArray(info.GetIsolate())) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argIndexValue->GetObjectProperty("length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger();
+      argIndexValue->GetObjectProperty(info.GetIsolate(), "length",
+                                       lengthValue.get());
+      int32_t iLength = lengthValue->ToInteger(info.GetIsolate());
       if (iLength > 3)
         bStopCounterFlags = true;
 
@@ -3052,16 +3084,21 @@
         auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
         auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
         auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-        argIndexValue->GetObjectPropertyByIdx(1, propertyValue.get());
+        argIndexValue->GetObjectPropertyByIdx(info.GetIsolate(), 1,
+                                              propertyValue.get());
         argIndexValue->GetObjectPropertyByIdx(
-            (iLength - 1) - (iValueIndex - iIndex), jsObjectValue.get());
-        if (propertyValue->IsNull()) {
-          GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
+            info.GetIsolate(), (iLength - 1) - (iValueIndex - iIndex),
+            jsObjectValue.get());
+        if (propertyValue->IsNull(info.GetIsolate())) {
+          GetObjectDefaultValue(info.GetIsolate(), jsObjectValue.get(),
+                                newPropertyValue.get());
         } else {
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), newPropertyValue.get());
+              info.GetIsolate(),
+              propertyValue->ToString(info.GetIsolate()).AsStringView(),
+              newPropertyValue.get());
         }
-        ByteString bsChosen = ValueToUTF8String(newPropertyValue.get());
+        ByteString bsChosen = ValueToUTF8String(pThis, newPropertyValue.get());
         info.GetReturnValue().Set(
             fxv8::NewStringHelper(info.GetIsolate(), bsChosen.AsStringView()));
         bFound = true;
@@ -3069,7 +3106,7 @@
     } else {
       iValueIndex++;
       if (iValueIndex == iIndex) {
-        ByteString bsChosen = ValueToUTF8String(argIndexValue.get());
+        ByteString bsChosen = ValueToUTF8String(pThis, argIndexValue.get());
         info.GetReturnValue().Set(
             fxv8::NewStringHelper(info.GetIsolate(), bsChosen.AsStringView()));
         bFound = true;
@@ -3090,7 +3127,8 @@
     return;
   }
   auto temp = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  info.GetReturnValue().Set(static_cast<int>(temp->IsObject()));
+  info.GetReturnValue().Set(
+      static_cast<int>(temp->IsObject(info.GetIsolate())));
 }
 
 // static
@@ -3103,13 +3141,14 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (!argOne->IsString()) {
+  if (!argOne->IsString(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argOne->IsNumber() || argOne->IsBoolean()));
+        static_cast<int>(argOne->IsNumber(info.GetIsolate()) ||
+                         argOne->IsBoolean(info.GetIsolate())));
     return;
   }
 
-  ByteString bsValue = argOne->ToString();
+  ByteString bsValue = argOne->ToString(info.GetIsolate());
   bsValue.TrimLeft();
   info.GetReturnValue().Set(static_cast<int>(!bsValue.IsEmpty()));
 }
@@ -3143,14 +3182,14 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetUndefined();
     return;
   }
 
   std::unique_ptr<CFXJSE_Value> argLow = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> argHigh = GetSimpleValue(pThis, info, 2);
-  if (argOne->IsNumber()) {
+  if (argOne->IsNumber(info.GetIsolate())) {
     float oneNumber = ValueToFloat(pThis, argOne.get());
     float lowNumber = ValueToFloat(pThis, argLow.get());
     float heightNumber = ValueToFloat(pThis, argHigh.get());
@@ -3159,9 +3198,9 @@
     return;
   }
 
-  ByteString bsOne = ValueToUTF8String(argOne.get());
-  ByteString bsLow = ValueToUTF8String(argLow.get());
-  ByteString bsHeight = ValueToUTF8String(argHigh.get());
+  ByteString bsOne = ValueToUTF8String(pThis, argOne.get());
+  ByteString bsLow = ValueToUTF8String(pThis, argLow.get());
+  ByteString bsHeight = ValueToUTF8String(pThis, argHigh.get());
   info.GetReturnValue().Set(
       static_cast<int>((bsOne.Compare(bsLow.AsStringView()) >= 0) &&
                        (bsOne.Compare(bsHeight.AsStringView()) <= 0)));
@@ -3177,7 +3216,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> value =
-      GetSimpleValue(pThis, info, 0)->ToBoolean()
+      GetSimpleValue(pThis, info, 0)->ToBoolean(info.GetIsolate())
           ? GetSimpleValue(pThis, info, 1)
           : GetSimpleValue(pThis, info, 2);
 
@@ -3194,9 +3233,9 @@
     return;
   }
 
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   std::unique_ptr<CFXJSE_Value> scriptValue = GetSimpleValue(pThis, info, 0);
-  ByteString bsUtf8Script = ValueToUTF8String(scriptValue.get());
+  ByteString bsUtf8Script = ValueToUTF8String(pThis, scriptValue.get());
   if (bsUtf8Script.IsEmpty()) {
     info.GetReturnValue().SetNull();
     return;
@@ -3226,20 +3265,26 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   if (info.Length() != 1) {
     pContext->ThrowParamCountMismatchException(L"Ref");
     return;
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (!argOne->IsArray() && !argOne->IsObject() && !argOne->IsBoolean() &&
-      !argOne->IsString() && !argOne->IsNull() && !argOne->IsNumber()) {
+  if (!argOne->IsArray(info.GetIsolate()) &&
+      !argOne->IsObject(info.GetIsolate()) &&
+      !argOne->IsBoolean(info.GetIsolate()) &&
+      !argOne->IsString(info.GetIsolate()) &&
+      !argOne->IsNull(info.GetIsolate()) &&
+      !argOne->IsNumber(info.GetIsolate())) {
     pContext->ThrowArgumentMismatchException();
     return;
   }
 
-  if (argOne->IsBoolean() || argOne->IsString() || argOne->IsNumber()) {
+  if (argOne->IsBoolean(info.GetIsolate()) ||
+      argOne->IsString(info.GetIsolate()) ||
+      argOne->IsNumber(info.GetIsolate())) {
     info.GetReturnValue().Set(argOne->DirectGetValue());
     return;
   }
@@ -3249,36 +3294,37 @@
     values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
 
   int intVal = 3;
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     // TODO(dsinclair): Why is this 4 when the others are all 3?
     intVal = 4;
-    values[2]->SetNull();
-  } else if (argOne->IsArray()) {
+    values[2]->SetNull(info.GetIsolate());
+  } else if (argOne->IsArray(info.GetIsolate())) {
 #ifndef NDEBUG
     auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argOne->GetObjectProperty("length", lengthValue.get());
-    ASSERT(lengthValue->ToInteger() >= 3);
+    argOne->GetObjectProperty(info.GetIsolate(), "length", lengthValue.get());
+    ASSERT(lengthValue->ToInteger(info.GetIsolate()) >= 3);
 #endif
 
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argOne->GetObjectPropertyByIdx(1, propertyValue.get());
-    argOne->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (!propertyValue->IsNull() || jsObjectValue->IsNull()) {
+    argOne->GetObjectPropertyByIdx(info.GetIsolate(), 1, propertyValue.get());
+    argOne->GetObjectPropertyByIdx(info.GetIsolate(), 2, jsObjectValue.get());
+    if (!propertyValue->IsNull(info.GetIsolate()) ||
+        jsObjectValue->IsNull(info.GetIsolate())) {
       pContext->ThrowArgumentMismatchException();
       return;
     }
 
-    values[2]->Assign(jsObjectValue.get());
-  } else if (argOne->IsObject()) {
-    values[2]->Assign(argOne.get());
+    values[2]->Assign(info.GetIsolate(), jsObjectValue.get());
+  } else if (argOne->IsObject(info.GetIsolate())) {
+    values[2]->Assign(info.GetIsolate(), argOne.get());
   }
 
-  values[0]->SetInteger(intVal);
-  values[1]->SetNull();
+  values[0]->SetInteger(info.GetIsolate(), intVal);
+  values[1]->SetNull(info.GetIsolate());
 
   auto temp = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  temp->SetArray(values);
+  temp->SetArray(info.GetIsolate(), values);
   info.GetReturnValue().Set(temp->DirectGetValue());
 }
 
@@ -3292,12 +3338,12 @@
   }
 
   std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, info, 0);
-  if (unitspanValue->IsNull()) {
+  if (unitspanValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsUnitspan = ValueToUTF8String(unitspanValue.get());
+  ByteString bsUnitspan = ValueToUTF8String(pThis, unitspanValue.get());
   if (bsUnitspan.IsEmpty()) {
     info.GetReturnValue().SetEmptyString();
     return;
@@ -3400,12 +3446,12 @@
   }
 
   std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, info, 0);
-  if (unitspanValue->IsNull()) {
+  if (unitspanValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsUnitspan = ValueToUTF8String(unitspanValue.get());
+  ByteString bsUnitspan = ValueToUTF8String(pThis, unitspanValue.get());
   const char* pData = bsUnitspan.c_str();
   if (!pData) {
     info.GetReturnValue().Set(0);
@@ -3441,7 +3487,7 @@
   ByteString bsUnit;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> unitValue = GetSimpleValue(pThis, info, 1);
-    ByteString bsUnitTemp = ValueToUTF8String(unitValue.get());
+    ByteString bsUnitTemp = ValueToUTF8String(pThis, unitValue.get());
     const char* pChar = bsUnitTemp.c_str();
     size_t uVal = 0;
     while (IsWhitespace(pChar[uVal]))
@@ -3539,18 +3585,19 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString stringTwo = ValueToUTF8String(argTwo.get());
+  ByteString stringTwo = ValueToUTF8String(pThis, argTwo.get());
   if (stringTwo.IsEmpty()) {
     info.GetReturnValue().Set(1);
     return;
   }
 
-  ByteString stringOne = ValueToUTF8String(argOne.get());
+  ByteString stringOne = ValueToUTF8String(pThis, argOne.get());
   auto pos = stringOne.Find(stringTwo.AsStringView());
   info.GetReturnValue().Set(
       static_cast<int>(pos.has_value() ? pos.value() + 1 : 0));
@@ -3570,11 +3617,11 @@
   bool bAllNull = true;
   for (int32_t i = 0; i < argc; i++) {
     std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, info, i);
-    if (ValueIsNull(pThis, value.get()))
+    if (ValueIsNull(info.GetIsolate(), pThis, value.get()))
       continue;
 
     bAllNull = false;
-    bsResult += ValueToUTF8String(value.get());
+    bsResult += ValueToUTF8String(pThis, value.get());
   }
 
   if (bAllNull) {
@@ -3597,13 +3644,13 @@
 
   if (argc == 1) {
     std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-    if (ValueIsNull(pThis, argOne.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
 
-    WideString decoded = DecodeURL(
-        WideString::FromUTF8(ValueToUTF8String(argOne.get()).AsStringView()));
+    WideString decoded = DecodeURL(WideString::FromUTF8(
+        ValueToUTF8String(pThis, argOne.get()).AsStringView()));
     auto result = FX_UTF8Encode(decoded.AsStringView());
     info.GetReturnValue().Set(
         fxv8::NewStringHelper(info.GetIsolate(), result.AsStringView()));
@@ -3612,13 +3659,14 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsToDecode = ValueToUTF8String(argOne.get());
-  ByteString bsIdentify = ValueToUTF8String(argTwo.get());
+  ByteString bsToDecode = ValueToUTF8String(pThis, argOne.get());
+  ByteString bsIdentify = ValueToUTF8String(pThis, argTwo.get());
   WideString decoded;
 
   WideString wsToDecode = WideString::FromUTF8(bsToDecode.AsStringView());
@@ -3647,11 +3695,11 @@
 
   if (argc == 1) {
     std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-    if (ValueIsNull(pThis, argOne.get())) {
+    if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    WideString encoded = EncodeURL(ValueToUTF8String(argOne.get()));
+    WideString encoded = EncodeURL(ValueToUTF8String(pThis, argOne.get()));
     auto result = FX_UTF8Encode(encoded.AsStringView());
     info.GetReturnValue().Set(
         fxv8::NewStringHelper(info.GetIsolate(), result.AsStringView()));
@@ -3660,13 +3708,14 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, argTwo.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsToEncode = ValueToUTF8String(argOne.get());
-  ByteString bsIdentify = ValueToUTF8String(argTwo.get());
+  ByteString bsToEncode = ValueToUTF8String(pThis, argOne.get());
+  ByteString bsIdentify = ValueToUTF8String(pThis, argTwo.get());
   WideString encoded;
   if (bsIdentify.EqualNoCase("html"))
     encoded = EncodeHTML(bsToEncode);
@@ -3691,10 +3740,10 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  ByteString bsPattern = ValueToUTF8String(argOne.get());
+  ByteString bsPattern = ValueToUTF8String(pThis, argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  ByteString bsValue = ValueToUTF8String(argTwo.get());
+  ByteString bsValue = ValueToUTF8String(pThis, argTwo.get());
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocaleMgr();
@@ -3771,13 +3820,13 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if ((ValueIsNull(pThis, argOne.get())) ||
-      (ValueIsNull(pThis, argTwo.get()))) {
+  if ((ValueIsNull(info.GetIsolate(), pThis, argOne.get())) ||
+      (ValueIsNull(info.GetIsolate(), pThis, argTwo.get()))) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(argOne.get());
+  ByteString bsSource = ValueToUTF8String(pThis, argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
   info.GetReturnValue().Set(fxv8::NewStringHelper(
       info.GetIsolate(), bsSource.First(count).AsStringView()));
@@ -3793,12 +3842,12 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(argOne.get());
+  ByteString bsSource = ValueToUTF8String(pThis, argOne.get());
   info.GetReturnValue().Set(static_cast<int>(bsSource.GetLength()));
 }
 
@@ -3813,13 +3862,13 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
   CFX_WideTextBuf szLowBuf;
-  ByteString bsArg = ValueToUTF8String(argOne.get());
+  ByteString bsArg = ValueToUTF8String(pThis, argOne.get());
   WideString wsArg = WideString::FromUTF8(bsArg.AsStringView());
   for (wchar_t ch : wsArg) {
     if ((ch >= 0x41 && ch <= 0x5A) || (ch >= 0xC0 && ch <= 0xDE))
@@ -3843,12 +3892,12 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(argOne.get());
+  ByteString bsSource = ValueToUTF8String(pThis, argOne.get());
   bsSource.TrimLeft();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
@@ -3866,13 +3915,13 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if (ValueIsNull(pThis, argTwo.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argTwo.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsPattern = ValueToUTF8String(argOne.get());
-  ByteString bsValue = ValueToUTF8String(argTwo.get());
+  ByteString bsPattern = ValueToUTF8String(pThis, argOne.get());
+  ByteString bsValue = ValueToUTF8String(pThis, argTwo.get());
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocaleMgr();
   CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
@@ -4012,15 +4061,16 @@
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
   ByteString bsOne;
   ByteString bsTwo;
-  if (!ValueIsNull(pThis, argOne.get()) && !ValueIsNull(pThis, argTwo.get())) {
-    bsOne = ValueToUTF8String(argOne.get());
-    bsTwo = ValueToUTF8String(argTwo.get());
+  if (!ValueIsNull(info.GetIsolate(), pThis, argOne.get()) &&
+      !ValueIsNull(info.GetIsolate(), pThis, argTwo.get())) {
+    bsOne = ValueToUTF8String(pThis, argOne.get());
+    bsTwo = ValueToUTF8String(pThis, argTwo.get());
   }
 
   ByteString bsThree;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-    bsThree = ValueToUTF8String(argThree.get());
+    bsThree = ValueToUTF8String(pThis, argThree.get());
   }
 
   bsOne.Replace(bsTwo.AsStringView(), bsThree.AsStringView());
@@ -4039,13 +4089,13 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  if ((ValueIsNull(pThis, argOne.get())) ||
-      (ValueIsNull(pThis, argTwo.get()))) {
+  if ((ValueIsNull(info.GetIsolate(), pThis, argOne.get())) ||
+      (ValueIsNull(info.GetIsolate(), pThis, argTwo.get()))) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(argOne.get());
+  ByteString bsSource = ValueToUTF8String(pThis, argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
   info.GetReturnValue().Set(fxv8::NewStringHelper(
       info.GetIsolate(), bsSource.Last(count).AsStringView()));
@@ -4061,12 +4111,12 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(argOne.get());
+  ByteString bsSource = ValueToUTF8String(pThis, argOne.get());
   bsSource.TrimRight();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
@@ -4082,7 +4132,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4110,7 +4160,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> numberValue = GetSimpleValue(pThis, info, 0);
-  if (numberValue->IsNull()) {
+  if (numberValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4235,9 +4285,10 @@
   std::unique_ptr<CFXJSE_Value> sourceValue = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> startValue = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> deleteValue = GetSimpleValue(pThis, info, 2);
-  if (!sourceValue->IsNull() && !startValue->IsNull() &&
-      !deleteValue->IsNull()) {
-    bsSource = ValueToUTF8String(sourceValue.get());
+  if (!sourceValue->IsNull(info.GetIsolate()) &&
+      !startValue->IsNull(info.GetIsolate()) &&
+      !deleteValue->IsNull(info.GetIsolate())) {
+    bsSource = ValueToUTF8String(pThis, sourceValue.get());
     iLength = bsSource.GetLength();
     iStart = pdfium::clamp(
         static_cast<int32_t>(ValueToFloat(pThis, startValue.get())), 1,
@@ -4248,7 +4299,7 @@
 
   if (argc > 3) {
     std::unique_ptr<CFXJSE_Value> insertValue = GetSimpleValue(pThis, info, 3);
-    bsInsert = ValueToUTF8String(insertValue.get());
+    bsInsert = ValueToUTF8String(pThis, insertValue.get());
   }
 
   --iStart;
@@ -4281,14 +4332,14 @@
   std::unique_ptr<CFXJSE_Value> string_value = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> start_value = GetSimpleValue(pThis, info, 1);
   std::unique_ptr<CFXJSE_Value> end_value = GetSimpleValue(pThis, info, 2);
-  if (ValueIsNull(pThis, string_value.get()) ||
-      ValueIsNull(pThis, start_value.get()) ||
-      ValueIsNull(pThis, end_value.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, string_value.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, start_value.get()) ||
+      ValueIsNull(info.GetIsolate(), pThis, end_value.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
-  ByteString bsSource = ValueToUTF8String(string_value.get());
+  ByteString bsSource = ValueToUTF8String(pThis, string_value.get());
   size_t iLength = bsSource.GetLength();
   if (iLength == 0) {
     info.GetReturnValue().SetEmptyString();
@@ -4340,13 +4391,13 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (ValueIsNull(pThis, argOne.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argOne.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
 
   CFX_WideTextBuf upperStringBuf;
-  ByteString bsArg = ValueToUTF8String(argOne.get());
+  ByteString bsArg = ValueToUTF8String(pThis, argOne.get());
   WideString wsArg = WideString::FromUTF8(bsArg.AsStringView());
   const wchar_t* pData = wsArg.c_str();
   size_t i = 0;
@@ -4376,7 +4427,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> numberValue = GetSimpleValue(pThis, info, 0);
-  if (numberValue->IsNull()) {
+  if (numberValue->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4386,7 +4437,7 @@
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> identifierValue =
         GetSimpleValue(pThis, info, 1);
-    if (identifierValue->IsNull()) {
+    if (identifierValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
@@ -4397,11 +4448,11 @@
   ByteString bsLocale;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, info, 2);
-    if (localeValue->IsNull()) {
+    if (localeValue->IsNull(info.GetIsolate())) {
       info.GetReturnValue().SetNull();
       return;
     }
-    bsLocale = ValueToUTF8String(localeValue.get());
+    bsLocale = ValueToUTF8String(pThis, localeValue.get());
   }
 
   if (std::isnan(fNumber) || fNumber < 0.0f ||
@@ -4434,7 +4485,7 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  ByteString bsUrl = ValueToUTF8String(argOne.get());
+  ByteString bsUrl = ValueToUTF8String(pThis, argOne.get());
   RetainPtr<IFX_SeekableReadStream> pFile =
       pAppProvider->DownloadURL(WideString::FromUTF8(bsUrl.AsStringView()));
   if (!pFile)
@@ -4467,27 +4518,27 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  ByteString bsURL = ValueToUTF8String(argOne.get());
+  ByteString bsURL = ValueToUTF8String(pThis, argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  ByteString bsData = ValueToUTF8String(argTwo.get());
+  ByteString bsData = ValueToUTF8String(pThis, argTwo.get());
 
   ByteString bsContentType;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-    bsContentType = ValueToUTF8String(argThree.get());
+    bsContentType = ValueToUTF8String(pThis, argThree.get());
   }
 
   ByteString bsEncode;
   if (argc > 3) {
     std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, info, 3);
-    bsEncode = ValueToUTF8String(argFour.get());
+    bsEncode = ValueToUTF8String(pThis, argFour.get());
   }
 
   ByteString bsHeader;
   if (argc > 4) {
     std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, info, 4);
-    bsHeader = ValueToUTF8String(argFive.get());
+    bsHeader = ValueToUTF8String(pThis, argFive.get());
   }
 
   WideString decodedResponse;
@@ -4524,15 +4575,15 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  ByteString bsURL = ValueToUTF8String(argOne.get());
+  ByteString bsURL = ValueToUTF8String(pThis, argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, info, 1);
-  ByteString bsData = ValueToUTF8String(argTwo.get());
+  ByteString bsData = ValueToUTF8String(pThis, argTwo.get());
 
   ByteString bsEncode;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, info, 2);
-    bsEncode = ValueToUTF8String(argThree.get());
+    bsEncode = ValueToUTF8String(pThis, argThree.get());
   }
   if (!pAppProvider->PutRequestURL(
           WideString::FromUTF8(bsURL.AsStringView()),
@@ -4556,31 +4607,35 @@
   ByteStringView bsFuncName("asgn_val_op");
   auto lValue = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
   std::unique_ptr<CFXJSE_Value> rValue = GetSimpleValue(pThis, info, 1);
-  if (lValue->IsArray()) {
-    v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  if (lValue->IsArray(info.GetIsolate())) {
+    v8::Isolate* pIsolate = pContext->GetIsolate();
     auto leftLengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    lValue->GetObjectProperty("length", leftLengthValue.get());
-    int32_t iLeftLength = leftLengthValue->ToInteger();
+    lValue->GetObjectProperty(info.GetIsolate(), "length",
+                              leftLengthValue.get());
+    int32_t iLeftLength = leftLengthValue->ToInteger(info.GetIsolate());
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    lValue->GetObjectPropertyByIdx(1, propertyValue.get());
-    if (propertyValue->IsNull()) {
+    lValue->GetObjectPropertyByIdx(info.GetIsolate(), 1, propertyValue.get());
+    if (propertyValue->IsNull(info.GetIsolate())) {
       for (int32_t i = 2; i < iLeftLength; i++) {
-        lValue->GetObjectPropertyByIdx(i, jsObjectValue.get());
-        if (!SetObjectDefaultValue(jsObjectValue.get(), rValue.get())) {
+        lValue->GetObjectPropertyByIdx(info.GetIsolate(), i,
+                                       jsObjectValue.get());
+        if (!SetObjectDefaultValue(info.GetIsolate(), jsObjectValue.get(),
+                                   rValue.get())) {
           pContext->ThrowNoDefaultPropertyException(bsFuncName);
           return;
         }
       }
     } else {
       for (int32_t i = 2; i < iLeftLength; i++) {
-        lValue->GetObjectPropertyByIdx(i, jsObjectValue.get());
+        lValue->GetObjectPropertyByIdx(pIsolate, i, jsObjectValue.get());
         jsObjectValue->SetObjectProperty(
-            propertyValue->ToString().AsStringView(), rValue.get());
+            info.GetIsolate(), propertyValue->ToString(pIsolate).AsStringView(),
+            rValue.get());
       }
     }
-  } else if (lValue->IsObject()) {
-    if (!SetObjectDefaultValue(lValue.get(), rValue.get())) {
+  } else if (lValue->IsObject(info.GetIsolate())) {
+    if (!SetObjectDefaultValue(info.GetIsolate(), lValue.get(), rValue.get())) {
       pContext->ThrowNoDefaultPropertyException(bsFuncName);
       return;
     }
@@ -4599,7 +4654,8 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> infoecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() && infoecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) &&
+      infoecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4620,7 +4676,8 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> infoecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() && infoecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) &&
+      infoecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4646,15 +4703,19 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> infoecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || infoecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      infoecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argFirst->IsNull() && infoecond->IsNull()));
+        static_cast<int>(argFirst->IsNull(info.GetIsolate()) &&
+                         infoecond->IsNull(info.GetIsolate())));
     return;
   }
 
-  if (argFirst->IsString() && infoecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      infoecond->IsString(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argFirst->ToString() == infoecond->ToString()));
+        static_cast<int>(argFirst->ToString(info.GetIsolate()) ==
+                         infoecond->ToString(info.GetIsolate())));
     return;
   }
 
@@ -4679,15 +4740,19 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> infoecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || infoecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      infoecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(!argFirst->IsNull() || !infoecond->IsNull()));
+        static_cast<int>(!argFirst->IsNull(info.GetIsolate()) ||
+                         !infoecond->IsNull(info.GetIsolate())));
     return;
   }
 
-  if (argFirst->IsString() && infoecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      infoecond->IsString(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argFirst->ToString() != infoecond->ToString()));
+        static_cast<int>(argFirst->ToString(info.GetIsolate()) !=
+                         infoecond->ToString(info.GetIsolate())));
     return;
   }
 
@@ -4702,25 +4767,29 @@
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   auto argFirst = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
   auto argSecond = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[1]);
-  if (!argFirst->IsArray() || !argSecond->IsArray())
+  if (!argFirst->IsArray(info.GetIsolate()) ||
+      !argSecond->IsArray(info.GetIsolate()))
     return false;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
-  auto firstFlagValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  auto secondFlagValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  argFirst->GetObjectPropertyByIdx(0, firstFlagValue.get());
-  argSecond->GetObjectPropertyByIdx(0, secondFlagValue.get());
-  if (firstFlagValue->ToInteger() != 3 || secondFlagValue->ToInteger() != 3)
+  auto firstFlagValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+  auto secondFlagValue = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+  argFirst->GetObjectPropertyByIdx(info.GetIsolate(), 0, firstFlagValue.get());
+  argSecond->GetObjectPropertyByIdx(info.GetIsolate(), 0,
+                                    secondFlagValue.get());
+  if (firstFlagValue->ToInteger(info.GetIsolate()) != 3 ||
+      secondFlagValue->ToInteger(info.GetIsolate()) != 3)
     return false;
 
-  auto firstJSObject = std::make_unique<CFXJSE_Value>(pIsolate);
-  auto secondJSObject = std::make_unique<CFXJSE_Value>(pIsolate);
-  argFirst->GetObjectPropertyByIdx(2, firstJSObject.get());
-  argSecond->GetObjectPropertyByIdx(2, secondJSObject.get());
-  if (firstJSObject->IsNull() || secondJSObject->IsNull())
+  auto firstJSObject = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+  auto secondJSObject = std::make_unique<CFXJSE_Value>(info.GetIsolate());
+  argFirst->GetObjectPropertyByIdx(info.GetIsolate(), 2, firstJSObject.get());
+  argSecond->GetObjectPropertyByIdx(info.GetIsolate(), 2, secondJSObject.get());
+  if (firstJSObject->IsNull(info.GetIsolate()) ||
+      secondJSObject->IsNull(info.GetIsolate()))
     return false;
 
-  return firstJSObject->ToHostObject() == secondJSObject->ToHostObject();
+  return firstJSObject->ToHostObject(info.GetIsolate()) ==
+         secondJSObject->ToHostObject(info.GetIsolate());
 }
 
 // static
@@ -4734,14 +4803,17 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(0);
     return;
   }
 
-  if (argFirst->IsString() && argSecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      argSecond->IsString(info.GetIsolate())) {
     int result =
-        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) < 0;
+        argFirst->ToString(info.GetIsolate())
+            .Compare(argSecond->ToString(info.GetIsolate()).AsStringView()) < 0;
     info.GetReturnValue().Set(result);
     return;
   }
@@ -4762,15 +4834,20 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argFirst->IsNull() && argSecond->IsNull()));
+        static_cast<int>(argFirst->IsNull(info.GetIsolate()) &&
+                         argSecond->IsNull(info.GetIsolate())));
     return;
   }
 
-  if (argFirst->IsString() && argSecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      argSecond->IsString(info.GetIsolate())) {
     int result =
-        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) <= 0;
+        argFirst->ToString(info.GetIsolate())
+            .Compare(argSecond->ToString(info.GetIsolate()).AsStringView()) <=
+        0;
     info.GetReturnValue().Set(result);
     return;
   }
@@ -4791,14 +4868,17 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(0);
     return;
   }
 
-  if (argFirst->IsString() && argSecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      argSecond->IsString(info.GetIsolate())) {
     int result =
-        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) > 0;
+        argFirst->ToString(info.GetIsolate())
+            .Compare(argSecond->ToString(info.GetIsolate()).AsStringView()) > 0;
     info.GetReturnValue().Set(result);
     return;
   }
@@ -4819,15 +4899,20 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() || argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) ||
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().Set(
-        static_cast<int>(argFirst->IsNull() && argSecond->IsNull()));
+        static_cast<int>(argFirst->IsNull(info.GetIsolate()) &&
+                         argSecond->IsNull(info.GetIsolate())));
     return;
   }
 
-  if (argFirst->IsString() && argSecond->IsString()) {
+  if (argFirst->IsString(info.GetIsolate()) &&
+      argSecond->IsString(info.GetIsolate())) {
     int result =
-        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) >= 0;
+        argFirst->ToString(info.GetIsolate())
+            .Compare(argSecond->ToString(info.GetIsolate()).AsStringView()) >=
+        0;
     info.GetReturnValue().Set(result);
     return;
   }
@@ -4848,8 +4933,8 @@
 
   auto argFirst = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
   auto argSecond = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[1]);
-  if (ValueIsNull(pThis, argFirst.get()) &&
-      ValueIsNull(pThis, argSecond.get())) {
+  if (ValueIsNull(info.GetIsolate(), pThis, argFirst.get()) &&
+      ValueIsNull(info.GetIsolate(), pThis, argSecond.get())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4870,7 +4955,8 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() && argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) &&
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4891,7 +4977,8 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() && argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) &&
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4913,7 +5000,8 @@
 
   std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, info, 0);
   std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, info, 1);
-  if (argFirst->IsNull() && argSecond->IsNull()) {
+  if (argFirst->IsNull(info.GetIsolate()) &&
+      argSecond->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4938,7 +5026,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4955,7 +5043,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -4972,7 +5060,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  if (argOne->IsNull()) {
+  if (argOne->IsNull(info.GetIsolate())) {
     info.GetReturnValue().SetNull();
     return;
   }
@@ -5006,7 +5094,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, info, 0);
-  ByteString bsArg = ValueToUTF8String(argOne.get());
+  ByteString bsArg = ValueToUTF8String(pThis, argOne.get());
   if (bsArg.IsEmpty()) {
     pContext->ThrowArgumentMismatchException();
     return;
@@ -5034,7 +5122,7 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  info.GetReturnValue().Set(argOne->IsObject());
+  info.GetReturnValue().Set(argOne->IsObject(info.GetIsolate()));
 }
 
 // static
@@ -5047,7 +5135,7 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  info.GetReturnValue().Set(argOne->IsArray());
+  info.GetReturnValue().Set(argOne->IsArray(info.GetIsolate()));
 }
 
 // static
@@ -5061,29 +5149,32 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (argOne->IsArray()) {
-    v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  if (argOne->IsArray(info.GetIsolate())) {
+    v8::Isolate* pIsolate = pContext->GetIsolate();
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argOne->GetObjectPropertyByIdx(1, propertyValue.get());
-    argOne->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
+    argOne->GetObjectPropertyByIdx(info.GetIsolate(), 1, propertyValue.get());
+    argOne->GetObjectPropertyByIdx(info.GetIsolate(), 2, jsObjectValue.get());
+    if (propertyValue->IsNull(info.GetIsolate())) {
       auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-      GetObjectDefaultValue(jsObjectValue.get(), pReturn.get());
+      GetObjectDefaultValue(info.GetIsolate(), jsObjectValue.get(),
+                            pReturn.get());
       info.GetReturnValue().Set(pReturn->DirectGetValue());
       return;
     }
 
     auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     pReturn.get());
+    jsObjectValue->GetObjectProperty(
+        info.GetIsolate(),
+        propertyValue->ToString(info.GetIsolate()).AsStringView(),
+        pReturn.get());
     info.GetReturnValue().Set(pReturn->DirectGetValue());
     return;
   }
 
-  if (argOne->IsObject()) {
+  if (argOne->IsObject(info.GetIsolate())) {
     auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-    GetObjectDefaultValue(argOne.get(), pReturn.get());
+    GetObjectDefaultValue(info.GetIsolate(), argOne.get(), pReturn.get());
     info.GetReturnValue().Set(pReturn->DirectGetValue());
     return;
   }
@@ -5101,21 +5192,21 @@
   }
 
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (!argOne->IsArray()) {
+  if (!argOne->IsArray(info.GetIsolate())) {
     info.GetReturnValue().Set(argOne->DirectGetValue());
     return;
   }
 
 #ifndef NDEBUG
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  argOne->GetObjectProperty("length", lengthValue.get());
-  ASSERT(lengthValue->ToInteger() >= 3);
+  argOne->GetObjectProperty(info.GetIsolate(), "length", lengthValue.get());
+  ASSERT(lengthValue->ToInteger(info.GetIsolate()) >= 3);
 #endif
 
   auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  argOne->GetObjectPropertyByIdx(2, pReturn.get());
+  argOne->GetObjectPropertyByIdx(info.GetIsolate(), 2, pReturn.get());
   info.GetReturnValue().Set(pReturn->DirectGetValue());
 }
 
@@ -5129,9 +5220,9 @@
     return;
   }
 
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (!argOne->IsArray()) {
+  if (!argOne->IsArray(info.GetIsolate())) {
     std::unique_ptr<CFXJSE_Value> simpleValue = GetSimpleValue(pThis, info, 0);
     info.GetReturnValue().Set(simpleValue->DirectGetValue());
     return;
@@ -5139,13 +5230,13 @@
 
 #ifndef NDEBUG
   auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  argOne->GetObjectProperty("length", lengthValue.get());
-  ASSERT(lengthValue->ToInteger() >= 3);
+  argOne->GetObjectProperty(info.GetIsolate(), "length", lengthValue.get());
+  ASSERT(lengthValue->ToInteger(info.GetIsolate()) >= 3);
 #endif
 
   auto flagsValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  argOne->GetObjectPropertyByIdx(0, flagsValue.get());
-  int32_t iFlags = flagsValue->ToInteger();
+  argOne->GetObjectPropertyByIdx(info.GetIsolate(), 0, flagsValue.get());
+  int32_t iFlags = flagsValue->ToInteger(info.GetIsolate());
   if (iFlags != 3 && iFlags != 4) {
     std::unique_ptr<CFXJSE_Value> simpleValue = GetSimpleValue(pThis, info, 0);
     info.GetReturnValue().Set(simpleValue->DirectGetValue());
@@ -5157,18 +5248,18 @@
     for (int32_t i = 0; i < 3; i++)
       values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
 
-    values[0]->SetInteger(3);
-    values[1]->SetNull();
-    values[2]->SetNull();
+    values[0]->SetInteger(info.GetIsolate(), 3);
+    values[1]->SetNull(info.GetIsolate());
+    values[2]->SetNull(info.GetIsolate());
     auto pResult = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-    pResult->SetArray(values);
+    pResult->SetArray(info.GetIsolate(), values);
     info.GetReturnValue().Set(pResult->DirectGetValue());
     return;
   }
 
   auto objectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  argOne->GetObjectPropertyByIdx(2, objectValue.get());
-  if (objectValue->IsNull()) {
+  argOne->GetObjectPropertyByIdx(info.GetIsolate(), 2, objectValue.get());
+  if (objectValue->IsNull(info.GetIsolate())) {
     pContext->ThrowCompilerErrorException();
     return;
   }
@@ -5179,24 +5270,26 @@
 void CFXJSE_FormCalcContext::concat_fm_object(
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
   std::vector<std::unique_ptr<CFXJSE_Value>> returnValues;
   for (int32_t i = 0; i < info.Length(); ++i) {
     auto argValue = std::make_unique<CFXJSE_Value>(pIsolate, info[i]);
-    if (argValue->IsArray()) {
+    if (argValue->IsArray(info.GetIsolate())) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      argValue->GetObjectProperty("length", lengthValue.get());
-      int32_t length = lengthValue->ToInteger();
+      argValue->GetObjectProperty(info.GetIsolate(), "length",
+                                  lengthValue.get());
+      int32_t length = lengthValue->ToInteger(info.GetIsolate());
       for (int32_t j = 2; j < length; j++) {
         returnValues.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-        argValue->GetObjectPropertyByIdx(j, returnValues.back().get());
+        argValue->GetObjectPropertyByIdx(info.GetIsolate(), j,
+                                         returnValues.back().get());
       }
     }
     returnValues.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-    returnValues.back()->Assign(argValue.get());
+    returnValues.back()->Assign(info.GetIsolate(), argValue.get());
   }
   auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  pReturn->SetArray(returnValues);
+  pReturn->SetArray(info.GetIsolate(), returnValues);
   info.GetReturnValue().Set(pReturn->DirectGetValue());
 }
 
@@ -5205,90 +5298,95 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     uint32_t index) {
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
   ASSERT(index < (uint32_t)info.Length());
 
   auto argIndex =
       std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[index]);
-  if (!argIndex->IsArray() && !argIndex->IsObject())
+  if (!argIndex->IsArray(info.GetIsolate()) &&
+      !argIndex->IsObject(info.GetIsolate()))
     return argIndex;
 
-  if (argIndex->IsArray()) {
+  if (argIndex->IsArray(info.GetIsolate())) {
     auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argIndex->GetObjectProperty("length", lengthValue.get());
-    int32_t iLength = lengthValue->ToInteger();
+    argIndex->GetObjectProperty(info.GetIsolate(), "length", lengthValue.get());
+    int32_t iLength = lengthValue->ToInteger(info.GetIsolate());
     auto simpleValue = std::make_unique<CFXJSE_Value>(pIsolate);
     if (iLength < 3) {
-      simpleValue.get()->SetUndefined();
+      simpleValue.get()->SetUndefined(info.GetIsolate());
       return simpleValue;
     }
 
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argIndex->GetObjectPropertyByIdx(1, propertyValue.get());
-    argIndex->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
-      GetObjectDefaultValue(jsObjectValue.get(), simpleValue.get());
+    argIndex->GetObjectPropertyByIdx(info.GetIsolate(), 1, propertyValue.get());
+    argIndex->GetObjectPropertyByIdx(info.GetIsolate(), 2, jsObjectValue.get());
+    if (propertyValue->IsNull(info.GetIsolate())) {
+      GetObjectDefaultValue(info.GetIsolate(), jsObjectValue.get(),
+                            simpleValue.get());
       return simpleValue;
     }
 
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     simpleValue.get());
+    jsObjectValue->GetObjectProperty(
+        info.GetIsolate(),
+        propertyValue->ToString(info.GetIsolate()).AsStringView(),
+        simpleValue.get());
     return simpleValue;
   }
 
   auto defaultValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  GetObjectDefaultValue(argIndex.get(), defaultValue.get());
+  GetObjectDefaultValue(info.GetIsolate(), argIndex.get(), defaultValue.get());
   return defaultValue;
 }
 
 // static
-bool CFXJSE_FormCalcContext::ValueIsNull(CFXJSE_HostObject* pThis,
+bool CFXJSE_FormCalcContext::ValueIsNull(v8::Isolate* pIsolate,
+                                         CFXJSE_HostObject* pThis,
                                          CFXJSE_Value* arg) {
-  if (!arg || arg->IsNull())
+  if (!arg || arg->IsNull(pIsolate))
     return true;
 
-  if (!arg->IsArray() && !arg->IsObject())
+  if (!arg->IsArray(pIsolate) && !arg->IsObject(pIsolate))
     return false;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
-  if (arg->IsArray()) {
+  if (arg->IsArray(pIsolate)) {
     int32_t iLength = hvalue_get_array_length(pThis, arg);
     if (iLength < 3)
       return true;
 
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    arg->GetObjectPropertyByIdx(1, propertyValue.get());
-    arg->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
+    arg->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+    arg->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+    if (propertyValue->IsNull(pIsolate)) {
       auto defaultValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get());
-      return defaultValue->IsNull();
+      GetObjectDefaultValue(pIsolate, jsObjectValue.get(), defaultValue.get());
+      return defaultValue->IsNull(pIsolate);
     }
 
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     newPropertyValue.get());
-    return newPropertyValue->IsNull();
+    jsObjectValue->GetObjectProperty(
+        pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+        newPropertyValue.get());
+    return newPropertyValue->IsNull(pIsolate);
   }
 
   auto defaultValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  GetObjectDefaultValue(arg, defaultValue.get());
-  return defaultValue->IsNull();
+  GetObjectDefaultValue(pIsolate, arg, defaultValue.get());
+  return defaultValue->IsNull(pIsolate);
 }
 
 // static
 int32_t CFXJSE_FormCalcContext::hvalue_get_array_length(
     CFXJSE_HostObject* pThis,
     CFXJSE_Value* arg) {
-  if (!arg || !arg->IsArray())
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (!arg || !arg->IsArray(pIsolate))
     return 0;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
   auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  arg->GetObjectProperty("length", lengthValue.get());
-  return lengthValue->ToInteger();
+  arg->GetObjectProperty(pIsolate, "length", lengthValue.get());
+  return lengthValue->ToInteger(pIsolate);
 }
 
 // static
@@ -5298,20 +5396,22 @@
   if (!firstValue)
     return false;
 
-  if (firstValue->IsString()) {
-    ByteString bsFirst = ValueToUTF8String(firstValue);
-    ByteString bsSecond = ValueToUTF8String(secondValue);
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (firstValue->IsString(pIsolate)) {
+    ByteString bsFirst = ValueToUTF8String(pThis, firstValue);
+    ByteString bsSecond = ValueToUTF8String(pThis, secondValue);
     return bsFirst == bsSecond;
   }
-  if (firstValue->IsNumber()) {
+  if (firstValue->IsNumber(pIsolate)) {
     float first = ValueToFloat(pThis, firstValue);
     float second = ValueToFloat(pThis, secondValue);
     return first == second;
   }
-  if (firstValue->IsBoolean())
-    return firstValue->ToBoolean() == secondValue->ToBoolean();
+  if (firstValue->IsBoolean(pIsolate))
+    return firstValue->ToBoolean(pIsolate) == secondValue->ToBoolean(pIsolate);
 
-  return firstValue->IsNull() && secondValue && secondValue->IsNull();
+  return firstValue->IsNull(pIsolate) && secondValue &&
+         secondValue->IsNull(pIsolate);
 }
 
 // static
@@ -5319,36 +5419,38 @@
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   std::vector<std::unique_ptr<CFXJSE_Value>> results;
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
   for (int32_t i = 1; i < info.Length(); ++i) {
     auto arg = std::make_unique<CFXJSE_Value>(pIsolate, info[i]);
-    if (arg->IsArray()) {
+    if (arg->IsArray(pIsolate)) {
       auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      arg->GetObjectProperty("length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger();
+      arg->GetObjectProperty(pIsolate, "length", lengthValue.get());
+      int32_t iLength = lengthValue->ToInteger(pIsolate);
       if (iLength < 3)
         continue;
 
       auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-      arg->GetObjectPropertyByIdx(1, propertyValue.get());
+      arg->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
 
       for (int32_t j = 2; j < iLength; j++) {
         auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-        arg->GetObjectPropertyByIdx(j, jsObjectValue.get());
+        arg->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
         results.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-        if (propertyValue->IsNull()) {
-          GetObjectDefaultValue(jsObjectValue.get(), results.back().get());
+        if (propertyValue->IsNull(pIsolate)) {
+          GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                                results.back().get());
         } else {
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringView(), results.back().get());
+              pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+              results.back().get());
         }
       }
-    } else if (arg->IsObject()) {
+    } else if (arg->IsObject(pIsolate)) {
       results.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-      GetObjectDefaultValue(arg.get(), results.back().get());
+      GetObjectDefaultValue(pIsolate, arg.get(), results.back().get());
     } else {
       results.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-      results.back()->Assign(arg.get());
+      results.back()->Assign(pIsolate, arg.get());
     }
   }
   return results;
@@ -5401,8 +5503,9 @@
       WideString::FromUTF8(bsAccessorName).AsStringView(), &resolveNodeRS,
       dwFlags, nullptr);
   if (bRet && resolveNodeRS.dwFlags == XFA_ResolveNodeRS::Type::kNodes) {
-    accessorValue->Assign(pScriptContext->GetOrCreateJSBindingFromMap(
-        resolveNodeRS.objects.front().Get()));
+    v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+    accessorValue->Assign(pIsolate, pScriptContext->GetOrCreateJSBindingFromMap(
+                                        resolveNodeRS.objects.front().Get()));
     return true;
   }
   return false;
@@ -5419,16 +5522,17 @@
   if (!pDoc)
     return false;
 
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
   WideString wsSomExpression = WideString::FromUTF8(bsSomExp);
   CFXJSE_Engine* pScriptContext = pDoc->GetScriptContext();
   CXFA_Object* pNode = nullptr;
   uint32_t dFlags = 0UL;
   if (bDotAccessor) {
-    if (pRefValue && pRefValue->IsNull()) {
+    if (pRefValue && pRefValue->IsNull(pIsolate)) {
       pNode = pScriptContext->GetThisObject();
       dFlags = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
     } else {
-      pNode = CFXJSE_Engine::ToObject(pRefValue);
+      pNode = CFXJSE_Engine::ToObject(pIsolate, pRefValue);
       if (!pNode)
         return false;
 
@@ -5453,7 +5557,7 @@
       }
     }
   } else {
-    pNode = CFXJSE_Engine::ToObject(pRefValue);
+    pNode = CFXJSE_Engine::ToObject(pIsolate, pRefValue);
     dFlags = XFA_RESOLVENODE_AnyChild;
   }
   return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringView(),
@@ -5472,7 +5576,7 @@
   resultValues->clear();
 
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
 
   if (resolveNodeRS.dwFlags == XFA_ResolveNodeRS::Type::kNodes) {
     *bAttribute = false;
@@ -5480,7 +5584,7 @@
     for (auto& pObject : resolveNodeRS.objects) {
       resultValues->push_back(std::make_unique<CFXJSE_Value>(pIsolate));
       resultValues->back()->Assign(
-          pScriptContext->GetOrCreateJSBindingFromMap(pObject.Get()));
+          pIsolate, pScriptContext->GetOrCreateJSBindingFromMap(pObject.Get()));
     }
     return;
   }
@@ -5492,7 +5596,7 @@
       auto pValue = std::make_unique<CFXJSE_Value>(pIsolate);
       CJX_Object* jsObject = pObject->JSObject();
       (*resolveNodeRS.script_attribute.callback)(
-          jsObject, pValue.get(), false,
+          pIsolate, jsObject, pValue.get(), false,
           resolveNodeRS.script_attribute.attribute);
       resultValues->push_back(std::move(pValue));
       *bAttribute = false;
@@ -5500,11 +5604,11 @@
   }
   if (!*bAttribute)
     return;
-  if (!pParentValue || !pParentValue->IsObject())
+  if (!pParentValue || !pParentValue->IsObject(pIsolate))
     return;
 
   resultValues->push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-  resultValues->back()->Assign(pParentValue);
+  resultValues->back()->Assign(pIsolate, pParentValue);
 }
 
 // static
@@ -5513,30 +5617,32 @@
   if (!pValue || pValue->IsEmpty())
     return 0;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
-  if (pValue->IsArray()) {
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (pValue->IsArray(pIsolate)) {
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    pValue->GetObjectPropertyByIdx(1, propertyValue.get());
-    pValue->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
-      GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
+    pValue->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+    pValue->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+    if (propertyValue->IsNull(pIsolate)) {
+      GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                            newPropertyValue.get());
       return ValueToInteger(pThis, newPropertyValue.get());
     }
 
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     newPropertyValue.get());
+    jsObjectValue->GetObjectProperty(
+        pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+        newPropertyValue.get());
     return ValueToInteger(pThis, newPropertyValue.get());
   }
-  if (pValue->IsObject()) {
+  if (pValue->IsObject(pIsolate)) {
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    GetObjectDefaultValue(pValue, newPropertyValue.get());
+    GetObjectDefaultValue(pIsolate, pValue, newPropertyValue.get());
     return ValueToInteger(pThis, newPropertyValue.get());
   }
-  if (pValue->IsString())
-    return FXSYS_atoi(pValue->ToString().c_str());
-  return pValue->ToInteger();
+  if (pValue->IsString(pIsolate))
+    return FXSYS_atoi(pValue->ToString(pIsolate).c_str());
+  return pValue->ToInteger(pIsolate);
 }
 
 // static
@@ -5545,31 +5651,33 @@
   if (!arg)
     return 0.0f;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
-  if (arg->IsArray()) {
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (arg->IsArray(pIsolate)) {
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    arg->GetObjectPropertyByIdx(1, propertyValue.get());
-    arg->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
-      GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
+    arg->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+    arg->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+    if (propertyValue->IsNull(pIsolate)) {
+      GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                            newPropertyValue.get());
       return ValueToFloat(pThis, newPropertyValue.get());
     }
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     newPropertyValue.get());
+    jsObjectValue->GetObjectProperty(
+        pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+        newPropertyValue.get());
     return ValueToFloat(pThis, newPropertyValue.get());
   }
-  if (arg->IsObject()) {
+  if (arg->IsObject(pIsolate)) {
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    GetObjectDefaultValue(arg, newPropertyValue.get());
+    GetObjectDefaultValue(pIsolate, arg, newPropertyValue.get());
     return ValueToFloat(pThis, newPropertyValue.get());
   }
-  if (arg->IsString())
-    return strtof(arg->ToString().c_str(), nullptr);
-  if (arg->IsUndefined() || arg->IsEmpty())
+  if (arg->IsString(pIsolate))
+    return strtof(arg->ToString(pIsolate).c_str(), nullptr);
+  if (arg->IsUndefined(pIsolate) || arg->IsEmpty())
     return 0.0f;
-  return arg->ToFloat();
+  return arg->ToFloat(pIsolate);
 }
 
 // static
@@ -5578,31 +5686,33 @@
   if (!arg)
     return 0;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
-  if (arg->IsArray()) {
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (arg->IsArray(pIsolate)) {
     auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    arg->GetObjectPropertyByIdx(1, propertyValue.get());
-    arg->GetObjectPropertyByIdx(2, jsObjectValue.get());
-    if (propertyValue->IsNull()) {
-      GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
+    arg->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+    arg->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+    if (propertyValue->IsNull(pIsolate)) {
+      GetObjectDefaultValue(pIsolate, jsObjectValue.get(),
+                            newPropertyValue.get());
       return ValueToDouble(pThis, newPropertyValue.get());
     }
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                     newPropertyValue.get());
+    jsObjectValue->GetObjectProperty(
+        pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+        newPropertyValue.get());
     return ValueToDouble(pThis, newPropertyValue.get());
   }
-  if (arg->IsObject()) {
+  if (arg->IsObject(pIsolate)) {
     auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    GetObjectDefaultValue(arg, newPropertyValue.get());
+    GetObjectDefaultValue(pIsolate, arg, newPropertyValue.get());
     return ValueToDouble(pThis, newPropertyValue.get());
   }
-  if (arg->IsString())
-    return strtod(arg->ToString().c_str(), nullptr);
-  if (arg->IsUndefined() || arg->IsEmpty())
+  if (arg->IsString(pIsolate))
+    return strtod(arg->ToString(pIsolate).c_str(), nullptr);
+  if (arg->IsUndefined(pIsolate) || arg->IsEmpty())
     return 0;
-  return arg->ToDouble();
+  return arg->ToDouble(pIsolate);
 }
 
 // static.
@@ -5615,13 +5725,13 @@
   if (!src)
     return 0;
 
-  if (!src->IsArray())
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (!src->IsArray(pIsolate))
     return ValueToDouble(pThis, src);
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
   auto lengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  src->GetObjectProperty("length", lengthValue.get());
-  int32_t iLength = lengthValue->ToInteger();
+  src->GetObjectProperty(pIsolate, "length", lengthValue.get());
+  int32_t iLength = lengthValue->ToInteger(pIsolate);
   if (iLength <= 2) {
     *ret = false;
     return 0.0;
@@ -5629,24 +5739,28 @@
 
   auto propertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
   auto jsObjectValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  src->GetObjectPropertyByIdx(1, propertyValue.get());
-  src->GetObjectPropertyByIdx(2, jsObjectValue.get());
-  if (propertyValue->IsNull())
+  src->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+  src->GetObjectPropertyByIdx(pIsolate, 2, jsObjectValue.get());
+  if (propertyValue->IsNull(pIsolate))
     return ValueToDouble(pThis, jsObjectValue.get());
 
   auto newPropertyValue = std::make_unique<CFXJSE_Value>(pIsolate);
-  jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
-                                   newPropertyValue.get());
+  jsObjectValue->GetObjectProperty(
+      pIsolate, propertyValue->ToString(pIsolate).AsStringView(),
+      newPropertyValue.get());
   return ValueToDouble(pThis, newPropertyValue.get());
 }
 
 // static
-ByteString CFXJSE_FormCalcContext::ValueToUTF8String(CFXJSE_Value* arg) {
-  if (!arg || arg->IsNull() || arg->IsUndefined() || arg->IsEmpty())
+ByteString CFXJSE_FormCalcContext::ValueToUTF8String(CFXJSE_HostObject* pThis,
+                                                     CFXJSE_Value* arg) {
+  v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetIsolate();
+  if (!arg || arg->IsNull(pIsolate) || arg->IsUndefined(pIsolate) ||
+      arg->IsEmpty())
     return ByteString();
-  if (arg->IsBoolean())
-    return arg->ToBoolean() ? "1" : "0";
-  return arg->ToString();
+  if (arg->IsBoolean(pIsolate))
+    return arg->ToBoolean(pIsolate) ? "1" : "0";
+  return arg->ToString(pIsolate);
 }
 
 Optional<CFX_WideTextBuf> CFXJSE_FormCalcContext::Translate(
@@ -5672,14 +5786,14 @@
   return wsJavaScript;
 }
 
-CFXJSE_FormCalcContext::CFXJSE_FormCalcContext(v8::Isolate* pScriptIsolate,
+CFXJSE_FormCalcContext::CFXJSE_FormCalcContext(v8::Isolate* pIsolate,
                                                CFXJSE_Context* pScriptContext,
                                                CXFA_Document* pDoc)
-    : m_pIsolate(pScriptIsolate),
-      m_pValue(std::make_unique<CFXJSE_Value>(pScriptIsolate)),
+    : m_pIsolate(pIsolate),
+      m_pValue(std::make_unique<CFXJSE_Value>(pIsolate)),
       m_pDocument(pDoc) {
   m_pValue->SetHostObject(
-      this,
+      pIsolate, this,
       CFXJSE_Class::Create(pScriptContext, &kFormCalcFM2JSDescriptor, false));
 }
 
@@ -5690,7 +5804,7 @@
 }
 
 void CFXJSE_FormCalcContext::GlobalPropertyGetter(CFXJSE_Value* pValue) {
-  pValue->Assign(m_pValue.get());
+  pValue->Assign(GetIsolate(), m_pValue.get());
 }
 
 // static
@@ -5699,7 +5813,7 @@
     const v8::FunctionCallbackInfo<v8::Value>& info,
     bool bDotAccessor) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
-  v8::Isolate* pIsolate = pContext->GetScriptRuntime();
+  v8::Isolate* pIsolate = pContext->GetIsolate();
   int32_t argc = info.Length();
   if (argc < 4 || argc > 5) {
     pContext->ThrowCompilerErrorException();
@@ -5723,10 +5837,11 @@
       bIsStar);
 
   auto argAccessor = std::make_unique<CFXJSE_Value>(info.GetIsolate(), info[0]);
-  if (argAccessor->IsArray()) {
+  if (argAccessor->IsArray(info.GetIsolate())) {
     auto pLengthValue = std::make_unique<CFXJSE_Value>(pIsolate);
-    argAccessor->GetObjectProperty("length", pLengthValue.get());
-    int32_t iLength = pLengthValue->ToInteger();
+    argAccessor->GetObjectProperty(info.GetIsolate(), "length",
+                                   pLengthValue.get());
+    int32_t iLength = pLengthValue->ToInteger(info.GetIsolate());
     if (iLength < 3) {
       pContext->ThrowArgumentMismatchException();
       return;
@@ -5738,7 +5853,8 @@
     bool bAttribute = false;
     bool bAllEmpty = true;
     for (int32_t i = 2; i < iLength; i++) {
-      argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get());
+      argAccessor->GetObjectPropertyByIdx(info.GetIsolate(), i,
+                                          hJSObjValue.get());
       XFA_ResolveNodeRS resolveNodeRS;
       if (ResolveObjects(pThis, hJSObjValue.get(), bsSomExp.AsStringView(),
                          &resolveNodeRS, bDotAccessor, bHasNoResolveName)) {
@@ -5756,21 +5872,21 @@
 
     std::vector<std::unique_ptr<CFXJSE_Value>> values;
     values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-    values.back()->SetInteger(1);
+    values.back()->SetInteger(pIsolate, 1);
     values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
     if (bAttribute)
-      values.back()->SetString(bsName.AsStringView());
+      values.back()->SetString(pIsolate, bsName.AsStringView());
     else
-      values.back()->SetNull();
+      values.back()->SetNull(pIsolate);
 
     for (int32_t i = 0; i < iLength - 2; i++) {
       for (size_t j = 0; j < resolveValues[i].size(); j++) {
         values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
-        values.back()->Assign(resolveValues[i][j].get());
+        values.back()->Assign(pIsolate, resolveValues[i][j].get());
       }
     }
     auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-    pReturn->SetArray(values);
+    pReturn->SetArray(pIsolate, values);
     info.GetReturnValue().Set(pReturn->DirectGetValue());
     return;
   }
@@ -5779,11 +5895,11 @@
   bool bRet = false;
   ByteString bsAccessorName =
       fxv8::ReentrantToByteStringHelper(info.GetIsolate(), info[1]);
-  if (argAccessor->IsObject() ||
-      (argAccessor->IsNull() && bsAccessorName.IsEmpty())) {
+  if (argAccessor->IsObject(pIsolate) ||
+      (argAccessor->IsNull(pIsolate) && bsAccessorName.IsEmpty())) {
     bRet = ResolveObjects(pThis, argAccessor.get(), bsSomExp.AsStringView(),
                           &resolveNodeRS, bDotAccessor, bHasNoResolveName);
-  } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() &&
+  } else if (!argAccessor->IsObject(pIsolate) && !bsAccessorName.IsEmpty() &&
              GetObjectForName(pThis, argAccessor.get(),
                               bsAccessorName.AsStringView())) {
     bRet = ResolveObjects(pThis, argAccessor.get(), bsSomExp.AsStringView(),
@@ -5805,17 +5921,17 @@
   for (size_t i = 0; i < resolveValues.size() + 2; i++)
     values.push_back(std::make_unique<CFXJSE_Value>(pIsolate));
 
-  values[0]->SetInteger(1);
+  values[0]->SetInteger(pIsolate, 1);
   if (bAttribute)
-    values[1]->SetString(bsName.AsStringView());
+    values[1]->SetString(pIsolate, bsName.AsStringView());
   else
-    values[1]->SetNull();
+    values[1]->SetNull(pIsolate);
 
   for (size_t i = 0; i < resolveValues.size(); i++)
-    values[i + 2]->Assign(resolveValues[i].get());
+    values[i + 2]->Assign(pIsolate, resolveValues[i].get());
 
   auto pReturn = std::make_unique<CFXJSE_Value>(info.GetIsolate());
-  pReturn->SetArray(values);
+  pReturn->SetArray(pIsolate, values);
   info.GetReturnValue().Set(pReturn->DirectGetValue());
 }
 
diff --git a/fxjs/xfa/cfxjse_formcalc_context.h b/fxjs/xfa/cfxjse_formcalc_context.h
index 1a005f5..19b88ca 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.h
+++ b/fxjs/xfa/cfxjse_formcalc_context.h
@@ -25,7 +25,7 @@
 
 class CFXJSE_FormCalcContext final : public CFXJSE_HostObject {
  public:
-  CFXJSE_FormCalcContext(v8::Isolate* pScriptIsolate,
+  CFXJSE_FormCalcContext(v8::Isolate* pIsolate,
                          CFXJSE_Context* pScriptContext,
                          CXFA_Document* pDoc);
   ~CFXJSE_FormCalcContext() override;
@@ -295,11 +295,14 @@
       CFXJSE_HostObject* pThis,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       uint32_t index);
-  static bool ValueIsNull(CFXJSE_HostObject* pThis, CFXJSE_Value* pValue);
+  static bool ValueIsNull(v8::Isolate* pIsolate,
+                          CFXJSE_HostObject* pThis,
+                          CFXJSE_Value* pValue);
   static int32_t ValueToInteger(CFXJSE_HostObject* pThis, CFXJSE_Value* pValue);
   static float ValueToFloat(CFXJSE_HostObject* pThis, CFXJSE_Value* pValue);
   static double ValueToDouble(CFXJSE_HostObject* pThis, CFXJSE_Value* pValue);
-  static ByteString ValueToUTF8String(CFXJSE_Value* pValue);
+  static ByteString ValueToUTF8String(CFXJSE_HostObject* pThis,
+                                      CFXJSE_Value* pValue);
   static double ExtractDouble(CFXJSE_HostObject* pThis,
                               CFXJSE_Value* src,
                               bool* ret);
@@ -313,7 +316,7 @@
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 bool bDotAccessor);
 
-  v8::Isolate* GetScriptRuntime() const { return m_pIsolate.Get(); }
+  v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); }
   CXFA_Document* GetDocument() const { return m_pDocument.Get(); }
 
   void ThrowNoDefaultPropertyException(ByteStringView name) const;
diff --git a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
index 97b7b87..545c3d8 100644
--- a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
@@ -16,7 +16,7 @@
 
  protected:
   bool ExecuteExpectNull(ByteStringView input) {
-    return Execute(input) && GetValue()->IsNull();
+    return Execute(input) && GetValue()->IsNull(isolate());
   }
 };
 
@@ -38,8 +38,8 @@
   EXPECT_TRUE(Execute(input));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsInteger());
-  EXPECT_EQ(123, value->ToInteger()) << "Program: " << input;
+  EXPECT_TRUE(value->IsInteger(isolate()));
+  EXPECT_EQ(123, value->ToInteger(isolate())) << "Program: " << input;
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, Numeric) {
@@ -77,8 +77,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -98,10 +98,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -139,8 +139,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger()) << "Program: " << tests[i].program;
-    EXPECT_EQ(tests[i].result, value->ToBoolean())
+    EXPECT_TRUE(value->IsInteger(isolate())) << "Program: " << tests[i].program;
+    EXPECT_EQ(tests[i].result, value->ToBoolean(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -157,8 +157,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -175,8 +175,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -193,8 +193,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -211,8 +211,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -231,8 +231,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -251,8 +251,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -273,8 +273,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -291,8 +291,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -312,8 +312,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber()) << "Program: " << tests[i].program;
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate())) << "Program: " << tests[i].program;
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -332,8 +332,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -371,8 +371,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -394,10 +394,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -417,8 +417,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -435,8 +435,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -456,10 +456,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -478,10 +478,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -503,10 +503,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString()) << "Program: " << tests[i].program;
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate())) << "Program: " << tests[i].program;
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -527,10 +527,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -547,10 +547,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -582,8 +582,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -605,10 +605,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -625,8 +625,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_NEAR(tests[i].result, value->ToFloat(), 0.000001)
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_NEAR(tests[i].result, value->ToFloat(isolate()), 0.000001)
         << "Program: " << tests[i].program;
   }
 }
@@ -647,8 +647,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -666,8 +666,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -686,8 +686,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -706,8 +706,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber()) << "Program: " << tests[i].program;
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate())) << "Program: " << tests[i].program;
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -725,8 +725,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -747,8 +747,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -768,8 +768,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -787,8 +787,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_NEAR(tests[i].result, value->ToFloat(), 0.000001)
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_NEAR(tests[i].result, value->ToFloat(isolate()), 0.000001)
         << "Program: " << tests[i].program;
   }
 }
@@ -806,8 +806,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -828,10 +828,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -840,8 +840,8 @@
 
   EXPECT_TRUE(Execute("Exists(\"hello world\")"));
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsInteger());
-  EXPECT_FALSE(value->ToBoolean());
+  EXPECT_TRUE(value->IsInteger(isolate()));
+  EXPECT_FALSE(value->ToBoolean(isolate()));
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, HasValue) {
@@ -856,8 +856,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger()) << "Program: " << tests[i].program;
-    EXPECT_EQ(tests[i].result, value->ToBoolean())
+    EXPECT_TRUE(value->IsInteger(isolate())) << "Program: " << tests[i].program;
+    EXPECT_EQ(tests[i].result, value->ToBoolean(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -881,8 +881,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger()) << "Program: " << tests[i].program;
-    EXPECT_EQ(tests[i].result, value->ToBoolean())
+    EXPECT_TRUE(value->IsInteger(isolate())) << "Program: " << tests[i].program;
+    EXPECT_EQ(tests[i].result, value->ToBoolean(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -901,8 +901,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger()) << "Program: " << tests[i].program;
-    EXPECT_EQ(tests[i].result, value->ToBoolean())
+    EXPECT_TRUE(value->IsInteger(isolate())) << "Program: " << tests[i].program;
+    EXPECT_EQ(tests[i].result, value->ToBoolean(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -919,8 +919,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -938,17 +938,17 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 
   EXPECT_TRUE(Execute("Null() + 5"));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsInteger());
-  EXPECT_EQ(5, value->ToInteger());
+  EXPECT_TRUE(value->IsInteger(isolate()));
+  EXPECT_EQ(5, value->ToInteger(isolate()));
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, Ref) {
@@ -963,10 +963,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -987,10 +987,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1011,8 +1011,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsNumber());
-    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat())
+    EXPECT_TRUE(value->IsNumber(isolate()));
+    EXPECT_FLOAT_EQ(tests[i].result, value->ToFloat(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -1031,8 +1031,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -1053,10 +1053,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1096,10 +1096,10 @@
   for (size_t i = 0; i < pdfium::size(tests); ++i) {
     EXPECT_TRUE(Execute(tests[i].program));
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1133,10 +1133,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1153,10 +1153,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1173,10 +1173,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1193,8 +1193,8 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsInteger());
-    EXPECT_EQ(tests[i].result, value->ToInteger())
+    EXPECT_TRUE(value->IsInteger(isolate()));
+    EXPECT_EQ(tests[i].result, value->ToInteger(isolate()))
         << "Program: " << tests[i].program;
   }
 }
@@ -1213,10 +1213,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1243,10 +1243,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1262,16 +1262,16 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 
   EXPECT_TRUE(Execute("Parse(\"$9,999,999.99\", \"$1,234,567.89\")"));
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsNumber());
-  EXPECT_FLOAT_EQ(1234567.89f, value->ToFloat());
+  EXPECT_TRUE(value->IsNumber(isolate()));
+  EXPECT_FLOAT_EQ(1234567.89f, value->ToFloat(isolate()));
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, Replace) {
@@ -1288,10 +1288,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1308,10 +1308,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1328,10 +1328,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1348,10 +1348,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1370,10 +1370,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1392,10 +1392,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1439,10 +1439,10 @@
     EXPECT_TRUE(Execute(test.program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(test.result, value->ToString().c_str())
-        << "Program: " << test.program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(test.result, value->ToString(isolate()).c_str())
+        << "Program: " << test.program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1452,7 +1452,7 @@
   EXPECT_TRUE(Execute("Uuid()"));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsString());
+  EXPECT_TRUE(value->IsString(isolate()));
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, Upper) {
@@ -1469,10 +1469,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1495,10 +1495,10 @@
     EXPECT_TRUE(Execute(tests[i].program));
 
     CFXJSE_Value* value = GetValue();
-    EXPECT_TRUE(value->IsString());
-    EXPECT_STREQ(tests[i].result, value->ToString().c_str())
-        << "Program: " << tests[i].program << " Result: '" << value->ToString()
-        << "'";
+    EXPECT_TRUE(value->IsString(isolate()));
+    EXPECT_STREQ(tests[i].result, value->ToString(isolate()).c_str())
+        << "Program: " << tests[i].program << " Result: '"
+        << value->ToString(isolate()) << "'";
   }
 }
 
@@ -1536,8 +1536,8 @@
   EXPECT_TRUE(Execute(test));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsString());
-  EXPECT_STREQ("12.7mm", value->ToString().c_str());
+  EXPECT_TRUE(value->IsString(isolate()));
+  EXPECT_STREQ("12.7mm", value->ToString(isolate()).c_str());
 }
 
 TEST_F(CFXJSE_FormCalcContextEmbedderTest, GetXFAEventChange) {
@@ -1553,8 +1553,8 @@
   EXPECT_TRUE(Execute(test));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsString());
-  EXPECT_STREQ("changed", value->ToString().c_str());
+  EXPECT_TRUE(value->IsString(isolate()));
+  EXPECT_STREQ("changed", value->ToString(isolate()).c_str());
   context->SetEventParam(nullptr);
 }
 
@@ -1654,8 +1654,8 @@
   EXPECT_TRUE(Execute("xfa.event.cancelAction"));
 
   CFXJSE_Value* value = GetValue();
-  EXPECT_TRUE(value->IsBoolean());
-  EXPECT_FALSE(value->ToBoolean());
+  EXPECT_TRUE(value->IsBoolean(isolate()));
+  EXPECT_FALSE(value->ToBoolean(isolate()));
 
   EXPECT_TRUE(Execute("xfa.event.cancelAction = \"true\""));
   EXPECT_TRUE(params.m_bCancelAction);
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index 0d6d566..968bca4 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -26,7 +26,8 @@
 
 namespace {
 
-void DoPredicateFilter(WideString wsCondition,
+void DoPredicateFilter(v8::Isolate* pIsolate,
+                       WideString wsCondition,
                        size_t iFoundCount,
                        CFXJSE_ResolveNodeData* pRnd) {
   ASSERT(iFoundCount == pRnd->m_Objects.size());
@@ -45,7 +46,7 @@
     bool bRet =
         pRnd->m_pSC->RunScript(eLangType, wsExpression.AsStringView(),
                                pRetValue.get(), pRnd->m_Objects[i - 1].Get());
-    if (!bRet || !pRetValue->ToBoolean())
+    if (!bRet || !pRetValue->ToBoolean(pIsolate))
       pRnd->m_Objects.erase(pRnd->m_Objects.begin() + i - 1);
   }
 }
@@ -57,7 +58,8 @@
 
 CFXJSE_ResolveProcessor::~CFXJSE_ResolveProcessor() = default;
 
-bool CFXJSE_ResolveProcessor::Resolve(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::Resolve(v8::Isolate* pIsolate,
+                                      CFXJSE_ResolveNodeData& rnd) {
   if (!rnd.m_CurObject)
     return false;
 
@@ -69,22 +71,22 @@
     return false;
   }
   if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild)
-    return ResolveAnyChild(rnd);
+    return ResolveAnyChild(pIsolate, rnd);
 
   if (rnd.m_wsName.GetLength()) {
     wchar_t wch = rnd.m_wsName[0];
     switch (wch) {
       case '$':
-        return ResolveDollar(rnd);
+        return ResolveDollar(pIsolate, rnd);
       case '!':
-        return ResolveExcalmatory(rnd);
+        return ResolveExcalmatory(pIsolate, rnd);
       case '#':
-        return ResolveNumberSign(rnd);
+        return ResolveNumberSign(pIsolate, rnd);
       case '*':
         return ResolveAsterisk(rnd);
       // TODO(dsinclair): We could probably remove this.
       case '.':
-        return ResolveAnyChild(rnd);
+        return ResolveAnyChild(pIsolate, rnd);
       default:
         break;
     }
@@ -106,17 +108,18 @@
       return true;
     }
     if (!rnd.m_Objects.empty())
-      FilterCondition(rnd.m_wsCondition, &rnd);
+      FilterCondition(pIsolate, rnd.m_wsCondition, &rnd);
 
     return !rnd.m_Objects.empty();
   }
-  if (!ResolveNormal(rnd) && rnd.m_uHashName == XFA_HASHCODE_Xfa)
+  if (!ResolveNormal(pIsolate, rnd) && rnd.m_uHashName == XFA_HASHCODE_Xfa)
     rnd.m_Objects.emplace_back(rnd.m_pSC->GetDocument()->GetRoot());
 
   return !rnd.m_Objects.empty();
 }
 
-bool CFXJSE_ResolveProcessor::ResolveAnyChild(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::ResolveAnyChild(v8::Isolate* pIsolate,
+                                              CFXJSE_ResolveNodeData& rnd) {
   CXFA_Node* pParent = ToNode(rnd.m_CurObject.Get());
   if (!pParent)
     return false;
@@ -144,11 +147,12 @@
   nodes.insert(nodes.end(), siblings.begin(), siblings.end());
   rnd.m_Objects =
       std::vector<UnownedPtr<CXFA_Object>>(nodes.begin(), nodes.end());
-  FilterCondition(wsCondition, &rnd);
+  FilterCondition(pIsolate, wsCondition, &rnd);
   return !rnd.m_Objects.empty();
 }
 
-bool CFXJSE_ResolveProcessor::ResolveDollar(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::ResolveDollar(v8::Isolate* pIsolate,
+                                            CFXJSE_ResolveNodeData& rnd) {
   WideString wsName = rnd.m_wsName;
   WideString wsCondition = rnd.m_wsCondition;
   int32_t iNameLen = wsName.GetLength();
@@ -169,11 +173,12 @@
       rnd.m_Objects.emplace_back(pObjNode);
   }
   if (!rnd.m_Objects.empty())
-    FilterCondition(wsCondition, &rnd);
+    FilterCondition(pIsolate, wsCondition, &rnd);
   return !rnd.m_Objects.empty();
 }
 
-bool CFXJSE_ResolveProcessor::ResolveExcalmatory(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::ResolveExcalmatory(v8::Isolate* pIsolate,
+                                                 CFXJSE_ResolveNodeData& rnd) {
   if (rnd.m_nLevel > 0)
     return false;
 
@@ -190,14 +195,15 @@
   rndFind.m_nLevel = rnd.m_nLevel + 1;
   rndFind.m_dwStyles = XFA_RESOLVENODE_Children;
   rndFind.m_wsCondition = rnd.m_wsCondition;
-  Resolve(rndFind);
+  Resolve(pIsolate, rndFind);
 
   rnd.m_Objects.insert(rnd.m_Objects.end(), rndFind.m_Objects.begin(),
                        rndFind.m_Objects.end());
   return !rnd.m_Objects.empty();
 }
 
-bool CFXJSE_ResolveProcessor::ResolveNumberSign(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::ResolveNumberSign(v8::Isolate* pIsolate,
+                                                CFXJSE_ResolveNodeData& rnd) {
   WideString wsName = rnd.m_wsName.Last(rnd.m_wsName.GetLength() - 1);
   WideString wsCondition = rnd.m_wsCondition;
   CXFA_Node* curNode = ToNode(rnd.m_CurObject.Get());
@@ -214,7 +220,7 @@
       FX_HashCode_GetW(rndFind.m_wsName.AsStringView(), false));
   rndFind.m_wsCondition = wsCondition;
   rndFind.m_CurObject = curNode;
-  ResolveNormal(rndFind);
+  ResolveNormal(pIsolate, rndFind);
   if (rndFind.m_Objects.empty())
     return false;
 
@@ -241,7 +247,8 @@
   return true;
 }
 
-bool CFXJSE_ResolveProcessor::ResolveNormal(CFXJSE_ResolveNodeData& rnd) {
+bool CFXJSE_ResolveProcessor::ResolveNormal(v8::Isolate* pIsolate,
+                                            CFXJSE_ResolveNodeData& rnd) {
   if (rnd.m_nLevel > 32 || !rnd.m_CurObject->IsNode())
     return false;
 
@@ -284,14 +291,14 @@
       rndFind.m_CurObject = pVariablesNode;
       SetStylesForChild(dwStyles, rndFind);
       WideString wsSaveCondition = std::move(rndFind.m_wsCondition);
-      ResolveNormal(rndFind);
+      ResolveNormal(pIsolate, rndFind);
       rndFind.m_wsCondition = std::move(wsSaveCondition);
       rnd.m_Objects.insert(rnd.m_Objects.end(), rndFind.m_Objects.begin(),
                            rndFind.m_Objects.end());
       rndFind.m_Objects.clear();
     }
     if (rnd.m_Objects.size() > nNum) {
-      FilterCondition(wsCondition, &rnd);
+      FilterCondition(pIsolate, wsCondition, &rnd);
       return !rnd.m_Objects.empty();
     }
   }
@@ -318,7 +325,7 @@
         rndFind.m_CurObject = child;
 
         WideString wsSaveCondition = std::move(rndFind.m_wsCondition);
-        ResolveNormal(rndFind);
+        ResolveNormal(pIsolate, rndFind);
         rndFind.m_wsCondition = std::move(wsSaveCondition);
         rnd.m_Objects.insert(rnd.m_Objects.end(), rndFind.m_Objects.begin(),
                              rndFind.m_Objects.end());
@@ -342,7 +349,7 @@
           rnd.m_Objects.front() = pSaveObject;
         }
       }
-      FilterCondition(wsCondition, &rnd);
+      FilterCondition(pIsolate, wsCondition, &rnd);
       return !rnd.m_Objects.empty();
     }
   }
@@ -364,7 +371,7 @@
       }
     }
     if (rnd.m_Objects.size() > nNum) {
-      FilterCondition(wsCondition, &rnd);
+      FilterCondition(pIsolate, wsCondition, &rnd);
       return !rnd.m_Objects.empty();
     }
 
@@ -395,7 +402,7 @@
   if (!parentNode) {
     if (uCurClassHash == uNameHash) {
       rnd.m_Objects.emplace_back(curNode);
-      FilterCondition(wsCondition, &rnd);
+      FilterCondition(pIsolate, wsCondition, &rnd);
       if (!rnd.m_Objects.empty())
         return true;
     }
@@ -452,7 +459,7 @@
         WideString wsOriginCondition = std::move(rndFind.m_wsCondition);
         uint32_t dwOriginStyle = rndFind.m_dwStyles;
         rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL;
-        ResolveNormal(rndFind);
+        ResolveNormal(pIsolate, rndFind);
         rndFind.m_dwStyles = dwOriginStyle;
         rndFind.m_wsCondition = std::move(wsOriginCondition);
         rnd.m_Objects.insert(rnd.m_Objects.end(), rndFind.m_Objects.begin(),
@@ -476,7 +483,7 @@
           rnd.m_Objects.front() = pSaveObject;
         }
       }
-      FilterCondition(wsCondition, &rnd);
+      FilterCondition(pIsolate, wsCondition, &rnd);
       return !rnd.m_Objects.empty();
     }
   }
@@ -492,7 +499,7 @@
     rndFind.m_dwStyles = dwSubStyles;
     rndFind.m_CurObject = parentNode;
     rnd.m_pSC->GetUpObjectArray()->push_back(parentNode);
-    ResolveNormal(rndFind);
+    ResolveNormal(pIsolate, rndFind);
     rnd.m_Objects.insert(rnd.m_Objects.end(), rndFind.m_Objects.begin(),
                          rndFind.m_Objects.end());
     rndFind.m_Objects.clear();
@@ -646,7 +653,8 @@
   }
 }
 
-void CFXJSE_ResolveProcessor::FilterCondition(WideString wsCondition,
+void CFXJSE_ResolveProcessor::FilterCondition(v8::Isolate* pIsolate,
+                                              WideString wsCondition,
                                               CFXJSE_ResolveNodeData* pRnd) {
   size_t iCurIndex = 0;
   const auto* pArray = pRnd->m_pSC->GetUpObjectArray();
@@ -690,7 +698,7 @@
       return;
     case '.':
       if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '('))
-        DoPredicateFilter(wsCondition, iFoundCount, pRnd);
+        DoPredicateFilter(pIsolate, wsCondition, iFoundCount, pRnd);
       return;
     case '(':
     case '"':
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.h b/fxjs/xfa/cfxjse_resolveprocessor.h
index ebde16e..139b79a 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.h
+++ b/fxjs/xfa/cfxjse_resolveprocessor.h
@@ -44,7 +44,7 @@
   CFXJSE_ResolveProcessor();
   ~CFXJSE_ResolveProcessor();
 
-  bool Resolve(CFXJSE_ResolveNodeData& rnd);
+  bool Resolve(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
   int32_t GetFilter(WideStringView wsExpression,
                     int32_t nStart,
                     CFXJSE_ResolveNodeData& rnd);
@@ -59,19 +59,21 @@
   bool ResolveForAttributeRs(CXFA_Object* curNode,
                              CFXJSE_ResolveNodeData& rnd,
                              WideStringView strAttr);
-  bool ResolveAnyChild(CFXJSE_ResolveNodeData& rnd);
-  bool ResolveDollar(CFXJSE_ResolveNodeData& rnd);
-  bool ResolveExcalmatory(CFXJSE_ResolveNodeData& rnd);
-  bool ResolveNumberSign(CFXJSE_ResolveNodeData& rnd);
+  bool ResolveAnyChild(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
+  bool ResolveDollar(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
+  bool ResolveExcalmatory(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
+  bool ResolveNumberSign(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
   bool ResolveAsterisk(CFXJSE_ResolveNodeData& rnd);
-  bool ResolveNormal(CFXJSE_ResolveNodeData& rnd);
+  bool ResolveNormal(v8::Isolate* pIsolate, CFXJSE_ResolveNodeData& rnd);
   void SetStylesForChild(uint32_t dwParentStyles, CFXJSE_ResolveNodeData& rnd);
 
   void ConditionArray(size_t iCurIndex,
                       WideString wsCondition,
                       size_t iFoundCount,
                       CFXJSE_ResolveNodeData* pRnd);
-  void FilterCondition(WideString wsCondition, CFXJSE_ResolveNodeData* pRnd);
+  void FilterCondition(v8::Isolate* pIsolate,
+                       WideString wsCondition,
+                       CFXJSE_ResolveNodeData* pRnd);
 
   int32_t m_iCurStart = 0;
   std::unique_ptr<CFXJSE_NodeHelper> const m_pNodeHelper;
diff --git a/fxjs/xfa/cfxjse_value.cpp b/fxjs/xfa/cfxjse_value.cpp
index c034808..993f964 100644
--- a/fxjs/xfa/cfxjse_value.cpp
+++ b/fxjs/xfa/cfxjse_value.cpp
@@ -65,167 +65,170 @@
   pIsolate->ThrowException(hError);
 }
 
-CFXJSE_Value::CFXJSE_Value(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {}
+CFXJSE_Value::CFXJSE_Value(v8::Isolate* pIsolate) {}
 
-CFXJSE_Value::CFXJSE_Value(v8::Isolate* pIsolate, v8::Local<v8::Value> value)
-    : m_pIsolate(pIsolate) {
-  ForceSetValue(value);
+CFXJSE_Value::CFXJSE_Value(v8::Isolate* pIsolate, v8::Local<v8::Value> value) {
+  ForceSetValue(pIsolate, value);
 }
 
 CFXJSE_Value::~CFXJSE_Value() = default;
 
-CFXJSE_HostObject* CFXJSE_Value::ToHostObject() const {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+CFXJSE_HostObject* CFXJSE_Value::ToHostObject(v8::Isolate* pIsolate) const {
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   return CFXJSE_HostObject::FromV8(
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
+      v8::Local<v8::Value>::New(pIsolate, m_hValue));
 }
 
-void CFXJSE_Value::SetHostObject(CFXJSE_HostObject* pObject,
+void CFXJSE_Value::SetHostObject(v8::Isolate* pIsolate,
+                                 CFXJSE_HostObject* pObject,
                                  CFXJSE_Class* pClass) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(),
-                 pObject->NewBoundV8Object(GetIsolate(),
-                                           pClass->GetTemplate(GetIsolate())));
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  m_hValue.Reset(pIsolate, pObject->NewBoundV8Object(
+                               pIsolate, pClass->GetTemplate(pIsolate)));
 }
 
-void CFXJSE_Value::ClearHostObject() {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  FXJSE_ClearObjectBinding(m_hValue.Get(GetIsolate()).As<v8::Object>());
-  v8::Local<v8::Value> hValue = v8::Null(GetIsolate());
-  m_hValue.Reset(GetIsolate(), hValue);
+void CFXJSE_Value::ClearHostObject(v8::Isolate* pIsolate) {
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  FXJSE_ClearObjectBinding(m_hValue.Get(pIsolate).As<v8::Object>());
+  v8::Local<v8::Value> hValue = v8::Null(pIsolate);
+  m_hValue.Reset(pIsolate, hValue);
 }
 
 void CFXJSE_Value::SetArray(
+    v8::Isolate* pIsolate,
     const std::vector<std::unique_ptr<CFXJSE_Value>>& values) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Array> hArrayObject =
-      v8::Array::New(GetIsolate(), values.size());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Array> hArrayObject = v8::Array::New(pIsolate, values.size());
   uint32_t count = 0;
   for (auto& v : values) {
     if (v->IsEmpty())
-      v->SetUndefined();
-    fxv8::ReentrantPutArrayElementHelper(GetIsolate(), hArrayObject, count++,
-                                         v->GetValue());
+      v->SetUndefined(pIsolate);
+    fxv8::ReentrantPutArrayElementHelper(pIsolate, hArrayObject, count++,
+                                         v->GetValue(pIsolate));
   }
-  m_hValue.Reset(GetIsolate(), hArrayObject);
+  m_hValue.Reset(pIsolate, hArrayObject);
 }
 
-void CFXJSE_Value::SetFloat(float fFloat) {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(),
-                 fxv8::NewNumberHelper(GetIsolate(), ftod(fFloat)));
+void CFXJSE_Value::SetFloat(v8::Isolate* pIsolate, float fFloat) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewNumberHelper(pIsolate, ftod(fFloat)));
 }
 
-bool CFXJSE_Value::SetObjectProperty(ByteStringView szPropName,
+bool CFXJSE_Value::SetObjectProperty(v8::Isolate* pIsolate,
+                                     ByteStringView szPropName,
                                      CFXJSE_Value* lpPropValue) {
   if (lpPropValue->IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject = GetValue();
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = GetValue(pIsolate);
   if (!hObject->IsObject())
     return false;
 
   return fxv8::ReentrantPutObjectPropertyHelper(
-      GetIsolate(), hObject.As<v8::Object>(), szPropName,
-      lpPropValue->GetValue());
+      pIsolate, hObject.As<v8::Object>(), szPropName,
+      lpPropValue->GetValue(pIsolate));
 }
 
-bool CFXJSE_Value::GetObjectProperty(ByteStringView szPropName,
+bool CFXJSE_Value::GetObjectProperty(v8::Isolate* pIsolate,
+                                     ByteStringView szPropName,
                                      CFXJSE_Value* lpPropValue) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject = GetValue();
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = GetValue(pIsolate);
   if (!hObject->IsObject())
     return false;
 
-  lpPropValue->ForceSetValue(fxv8::ReentrantGetObjectPropertyHelper(
-      GetIsolate(), hObject.As<v8::Object>(), szPropName));
+  lpPropValue->ForceSetValue(
+      pIsolate, fxv8::ReentrantGetObjectPropertyHelper(
+                    pIsolate, hObject.As<v8::Object>(), szPropName));
   return true;
 }
 
-bool CFXJSE_Value::GetObjectPropertyByIdx(uint32_t uPropIdx,
+bool CFXJSE_Value::GetObjectPropertyByIdx(v8::Isolate* pIsolate,
+                                          uint32_t uPropIdx,
                                           CFXJSE_Value* lpPropValue) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject = GetValue();
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = GetValue(pIsolate);
   if (!hObject->IsArray())
     return false;
 
-  lpPropValue->ForceSetValue(fxv8::ReentrantGetArrayElementHelper(
-      GetIsolate(), hObject.As<v8::Array>(), uPropIdx));
+  lpPropValue->ForceSetValue(pIsolate,
+                             fxv8::ReentrantGetArrayElementHelper(
+                                 pIsolate, hObject.As<v8::Array>(), uPropIdx));
   return true;
 }
 
-bool CFXJSE_Value::DeleteObjectProperty(ByteStringView szPropName) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+bool CFXJSE_Value::DeleteObjectProperty(v8::Isolate* pIsolate,
+                                        ByteStringView szPropName) {
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hObject->IsObject() &&
          hObject.As<v8::Object>()
-             ->Delete(GetIsolate()->GetCurrentContext(),
-                      fxv8::NewStringHelper(GetIsolate(), szPropName))
+             ->Delete(pIsolate->GetCurrentContext(),
+                      fxv8::NewStringHelper(pIsolate, szPropName))
              .FromJust();
 }
 
-bool CFXJSE_Value::HasObjectOwnProperty(ByteStringView szPropName,
+bool CFXJSE_Value::HasObjectOwnProperty(v8::Isolate* pIsolate,
+                                        ByteStringView szPropName,
                                         bool bUseTypeGetter) {
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   if (!hObject->IsObject())
     return false;
 
-  v8::Local<v8::String> hKey = fxv8::NewStringHelper(GetIsolate(), szPropName);
+  v8::Local<v8::String> hKey = fxv8::NewStringHelper(pIsolate, szPropName);
   return hObject.As<v8::Object>()
-             ->HasRealNamedProperty(GetIsolate()->GetCurrentContext(), hKey)
+             ->HasRealNamedProperty(pIsolate->GetCurrentContext(), hKey)
              .FromJust() ||
          (bUseTypeGetter &&
           hObject.As<v8::Object>()
-              ->HasOwnProperty(GetIsolate()->GetCurrentContext(), hKey)
+              ->HasOwnProperty(pIsolate->GetCurrentContext(), hKey)
               .FromMaybe(false));
 }
 
-bool CFXJSE_Value::SetObjectOwnProperty(ByteStringView szPropName,
+bool CFXJSE_Value::SetObjectOwnProperty(v8::Isolate* pIsolate,
+                                        ByteStringView szPropName,
                                         CFXJSE_Value* lpPropValue) {
   ASSERT(lpPropValue);
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
-  v8::Local<v8::Value> hObject =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
+  v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   if (!hObject->IsObject())
     return false;
 
-  v8::Local<v8::String> hPropName =
-      fxv8::NewStringHelper(GetIsolate(), szPropName);
+  v8::Local<v8::String> hPropName = fxv8::NewStringHelper(pIsolate, szPropName);
   v8::Local<v8::Value> pValue =
-      v8::Local<v8::Value>::New(GetIsolate(), lpPropValue->m_hValue);
+      v8::Local<v8::Value>::New(pIsolate, lpPropValue->m_hValue);
   return hObject.As<v8::Object>()
-      ->DefineOwnProperty(GetIsolate()->GetCurrentContext(), hPropName, pValue)
+      ->DefineOwnProperty(pIsolate->GetCurrentContext(), hPropName, pValue)
       .FromMaybe(false);
 }
 
-bool CFXJSE_Value::SetFunctionBind(CFXJSE_Value* lpOldFunction,
+bool CFXJSE_Value::SetFunctionBind(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* lpOldFunction,
                                    CFXJSE_Value* lpNewThis) {
   ASSERT(lpOldFunction);
   ASSERT(lpNewThis);
 
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   v8::Local<v8::Value> rgArgs[2];
   v8::Local<v8::Value> hOldFunction =
-      v8::Local<v8::Value>::New(GetIsolate(), lpOldFunction->DirectGetValue());
+      v8::Local<v8::Value>::New(pIsolate, lpOldFunction->DirectGetValue());
   if (!fxv8::IsFunction(hOldFunction))
     return false;
 
   rgArgs[0] = hOldFunction;
   v8::Local<v8::Value> hNewThis =
-      v8::Local<v8::Value>::New(GetIsolate(), lpNewThis->DirectGetValue());
+      v8::Local<v8::Value>::New(pIsolate, lpNewThis->DirectGetValue());
   if (hNewThis.IsEmpty())
     return false;
 
   rgArgs[1] = hNewThis;
   v8::Local<v8::String> hBinderFuncSource =
-      fxv8::NewStringHelper(GetIsolate(),
+      fxv8::NewStringHelper(pIsolate,
                             "(function (oldfunction, newthis) { return "
                             "oldfunction.bind(newthis); })");
-  v8::Local<v8::Context> hContext = GetIsolate()->GetCurrentContext();
+  v8::Local<v8::Context> hContext = pIsolate->GetCurrentContext();
   v8::Local<v8::Function> hBinderFunc =
       v8::Script::Compile(hContext, hBinderFuncSource)
           .ToLocalChecked()
@@ -238,166 +241,157 @@
   if (!fxv8::IsFunction(hBoundFunction))
     return false;
 
-  m_hValue.Reset(GetIsolate(), hBoundFunction);
+  m_hValue.Reset(pIsolate, hBoundFunction);
   return true;
 }
 
-v8::Local<v8::Value> CFXJSE_Value::GetValue() const {
-  return v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+v8::Local<v8::Value> CFXJSE_Value::GetValue(v8::Isolate* pIsolate) const {
+  return v8::Local<v8::Value>::New(pIsolate, m_hValue);
 }
 
 bool CFXJSE_Value::IsEmpty() const {
   return m_hValue.IsEmpty();
 }
 
-bool CFXJSE_Value::IsUndefined() const {
+bool CFXJSE_Value::IsUndefined(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsUndefined();
 }
 
-bool CFXJSE_Value::IsNull() const {
+bool CFXJSE_Value::IsNull(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsNull();
 }
 
-bool CFXJSE_Value::IsBoolean() const {
+bool CFXJSE_Value::IsBoolean(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsBoolean();
 }
 
-bool CFXJSE_Value::IsString() const {
+bool CFXJSE_Value::IsString(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsString();
 }
 
-bool CFXJSE_Value::IsNumber() const {
+bool CFXJSE_Value::IsNumber(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsNumber();
 }
 
-bool CFXJSE_Value::IsInteger() const {
+bool CFXJSE_Value::IsInteger(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsInt32();
 }
 
-bool CFXJSE_Value::IsObject() const {
+bool CFXJSE_Value::IsObject(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsObject();
 }
 
-bool CFXJSE_Value::IsArray() const {
+bool CFXJSE_Value::IsArray(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsArray();
 }
 
-bool CFXJSE_Value::IsFunction() const {
+bool CFXJSE_Value::IsFunction(v8::Isolate* pIsolate) const {
   if (IsEmpty())
     return false;
 
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  v8::Local<v8::Value> hValue =
-      v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(pIsolate, m_hValue);
   return hValue->IsFunction();
 }
 
-bool CFXJSE_Value::ToBoolean() const {
+bool CFXJSE_Value::ToBoolean(v8::Isolate* pIsolate) const {
   ASSERT(!IsEmpty());
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   return fxv8::ReentrantToBooleanHelper(
-      GetIsolate(), v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
+      pIsolate, v8::Local<v8::Value>::New(pIsolate, m_hValue));
 }
 
-float CFXJSE_Value::ToFloat() const {
-  return static_cast<float>(ToDouble());
+float CFXJSE_Value::ToFloat(v8::Isolate* pIsolate) const {
+  return static_cast<float>(ToDouble(pIsolate));
 }
 
-double CFXJSE_Value::ToDouble() const {
+double CFXJSE_Value::ToDouble(v8::Isolate* pIsolate) const {
   ASSERT(!IsEmpty());
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   return fxv8::ReentrantToDoubleHelper(
-      GetIsolate(), v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
+      pIsolate, v8::Local<v8::Value>::New(pIsolate, m_hValue));
 }
 
-int32_t CFXJSE_Value::ToInteger() const {
+int32_t CFXJSE_Value::ToInteger(v8::Isolate* pIsolate) const {
   ASSERT(!IsEmpty());
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   return fxv8::ReentrantToInt32Helper(
-      GetIsolate(), v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
+      pIsolate, v8::Local<v8::Value>::New(pIsolate, m_hValue));
 }
 
-ByteString CFXJSE_Value::ToString() const {
+ByteString CFXJSE_Value::ToString(v8::Isolate* pIsolate) const {
   ASSERT(!IsEmpty());
-  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
+  CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate);
   return fxv8::ReentrantToByteStringHelper(
-      GetIsolate(), v8::Local<v8::Value>::New(GetIsolate(), m_hValue));
+      pIsolate, v8::Local<v8::Value>::New(pIsolate, m_hValue));
 }
 
-void CFXJSE_Value::SetUndefined() {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewUndefinedHelper(GetIsolate()));
+void CFXJSE_Value::SetUndefined(v8::Isolate* pIsolate) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewUndefinedHelper(pIsolate));
 }
 
-void CFXJSE_Value::SetNull() {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewNullHelper(GetIsolate()));
+void CFXJSE_Value::SetNull(v8::Isolate* pIsolate) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewNullHelper(pIsolate));
 }
 
-void CFXJSE_Value::SetBoolean(bool bBoolean) {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewBooleanHelper(GetIsolate(), bBoolean));
+void CFXJSE_Value::SetBoolean(v8::Isolate* pIsolate, bool bBoolean) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewBooleanHelper(pIsolate, bBoolean));
 }
 
-void CFXJSE_Value::SetInteger(int32_t nInteger) {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewNumberHelper(GetIsolate(), nInteger));
+void CFXJSE_Value::SetInteger(v8::Isolate* pIsolate, int32_t nInteger) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewNumberHelper(pIsolate, nInteger));
 }
 
-void CFXJSE_Value::SetDouble(double dDouble) {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewNumberHelper(GetIsolate(), dDouble));
+void CFXJSE_Value::SetDouble(v8::Isolate* pIsolate, double dDouble) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewNumberHelper(pIsolate, dDouble));
 }
 
-void CFXJSE_Value::SetString(ByteStringView szString) {
-  CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate());
-  m_hValue.Reset(GetIsolate(), fxv8::NewStringHelper(GetIsolate(), szString));
+void CFXJSE_Value::SetString(v8::Isolate* pIsolate, ByteStringView szString) {
+  CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate);
+  m_hValue.Reset(pIsolate, fxv8::NewStringHelper(pIsolate, szString));
 }
diff --git a/fxjs/xfa/cfxjse_value.h b/fxjs/xfa/cfxjse_value.h
index a588633..9d07ad0 100644
--- a/fxjs/xfa/cfxjse_value.h
+++ b/fxjs/xfa/cfxjse_value.h
@@ -25,56 +25,70 @@
   ~CFXJSE_Value();
 
   bool IsEmpty() const;
-  bool IsUndefined() const;
-  bool IsNull() const;
-  bool IsBoolean() const;
-  bool IsString() const;
-  bool IsNumber() const;
-  bool IsInteger() const;
-  bool IsObject() const;
-  bool IsArray() const;
-  bool IsFunction() const;
-  bool ToBoolean() const;
-  float ToFloat() const;
-  double ToDouble() const;
-  int32_t ToInteger() const;
-  ByteString ToString() const;
-  WideString ToWideString() const {
-    return WideString::FromUTF8(ToString().AsStringView());
+  bool IsUndefined(v8::Isolate* pIsolate) const;
+  bool IsNull(v8::Isolate* pIsolate) const;
+  bool IsBoolean(v8::Isolate* pIsolate) const;
+  bool IsString(v8::Isolate* pIsolate) const;
+  bool IsNumber(v8::Isolate* pIsolate) const;
+  bool IsInteger(v8::Isolate* pIsolate) const;
+  bool IsObject(v8::Isolate* pIsolate) const;
+  bool IsArray(v8::Isolate* pIsolate) const;
+  bool IsFunction(v8::Isolate* pIsolate) const;
+  bool ToBoolean(v8::Isolate* pIsolate) const;
+  float ToFloat(v8::Isolate* pIsolate) const;
+  double ToDouble(v8::Isolate* pIsolate) const;
+  int32_t ToInteger(v8::Isolate* pIsolate) const;
+  ByteString ToString(v8::Isolate* pIsolate) const;
+  WideString ToWideString(v8::Isolate* pIsolate) const {
+    return WideString::FromUTF8(ToString(pIsolate).AsStringView());
   }
-  CFXJSE_HostObject* ToHostObject() const;
+  CFXJSE_HostObject* ToHostObject(v8::Isolate* pIsolate) const;
 
-  void SetUndefined();
-  void SetNull();
-  void SetBoolean(bool bBoolean);
-  void SetInteger(int32_t nInteger);
-  void SetDouble(double dDouble);
-  void SetString(ByteStringView szString);
-  void SetFloat(float fFloat);
+  void SetUndefined(v8::Isolate* pIsolate);
+  void SetNull(v8::Isolate* pIsolate);
+  void SetBoolean(v8::Isolate* pIsolate, bool bBoolean);
+  void SetInteger(v8::Isolate* pIsolate, int32_t nInteger);
+  void SetDouble(v8::Isolate* pIsolate, double dDouble);
+  void SetString(v8::Isolate* pIsolate, ByteStringView szString);
+  void SetFloat(v8::Isolate* pIsolate, float fFloat);
 
-  void SetHostObject(CFXJSE_HostObject* pObject, CFXJSE_Class* pClass);
-  void ClearHostObject();
+  void SetHostObject(v8::Isolate* pIsolate,
+                     CFXJSE_HostObject* lpObject,
+                     CFXJSE_Class* pClass);
+  void ClearHostObject(v8::Isolate* pIsolate);
 
-  void SetArray(const std::vector<std::unique_ptr<CFXJSE_Value>>& values);
+  void SetArray(v8::Isolate* pIsolate,
+                const std::vector<std::unique_ptr<CFXJSE_Value>>& values);
 
-  bool GetObjectProperty(ByteStringView szPropName, CFXJSE_Value* lpPropValue);
-  bool SetObjectProperty(ByteStringView szPropName, CFXJSE_Value* lpPropValue);
-  bool GetObjectPropertyByIdx(uint32_t uPropIdx, CFXJSE_Value* lpPropValue);
-  bool DeleteObjectProperty(ByteStringView szPropName);
-  bool HasObjectOwnProperty(ByteStringView szPropName, bool bUseTypeGetter);
-  bool SetObjectOwnProperty(ByteStringView szPropName,
+  bool GetObjectProperty(v8::Isolate* pIsolate,
+                         ByteStringView szPropName,
+                         CFXJSE_Value* lpPropValue);
+  bool SetObjectProperty(v8::Isolate* pIsolate,
+                         ByteStringView szPropName,
+                         CFXJSE_Value* lpPropValue);
+  bool GetObjectPropertyByIdx(v8::Isolate* pIsolate,
+                              uint32_t uPropIdx,
+                              CFXJSE_Value* lpPropValue);
+  bool DeleteObjectProperty(v8::Isolate* pIsolate, ByteStringView szPropName);
+  bool HasObjectOwnProperty(v8::Isolate* pIsolate,
+                            ByteStringView szPropName,
+                            bool bUseTypeGetter);
+  bool SetObjectOwnProperty(v8::Isolate* pIsolate,
+                            ByteStringView szPropName,
                             CFXJSE_Value* lpPropValue);
-  bool SetFunctionBind(CFXJSE_Value* lpOldFunction, CFXJSE_Value* lpNewThis);
+  bool SetFunctionBind(v8::Isolate* pIsolate,
+                       CFXJSE_Value* lpOldFunction,
+                       CFXJSE_Value* lpNewThis);
 
-  v8::Local<v8::Value> GetValue() const;
+  v8::Local<v8::Value> GetValue(v8::Isolate* pIsolate) const;
   const v8::Global<v8::Value>& DirectGetValue() const { return m_hValue; }
-  void ForceSetValue(v8::Local<v8::Value> hValue) {
-    m_hValue.Reset(GetIsolate(), hValue);
+  void ForceSetValue(v8::Isolate* pIsolate, v8::Local<v8::Value> hValue) {
+    m_hValue.Reset(pIsolate, hValue);
   }
-  void Assign(const CFXJSE_Value* lpValue) {
+  void Assign(v8::Isolate* pIsolate, const CFXJSE_Value* lpValue) {
     ASSERT(lpValue);
     if (lpValue) {
-      m_hValue.Reset(GetIsolate(), lpValue->m_hValue);
+      m_hValue.Reset(pIsolate, lpValue->m_hValue);
     } else {
       m_hValue.Reset();
     }
@@ -85,9 +99,6 @@
   CFXJSE_Value(const CFXJSE_Value&) = delete;
   CFXJSE_Value& operator=(const CFXJSE_Value&) = delete;
 
-  v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); }
-
-  UnownedPtr<v8::Isolate> const m_pIsolate;
   v8::Global<v8::Value> m_hValue;
 };
 
diff --git a/fxjs/xfa/cfxjse_value_embeddertest.cpp b/fxjs/xfa/cfxjse_value_embeddertest.cpp
index 4223e5d..42617d5 100644
--- a/fxjs/xfa/cfxjse_value_embeddertest.cpp
+++ b/fxjs/xfa/cfxjse_value_embeddertest.cpp
@@ -19,14 +19,14 @@
 
   auto pValue = std::make_unique<CFXJSE_Value>(isolate());
   EXPECT_TRUE(pValue->IsEmpty());
-  EXPECT_FALSE(pValue->IsUndefined());
-  EXPECT_FALSE(pValue->IsNull());
-  EXPECT_FALSE(pValue->IsBoolean());
-  EXPECT_FALSE(pValue->IsString());
-  EXPECT_FALSE(pValue->IsNumber());
-  EXPECT_FALSE(pValue->IsObject());
-  EXPECT_FALSE(pValue->IsArray());
-  EXPECT_FALSE(pValue->IsFunction());
+  EXPECT_FALSE(pValue->IsUndefined(isolate()));
+  EXPECT_FALSE(pValue->IsNull(isolate()));
+  EXPECT_FALSE(pValue->IsBoolean(isolate()));
+  EXPECT_FALSE(pValue->IsString(isolate()));
+  EXPECT_FALSE(pValue->IsNumber(isolate()));
+  EXPECT_FALSE(pValue->IsObject(isolate()));
+  EXPECT_FALSE(pValue->IsArray(isolate()));
+  EXPECT_FALSE(pValue->IsFunction(isolate()));
 }
 
 TEST_F(CFXJSE_ValueEmbedderTest, EmptyArrayInsert) {
@@ -38,6 +38,6 @@
   vec.push_back(std::move(pValue));
 
   CFXJSE_Value array(isolate());
-  array.SetArray(vec);
-  EXPECT_TRUE(array.IsArray());
+  array.SetArray(isolate(), vec);
+  EXPECT_TRUE(array.IsArray(isolate()));
 }
diff --git a/fxjs/xfa/cjx_boolean.cpp b/fxjs/xfa/cjx_boolean.cpp
index 5c3f183..75797d8 100644
--- a/fxjs/xfa/cjx_boolean.cpp
+++ b/fxjs/xfa/cjx_boolean.cpp
@@ -17,17 +17,18 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Boolean::defaultValue(CFXJSE_Value* pValue,
+void CJX_Boolean::defaultValue(v8::Isolate* pIsolate,
+                               CFXJSE_Value* pValue,
                                bool bSetting,
                                XFA_Attribute eAttribute) {
   if (!bSetting) {
-    pValue->SetBoolean(GetContent(true).EqualsASCII("1"));
+    pValue->SetBoolean(pIsolate, GetContent(true).EqualsASCII("1"));
     return;
   }
 
   ByteString newValue;
-  if (pValue && !(pValue->IsNull() || pValue->IsUndefined()))
-    newValue = pValue->ToString();
+  if (pValue && !(pValue->IsNull(pIsolate) || pValue->IsUndefined(pIsolate)))
+    newValue = pValue->ToString(pIsolate);
 
   int32_t iValue = FXSYS_atoi(newValue.c_str());
   WideString wsNewValue(iValue == 0 ? L"0" : L"1");
@@ -39,8 +40,9 @@
   SetContent(wsNewValue, wsFormatValue, true, true, true);
 }
 
-void CJX_Boolean::value(CFXJSE_Value* pValue,
+void CJX_Boolean::value(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {
-  defaultValue(pValue, bSetting, eAttribute);
+  defaultValue(pIsolate, pValue, bSetting, eAttribute);
 }
diff --git a/fxjs/xfa/cjx_datawindow.cpp b/fxjs/xfa/cjx_datawindow.cpp
index 9a189ec..7e9ab42 100644
--- a/fxjs/xfa/cjx_datawindow.cpp
+++ b/fxjs/xfa/cjx_datawindow.cpp
@@ -52,18 +52,22 @@
   return CJS_Result::Success();
 }
 
-void CJX_DataWindow::recordsBefore(CFXJSE_Value* pValue,
+void CJX_DataWindow::recordsBefore(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {}
 
-void CJX_DataWindow::currentRecordNumber(CFXJSE_Value* pValue,
+void CJX_DataWindow::currentRecordNumber(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pValue,
                                          bool bSetting,
                                          XFA_Attribute eAttribute) {}
 
-void CJX_DataWindow::recordsAfter(CFXJSE_Value* pValue,
+void CJX_DataWindow::recordsAfter(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {}
 
-void CJX_DataWindow::isDefined(CFXJSE_Value* pValue,
+void CJX_DataWindow::isDefined(v8::Isolate* pIsolate,
+                               CFXJSE_Value* pValue,
                                bool bSetting,
                                XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_delta.cpp b/fxjs/xfa/cjx_delta.cpp
index 9d17eaa..ede7e71 100644
--- a/fxjs/xfa/cjx_delta.cpp
+++ b/fxjs/xfa/cjx_delta.cpp
@@ -32,14 +32,17 @@
   return CJS_Result::Success();
 }
 
-void CJX_Delta::currentValue(CFXJSE_Value* pValue,
+void CJX_Delta::currentValue(v8::Isolate* pIsolate,
+                             CFXJSE_Value* pValue,
                              bool bSetting,
                              XFA_Attribute eAttribute) {}
 
-void CJX_Delta::savedValue(CFXJSE_Value* pValue,
+void CJX_Delta::savedValue(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
                            bool bSetting,
                            XFA_Attribute eAttribute) {}
 
-void CJX_Delta::target(CFXJSE_Value* pValue,
+void CJX_Delta::target(v8::Isolate* pIsolate,
+                       CFXJSE_Value* pValue,
                        bool bSetting,
                        XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_draw.cpp b/fxjs/xfa/cjx_draw.cpp
index 4e8ddc1..5705ecc 100644
--- a/fxjs/xfa/cjx_draw.cpp
+++ b/fxjs/xfa/cjx_draw.cpp
@@ -17,32 +17,33 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Draw::rawValue(CFXJSE_Value* pValue,
+void CJX_Draw::rawValue(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {
-  defaultValue(pValue, bSetting, eAttribute);
+  defaultValue(pIsolate, pValue, bSetting, eAttribute);
 }
 
-void CJX_Draw::defaultValue(CFXJSE_Value* pValue,
+void CJX_Draw::defaultValue(v8::Isolate* pIsolate,
+                            CFXJSE_Value* pValue,
                             bool bSetting,
                             XFA_Attribute eAttribute) {
   if (!bSetting) {
     WideString content = GetContent(true);
     if (content.IsEmpty())
-      pValue->SetNull();
+      pValue->SetNull(pIsolate);
     else
-      pValue->SetString(content.ToUTF8().AsStringView());
-
+      pValue->SetString(pIsolate, content.ToUTF8().AsStringView());
     return;
   }
 
-  if (!pValue || !pValue->IsString())
+  if (!pValue || !pValue->IsString(pIsolate))
     return;
 
   ASSERT(GetXFANode()->IsWidgetReady());
   if (GetXFANode()->GetFFWidgetType() != XFA_FFWidgetType::kText)
     return;
 
-  WideString wsNewValue = pValue->ToWideString();
+  WideString wsNewValue = pValue->ToWideString(pIsolate);
   SetContent(wsNewValue, wsNewValue, true, true, true);
 }
diff --git a/fxjs/xfa/cjx_encrypt.cpp b/fxjs/xfa/cjx_encrypt.cpp
index f50133d..8fa8f9f 100644
--- a/fxjs/xfa/cjx_encrypt.cpp
+++ b/fxjs/xfa/cjx_encrypt.cpp
@@ -16,6 +16,7 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Encrypt::format(CFXJSE_Value* pValue,
+void CJX_Encrypt::format(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_eventpseudomodel.cpp b/fxjs/xfa/cjx_eventpseudomodel.cpp
index f7d757a..37b01a2 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.cpp
+++ b/fxjs/xfa/cjx_eventpseudomodel.cpp
@@ -19,28 +19,37 @@
 
 namespace {
 
-void StringProperty(CFXJSE_Value* pReturn, WideString* wsValue, bool bSetting) {
+void StringProperty(v8::Isolate* pIsolate,
+                    CFXJSE_Value* pReturn,
+                    WideString* wsValue,
+                    bool bSetting) {
   if (bSetting) {
-    *wsValue = pReturn->ToWideString();
+    *wsValue = pReturn->ToWideString(pIsolate);
     return;
   }
-  pReturn->SetString(wsValue->ToUTF8().AsStringView());
+  pReturn->SetString(pIsolate, wsValue->ToUTF8().AsStringView());
 }
 
-void IntegerProperty(CFXJSE_Value* pReturn, int32_t* iValue, bool bSetting) {
+void IntegerProperty(v8::Isolate* pIsolate,
+                     CFXJSE_Value* pReturn,
+                     int32_t* iValue,
+                     bool bSetting) {
   if (bSetting) {
-    *iValue = pReturn->ToInteger();
+    *iValue = pReturn->ToInteger(pIsolate);
     return;
   }
-  pReturn->SetInteger(*iValue);
+  pReturn->SetInteger(pIsolate, *iValue);
 }
 
-void BooleanProperty(CFXJSE_Value* pReturn, bool* bValue, bool bSetting) {
+void BooleanProperty(v8::Isolate* pIsolate,
+                     CFXJSE_Value* pReturn,
+                     bool* bValue,
+                     bool bSetting) {
   if (bSetting) {
-    *bValue = pReturn->ToBoolean();
+    *bValue = pReturn->ToBoolean(pIsolate);
     return;
   }
-  pReturn->SetBoolean(*bValue);
+  pReturn->SetBoolean(pIsolate, *bValue);
 }
 
 }  // namespace
@@ -60,49 +69,57 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_EventPseudoModel::cancelAction(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::cancelAction(v8::Isolate* pIsolate,
+                                        CFXJSE_Value* pValue,
                                         bool bSetting,
                                         XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::CancelAction, bSetting);
+  Property(pIsolate, pValue, XFA_Event::CancelAction, bSetting);
 }
 
-void CJX_EventPseudoModel::change(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::change(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Change, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Change, bSetting);
 }
 
-void CJX_EventPseudoModel::commitKey(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::commitKey(v8::Isolate* pIsolate,
+                                     CFXJSE_Value* pValue,
                                      bool bSetting,
                                      XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::CommitKey, bSetting);
+  Property(pIsolate, pValue, XFA_Event::CommitKey, bSetting);
 }
 
-void CJX_EventPseudoModel::fullText(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::fullText(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::FullText, bSetting);
+  Property(pIsolate, pValue, XFA_Event::FullText, bSetting);
 }
 
-void CJX_EventPseudoModel::keyDown(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::keyDown(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Keydown, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Keydown, bSetting);
 }
 
-void CJX_EventPseudoModel::modifier(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::modifier(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Modifier, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Modifier, bSetting);
 }
 
-void CJX_EventPseudoModel::newContentType(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::newContentType(v8::Isolate* pIsolate,
+                                          CFXJSE_Value* pValue,
                                           bool bSetting,
                                           XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::NewContentType, bSetting);
+  Property(pIsolate, pValue, XFA_Event::NewContentType, bSetting);
 }
 
-void CJX_EventPseudoModel::newText(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::newText(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
   if (bSetting)
@@ -113,61 +130,71 @@
   if (!pEventParam)
     return;
 
-  pValue->SetString(pEventParam->GetNewText().ToUTF8().AsStringView());
+  pValue->SetString(pIsolate,
+                    pEventParam->GetNewText().ToUTF8().AsStringView());
 }
 
-void CJX_EventPseudoModel::prevContentType(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::prevContentType(v8::Isolate* pIsolate,
+                                           CFXJSE_Value* pValue,
                                            bool bSetting,
                                            XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::PreviousContentType, bSetting);
+  Property(pIsolate, pValue, XFA_Event::PreviousContentType, bSetting);
 }
 
-void CJX_EventPseudoModel::prevText(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::prevText(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::PreviousText, bSetting);
+  Property(pIsolate, pValue, XFA_Event::PreviousText, bSetting);
 }
 
-void CJX_EventPseudoModel::reenter(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::reenter(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Reenter, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Reenter, bSetting);
 }
 
-void CJX_EventPseudoModel::selEnd(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::selEnd(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::SelectionEnd, bSetting);
+  Property(pIsolate, pValue, XFA_Event::SelectionEnd, bSetting);
 }
 
-void CJX_EventPseudoModel::selStart(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::selStart(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::SelectionStart, bSetting);
+  Property(pIsolate, pValue, XFA_Event::SelectionStart, bSetting);
 }
 
-void CJX_EventPseudoModel::shift(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::shift(v8::Isolate* pIsolate,
+                                 CFXJSE_Value* pValue,
                                  bool bSetting,
                                  XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Shift, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Shift, bSetting);
 }
 
-void CJX_EventPseudoModel::soapFaultCode(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::soapFaultCode(v8::Isolate* pIsolate,
+                                         CFXJSE_Value* pValue,
                                          bool bSetting,
                                          XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::SoapFaultCode, bSetting);
+  Property(pIsolate, pValue, XFA_Event::SoapFaultCode, bSetting);
 }
 
-void CJX_EventPseudoModel::soapFaultString(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::soapFaultString(v8::Isolate* pIsolate,
+                                           CFXJSE_Value* pValue,
                                            bool bSetting,
                                            XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::SoapFaultString, bSetting);
+  Property(pIsolate, pValue, XFA_Event::SoapFaultString, bSetting);
 }
 
-void CJX_EventPseudoModel::target(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::target(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
-  Property(pValue, XFA_Event::Target, bSetting);
+  Property(pIsolate, pValue, XFA_Event::Target, bSetting);
 }
 
 CJS_Result CJX_EventPseudoModel::emit(
@@ -201,7 +228,8 @@
   return CJS_Result::Success();
 }
 
-void CJX_EventPseudoModel::Property(CFXJSE_Value* pValue,
+void CJX_EventPseudoModel::Property(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     XFA_Event dwFlag,
                                     bool bSetting) {
   // Only the cancelAction, selStart, selEnd and change properties are writable.
@@ -218,40 +246,43 @@
 
   switch (dwFlag) {
     case XFA_Event::CancelAction:
-      BooleanProperty(pValue, &pEventParam->m_bCancelAction, bSetting);
+      BooleanProperty(pIsolate, pValue, &pEventParam->m_bCancelAction,
+                      bSetting);
       break;
     case XFA_Event::Change:
-      StringProperty(pValue, &pEventParam->m_wsChange, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsChange, bSetting);
       break;
     case XFA_Event::CommitKey:
-      IntegerProperty(pValue, &pEventParam->m_iCommitKey, bSetting);
+      IntegerProperty(pIsolate, pValue, &pEventParam->m_iCommitKey, bSetting);
       break;
     case XFA_Event::FullText:
-      StringProperty(pValue, &pEventParam->m_wsFullText, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsFullText, bSetting);
       break;
     case XFA_Event::Keydown:
-      BooleanProperty(pValue, &pEventParam->m_bKeyDown, bSetting);
+      BooleanProperty(pIsolate, pValue, &pEventParam->m_bKeyDown, bSetting);
       break;
     case XFA_Event::Modifier:
-      BooleanProperty(pValue, &pEventParam->m_bModifier, bSetting);
+      BooleanProperty(pIsolate, pValue, &pEventParam->m_bModifier, bSetting);
       break;
     case XFA_Event::NewContentType:
-      StringProperty(pValue, &pEventParam->m_wsNewContentType, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsNewContentType,
+                     bSetting);
       break;
     case XFA_Event::NewText:
       NOTREACHED();
       break;
     case XFA_Event::PreviousContentType:
-      StringProperty(pValue, &pEventParam->m_wsPrevContentType, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsPrevContentType,
+                     bSetting);
       break;
     case XFA_Event::PreviousText:
-      StringProperty(pValue, &pEventParam->m_wsPrevText, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsPrevText, bSetting);
       break;
     case XFA_Event::Reenter:
-      BooleanProperty(pValue, &pEventParam->m_bReenter, bSetting);
+      BooleanProperty(pIsolate, pValue, &pEventParam->m_bReenter, bSetting);
       break;
     case XFA_Event::SelectionEnd:
-      IntegerProperty(pValue, &pEventParam->m_iSelEnd, bSetting);
+      IntegerProperty(pIsolate, pValue, &pEventParam->m_iSelEnd, bSetting);
 
       pEventParam->m_iSelEnd = std::max(0, pEventParam->m_iSelEnd);
       pEventParam->m_iSelEnd =
@@ -261,7 +292,7 @@
           std::min(pEventParam->m_iSelStart, pEventParam->m_iSelEnd);
       break;
     case XFA_Event::SelectionStart:
-      IntegerProperty(pValue, &pEventParam->m_iSelStart, bSetting);
+      IntegerProperty(pIsolate, pValue, &pEventParam->m_iSelStart, bSetting);
       pEventParam->m_iSelStart = std::max(0, pEventParam->m_iSelStart);
       pEventParam->m_iSelStart =
           std::min(static_cast<size_t>(pEventParam->m_iSelStart),
@@ -270,13 +301,15 @@
           std::max(pEventParam->m_iSelStart, pEventParam->m_iSelEnd);
       break;
     case XFA_Event::Shift:
-      BooleanProperty(pValue, &pEventParam->m_bShift, bSetting);
+      BooleanProperty(pIsolate, pValue, &pEventParam->m_bShift, bSetting);
       break;
     case XFA_Event::SoapFaultCode:
-      StringProperty(pValue, &pEventParam->m_wsSoapFaultCode, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsSoapFaultCode,
+                     bSetting);
       break;
     case XFA_Event::SoapFaultString:
-      StringProperty(pValue, &pEventParam->m_wsSoapFaultString, bSetting);
+      StringProperty(pIsolate, pValue, &pEventParam->m_wsSoapFaultString,
+                     bSetting);
       break;
     case XFA_Event::Target:
     default:
diff --git a/fxjs/xfa/cjx_eventpseudomodel.h b/fxjs/xfa/cjx_eventpseudomodel.h
index a4e741f..e4a698b 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.h
+++ b/fxjs/xfa/cjx_eventpseudomodel.h
@@ -71,7 +71,10 @@
   static const TypeTag static_type__ = TypeTag::EventPseudoModel;
   static const CJX_MethodSpec MethodSpecs[];
 
-  void Property(CFXJSE_Value* pValue, XFA_Event dwFlag, bool bSetting);
+  void Property(v8::Isolate* pIsolate,
+                CFXJSE_Value* pValue,
+                XFA_Event dwFlag,
+                bool bSetting);
 };
 
 #endif  // FXJS_XFA_CJX_EVENTPSEUDOMODEL_H_
diff --git a/fxjs/xfa/cjx_exclgroup.cpp b/fxjs/xfa/cjx_exclgroup.cpp
index 7f17bc8..74807ee 100644
--- a/fxjs/xfa/cjx_exclgroup.cpp
+++ b/fxjs/xfa/cjx_exclgroup.cpp
@@ -115,7 +115,8 @@
       value->DirectGetValue().Get(runtime->GetIsolate()));
 }
 
-void CJX_ExclGroup::defaultValue(CFXJSE_Value* pValue,
+void CJX_ExclGroup::defaultValue(v8::Isolate* pIsolate,
+                                 CFXJSE_Value* pValue,
                                  bool bSetting,
                                  XFA_Attribute eAttribute) {
   CXFA_Node* node = GetXFANode();
@@ -123,31 +124,34 @@
     return;
 
   if (bSetting) {
-    node->SetSelectedMemberByValue(pValue->ToWideString().AsStringView(), true,
-                                   true, true);
+    node->SetSelectedMemberByValue(
+        pValue->ToWideString(pIsolate).AsStringView(), true, true, true);
     return;
   }
 
   WideString wsValue = GetContent(true);
   XFA_VERSION curVersion = GetDocument()->GetCurVersionMode();
   if (wsValue.IsEmpty() && curVersion >= XFA_VERSION_300) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
-  pValue->SetString(wsValue.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsValue.ToUTF8().AsStringView());
 }
 
-void CJX_ExclGroup::rawValue(CFXJSE_Value* pValue,
+void CJX_ExclGroup::rawValue(v8::Isolate* pIsolate,
+                             CFXJSE_Value* pValue,
                              bool bSetting,
                              XFA_Attribute eAttribute) {
-  defaultValue(pValue, bSetting, eAttribute);
+  defaultValue(pIsolate, pValue, bSetting, eAttribute);
 }
 
-void CJX_ExclGroup::transient(CFXJSE_Value* pValue,
+void CJX_ExclGroup::transient(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {}
 
-void CJX_ExclGroup::errorText(CFXJSE_Value* pValue,
+void CJX_ExclGroup::errorText(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
   if (bSetting)
diff --git a/fxjs/xfa/cjx_extras.cpp b/fxjs/xfa/cjx_extras.cpp
index a2e2eea..def230c 100644
--- a/fxjs/xfa/cjx_extras.cpp
+++ b/fxjs/xfa/cjx_extras.cpp
@@ -16,6 +16,7 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Extras::type(CFXJSE_Value* pValue,
+void CJX_Extras::type(v8::Isolate* pIsolate,
+                      CFXJSE_Value* pValue,
                       bool bSetting,
                       XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_field.cpp b/fxjs/xfa/cjx_field.cpp
index 4e7bc44..60f534e 100644
--- a/fxjs/xfa/cjx_field.cpp
+++ b/fxjs/xfa/cjx_field.cpp
@@ -242,7 +242,8 @@
       runtime->NewBoolean(iRet != XFA_EventError::kError));
 }
 
-void CJX_Field::defaultValue(CFXJSE_Value* pValue,
+void CJX_Field::defaultValue(v8::Isolate* pIsolate,
+                             CFXJSE_Value* pValue,
                              bool bSetting,
                              XFA_Attribute eAttribute) {
   CXFA_Node* xfaNode = GetXFANode();
@@ -252,12 +253,12 @@
   if (bSetting) {
     if (pValue) {
       xfaNode->SetPreNull(xfaNode->IsNull());
-      xfaNode->SetIsNull(pValue->IsNull());
+      xfaNode->SetIsNull(pValue->IsNull(pIsolate));
     }
 
     WideString wsNewText;
-    if (pValue && !(pValue->IsNull() || pValue->IsUndefined()))
-      wsNewText = pValue->ToWideString();
+    if (pValue && !(pValue->IsNull(pIsolate) || pValue->IsUndefined(pIsolate)))
+      wsNewText = pValue->ToWideString(pIsolate);
     if (xfaNode->GetUIChildNode()->GetElementType() == XFA_Element::NumericEdit)
       wsNewText = xfaNode->NumericLimit(wsNewText);
 
@@ -272,7 +273,7 @@
 
   WideString content = GetContent(true);
   if (content.IsEmpty()) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
 
@@ -282,24 +283,25 @@
     if (xfaNode->GetUIChildNode()->GetElementType() ==
             XFA_Element::NumericEdit &&
         (pNode->JSObject()->GetInteger(XFA_Attribute::FracDigits) == -1)) {
-      pValue->SetString(content.ToUTF8().AsStringView());
+      pValue->SetString(pIsolate, content.ToUTF8().AsStringView());
     } else {
       CFGAS_Decimal decimal(content.AsStringView());
-      pValue->SetFloat(decimal.ToFloat());
+      pValue->SetFloat(pIsolate, decimal.ToFloat());
     }
   } else if (pNode && pNode->GetElementType() == XFA_Element::Integer) {
-    pValue->SetInteger(FXSYS_wtoi(content.c_str()));
+    pValue->SetInteger(pIsolate, FXSYS_wtoi(content.c_str()));
   } else if (pNode && pNode->GetElementType() == XFA_Element::Boolean) {
-    pValue->SetBoolean(FXSYS_wtoi(content.c_str()) != 0);
+    pValue->SetBoolean(pIsolate, FXSYS_wtoi(content.c_str()) != 0);
   } else if (pNode && pNode->GetElementType() == XFA_Element::Float) {
     CFGAS_Decimal decimal(content.AsStringView());
-    pValue->SetFloat(decimal.ToFloat());
+    pValue->SetFloat(pIsolate, decimal.ToFloat());
   } else {
-    pValue->SetString(content.ToUTF8().AsStringView());
+    pValue->SetString(pIsolate, content.ToUTF8().AsStringView());
   }
 }
 
-void CJX_Field::editValue(CFXJSE_Value* pValue,
+void CJX_Field::editValue(v8::Isolate* pIsolate,
+                          CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_Attribute eAttribute) {
   CXFA_Node* node = GetXFANode();
@@ -307,20 +309,22 @@
     return;
 
   if (bSetting) {
-    node->SetValue(XFA_VALUEPICTURE_Edit, pValue->ToWideString());
+    node->SetValue(XFA_VALUEPICTURE_Edit, pValue->ToWideString(pIsolate));
     return;
   }
   pValue->SetString(
-      node->GetValue(XFA_VALUEPICTURE_Edit).ToUTF8().AsStringView());
+      pIsolate, node->GetValue(XFA_VALUEPICTURE_Edit).ToUTF8().AsStringView());
 }
 
-void CJX_Field::formatMessage(CFXJSE_Value* pValue,
+void CJX_Field::formatMessage(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
-  ScriptSomMessage(pValue, bSetting, XFA_SOM_FormatMessage);
+  ScriptSomMessage(pIsolate, pValue, bSetting, XFA_SOM_FormatMessage);
 }
 
-void CJX_Field::formattedValue(CFXJSE_Value* pValue,
+void CJX_Field::formattedValue(v8::Isolate* pIsolate,
+                               CFXJSE_Value* pValue,
                                bool bSetting,
                                XFA_Attribute eAttribute) {
   CXFA_Node* node = GetXFANode();
@@ -328,14 +332,16 @@
     return;
 
   if (bSetting) {
-    node->SetValue(XFA_VALUEPICTURE_Display, pValue->ToWideString());
+    node->SetValue(XFA_VALUEPICTURE_Display, pValue->ToWideString(pIsolate));
     return;
   }
   pValue->SetString(
+      pIsolate,
       node->GetValue(XFA_VALUEPICTURE_Display).ToUTF8().AsStringView());
 }
 
-void CJX_Field::length(CFXJSE_Value* pValue,
+void CJX_Field::length(v8::Isolate* pIsolate,
+                       CFXJSE_Value* pValue,
                        bool bSetting,
                        XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -345,23 +351,25 @@
 
   CXFA_Node* node = GetXFANode();
   if (!node->IsWidgetReady()) {
-    pValue->SetInteger(0);
+    pValue->SetInteger(pIsolate, 0);
     return;
   }
-  pValue->SetInteger(node->CountChoiceListItems(true));
+  pValue->SetInteger(pIsolate, node->CountChoiceListItems(true));
 }
 
-void CJX_Field::parentSubform(CFXJSE_Value* pValue,
+void CJX_Field::parentSubform(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetNull();
+  pValue->SetNull(pIsolate);
 }
 
-void CJX_Field::selectedIndex(CFXJSE_Value* pValue,
+void CJX_Field::selectedIndex(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
   CXFA_Node* node = GetXFANode();
@@ -369,11 +377,11 @@
     return;
 
   if (!bSetting) {
-    pValue->SetInteger(node->GetSelectedItem(0));
+    pValue->SetInteger(pIsolate, node->GetSelectedItem(0));
     return;
   }
 
-  int32_t iIndex = pValue->ToInteger();
+  int32_t iIndex = pValue->ToInteger(pIsolate);
   if (iIndex == -1) {
     node->ClearAllSelections();
     return;
@@ -382,8 +390,9 @@
   node->SetItemState(iIndex, true, true, true, true);
 }
 
-void CJX_Field::rawValue(CFXJSE_Value* pValue,
+void CJX_Field::rawValue(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {
-  defaultValue(pValue, bSetting, eAttribute);
+  defaultValue(pIsolate, pValue, bSetting, eAttribute);
 }
diff --git a/fxjs/xfa/cjx_form.cpp b/fxjs/xfa/cjx_form.cpp
index 6cb6c6b..d398437 100644
--- a/fxjs/xfa/cjx_form.cpp
+++ b/fxjs/xfa/cjx_form.cpp
@@ -130,14 +130,17 @@
       runtime->NewBoolean(iRet != XFA_EventError::kError));
 }
 
-void CJX_Form::checksumS(CFXJSE_Value* pValue,
+void CJX_Form::checksumS(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {
   if (bSetting) {
-    SetAttributeByEnum(XFA_Attribute::Checksum, pValue->ToWideString(), false);
+    SetAttributeByEnum(XFA_Attribute::Checksum, pValue->ToWideString(pIsolate),
+                       false);
     return;
   }
 
   Optional<WideString> checksum = TryAttribute(XFA_Attribute::Checksum, false);
-  pValue->SetString(checksum ? checksum->ToUTF8().AsStringView() : "");
+  pValue->SetString(pIsolate,
+                    checksum ? checksum->ToUTF8().AsStringView() : "");
 }
diff --git a/fxjs/xfa/cjx_handler.cpp b/fxjs/xfa/cjx_handler.cpp
index 21be88c..5cdf5b5 100644
--- a/fxjs/xfa/cjx_handler.cpp
+++ b/fxjs/xfa/cjx_handler.cpp
@@ -16,6 +16,7 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Handler::version(CFXJSE_Value* pValue,
+void CJX_Handler::version(v8::Isolate* pIsolate,
+                          CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index e4bd454..34be45d 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -76,7 +76,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_HostPseudoModel::appType(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::appType(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -87,10 +88,11 @@
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetString("Exchange");
+  pValue->SetString(pIsolate, "Exchange");
 }
 
-void CJX_HostPseudoModel::calculationsEnabled(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::calculationsEnabled(v8::Isolate* pIsolate,
+                                              CFXJSE_Value* pValue,
                                               bool bSetting,
                                               XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -99,13 +101,14 @@
 
   CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
   if (bSetting) {
-    hDoc->SetCalculationsEnabled(pValue->ToBoolean());
+    hDoc->SetCalculationsEnabled(pValue->ToBoolean(pIsolate));
     return;
   }
-  pValue->SetBoolean(hDoc->IsCalculationsEnabled());
+  pValue->SetBoolean(pIsolate, hDoc->IsCalculationsEnabled());
 }
 
-void CJX_HostPseudoModel::currentPage(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::currentPage(v8::Isolate* pIsolate,
+                                      CFXJSE_Value* pValue,
                                       bool bSetting,
                                       XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -114,13 +117,14 @@
 
   CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
   if (bSetting) {
-    hDoc->SetCurrentPage(pValue->ToInteger());
+    hDoc->SetCurrentPage(pValue->ToInteger(pIsolate));
     return;
   }
-  pValue->SetInteger(hDoc->GetCurrentPage());
+  pValue->SetInteger(pIsolate, hDoc->GetCurrentPage());
 }
 
-void CJX_HostPseudoModel::language(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::language(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -132,10 +136,12 @@
     return;
   }
   pValue->SetString(
+      pIsolate,
       pNotify->GetAppProvider()->GetLanguage().ToUTF8().AsStringView());
 }
 
-void CJX_HostPseudoModel::numPages(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::numPages(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -147,10 +153,11 @@
     ThrowException(WideString::FromASCII("Unable to set numPages value."));
     return;
   }
-  pValue->SetInteger(hDoc->CountPages());
+  pValue->SetInteger(pIsolate, hDoc->CountPages());
 }
 
-void CJX_HostPseudoModel::platform(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::platform(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -162,10 +169,12 @@
     return;
   }
   pValue->SetString(
+      pIsolate,
       pNotify->GetAppProvider()->GetPlatform().ToUTF8().AsStringView());
 }
 
-void CJX_HostPseudoModel::title(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::title(v8::Isolate* pIsolate,
+                                CFXJSE_Value* pValue,
                                 bool bSetting,
                                 XFA_Attribute eAttribute) {
   if (!GetDocument()->GetScriptContext()->IsRunAtClient())
@@ -177,15 +186,16 @@
 
   CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
   if (bSetting) {
-    hDoc->SetTitle(pValue->ToWideString());
+    hDoc->SetTitle(pValue->ToWideString(pIsolate));
     return;
   }
 
   WideString wsTitle = hDoc->GetTitle();
-  pValue->SetString(wsTitle.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsTitle.ToUTF8().AsStringView());
 }
 
-void CJX_HostPseudoModel::validationsEnabled(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::validationsEnabled(v8::Isolate* pIsolate,
+                                             CFXJSE_Value* pValue,
                                              bool bSetting,
                                              XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -194,15 +204,16 @@
 
   CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
   if (bSetting) {
-    hDoc->SetValidationsEnabled(pValue->ToBoolean());
+    hDoc->SetValidationsEnabled(pValue->ToBoolean(pIsolate));
     return;
   }
 
   bool bEnabled = hDoc->IsValidationsEnabled();
-  pValue->SetBoolean(bEnabled);
+  pValue->SetBoolean(pIsolate, bEnabled);
 }
 
-void CJX_HostPseudoModel::variation(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::variation(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
   if (!GetDocument()->GetScriptContext()->IsRunAtClient())
@@ -212,20 +223,22 @@
     ThrowException(WideString::FromASCII("Unable to set variation value."));
     return;
   }
-  pValue->SetString("Full");
+  pValue->SetString(pIsolate, "Full");
 }
 
-void CJX_HostPseudoModel::version(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::version(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowException(WideString::FromASCII("Unable to set version value."));
     return;
   }
-  pValue->SetString("11");
+  pValue->SetString(pIsolate, "11");
 }
 
-void CJX_HostPseudoModel::name(CFXJSE_Value* pValue,
+void CJX_HostPseudoModel::name(v8::Isolate* pIsolate,
+                               CFXJSE_Value* pValue,
                                bool bSetting,
                                XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -237,6 +250,7 @@
     return;
   }
   pValue->SetString(
+      pIsolate,
       pNotify->GetAppProvider()->GetAppName().ToUTF8().AsStringView());
 }
 
diff --git a/fxjs/xfa/cjx_instancemanager.cpp b/fxjs/xfa/cjx_instancemanager.cpp
index fd3b4cd..7d1fdb6 100644
--- a/fxjs/xfa/cjx_instancemanager.cpp
+++ b/fxjs/xfa/cjx_instancemanager.cpp
@@ -302,7 +302,8 @@
       value->DirectGetValue().Get(runtime->GetIsolate()));
 }
 
-void CJX_InstanceManager::max(CFXJSE_Value* pValue,
+void CJX_InstanceManager::max(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -310,10 +311,12 @@
     return;
   }
   CXFA_Occur* occur = GetXFANode()->GetOccurIfExists();
-  pValue->SetInteger(occur ? occur->GetMax() : CXFA_Occur::kDefaultMax);
+  pValue->SetInteger(pIsolate,
+                     occur ? occur->GetMax() : CXFA_Occur::kDefaultMax);
 }
 
-void CJX_InstanceManager::min(CFXJSE_Value* pValue,
+void CJX_InstanceManager::min(v8::Isolate* pIsolate,
+                              CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -321,15 +324,17 @@
     return;
   }
   CXFA_Occur* occur = GetXFANode()->GetOccurIfExists();
-  pValue->SetInteger(occur ? occur->GetMin() : CXFA_Occur::kDefaultMin);
+  pValue->SetInteger(pIsolate,
+                     occur ? occur->GetMin() : CXFA_Occur::kDefaultMin);
 }
 
-void CJX_InstanceManager::count(CFXJSE_Value* pValue,
+void CJX_InstanceManager::count(v8::Isolate* pIsolate,
+                                CFXJSE_Value* pValue,
                                 bool bSetting,
                                 XFA_Attribute eAttribute) {
   if (bSetting) {
-    SetInstances(pValue->ToInteger());
+    SetInstances(pValue->ToInteger(pIsolate));
     return;
   }
-  pValue->SetInteger(GetXFANode()->GetCount());
+  pValue->SetInteger(pIsolate, GetXFANode()->GetCount());
 }
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index e4a6f03..89222fc 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -62,7 +62,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_LayoutPseudoModel::ready(CFXJSE_Value* pValue,
+void CJX_LayoutPseudoModel::ready(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
@@ -74,7 +75,7 @@
   }
 
   int32_t iStatus = pNotify->GetLayoutStatus();
-  pValue->SetBoolean(iStatus >= 2);
+  pValue->SetBoolean(pIsolate, iStatus >= 2);
 }
 
 CJS_Result CJX_LayoutPseudoModel::HWXY(
diff --git a/fxjs/xfa/cjx_list.cpp b/fxjs/xfa/cjx_list.cpp
index 75d63b3..bd66cb6 100644
--- a/fxjs/xfa/cjx_list.cpp
+++ b/fxjs/xfa/cjx_list.cpp
@@ -97,7 +97,8 @@
       pEngine->NewNormalXFAObject(GetXFAList()->Item(cast_index)));
 }
 
-void CJX_List::length(CFXJSE_Value* pValue,
+void CJX_List::length(v8::Isolate* pIsolate,
+                      CFXJSE_Value* pValue,
                       bool bSetting,
                       XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -105,5 +106,5 @@
     return;
   }
   pValue->SetInteger(
-      pdfium::base::checked_cast<int32_t>(GetXFAList()->GetLength()));
+      pIsolate, pdfium::base::checked_cast<int32_t>(GetXFAList()->GetLength()));
 }
diff --git a/fxjs/xfa/cjx_model.cpp b/fxjs/xfa/cjx_model.cpp
index 1c1ae19..fc70823 100644
--- a/fxjs/xfa/cjx_model.cpp
+++ b/fxjs/xfa/cjx_model.cpp
@@ -86,10 +86,12 @@
       runtime->NewBoolean(TryNamespace().value_or(WideString()) == nameSpace));
 }
 
-void CJX_Model::context(CFXJSE_Value* pValue,
+void CJX_Model::context(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {}
 
-void CJX_Model::aliasNode(CFXJSE_Value* pValue,
+void CJX_Model::aliasNode(v8::Isolate* pIsolate,
+                          CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_node.cpp b/fxjs/xfa/cjx_node.cpp
index 5034165..db57654 100644
--- a/fxjs/xfa/cjx_node.cpp
+++ b/fxjs/xfa/cjx_node.cpp
@@ -448,7 +448,8 @@
   return CJS_Result::Success();
 }
 
-void CJX_Node::ns(CFXJSE_Value* pValue,
+void CJX_Node::ns(v8::Isolate* pIsolate,
+                  CFXJSE_Value* pValue,
                   bool bSetting,
                   XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -456,31 +457,35 @@
     return;
   }
   pValue->SetString(
-      TryNamespace().value_or(WideString()).ToUTF8().AsStringView());
+      pIsolate, TryNamespace().value_or(WideString()).ToUTF8().AsStringView());
 }
 
-void CJX_Node::model(CFXJSE_Value* pValue,
+void CJX_Node::model(v8::Isolate* pIsolate,
+                     CFXJSE_Value* pValue,
                      bool bSetting,
                      XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->Assign(GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
-      GetXFANode()->GetModelNode()));
+  pValue->Assign(pIsolate,
+                 GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
+                     GetXFANode()->GetModelNode()));
 }
 
-void CJX_Node::isContainer(CFXJSE_Value* pValue,
+void CJX_Node::isContainer(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
                            bool bSetting,
                            XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetBoolean(GetXFANode()->IsContainerNode());
+  pValue->SetBoolean(pIsolate, GetXFANode()->IsContainerNode());
 }
 
-void CJX_Node::isNull(CFXJSE_Value* pValue,
+void CJX_Node::isNull(v8::Isolate* pIsolate,
+                      CFXJSE_Value* pValue,
                       bool bSetting,
                       XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -488,13 +493,14 @@
     return;
   }
   if (GetXFANode()->GetElementType() == XFA_Element::Subform) {
-    pValue->SetBoolean(false);
+    pValue->SetBoolean(pIsolate, false);
     return;
   }
-  pValue->SetBoolean(GetContent(false).IsEmpty());
+  pValue->SetBoolean(pIsolate, GetContent(false).IsEmpty());
 }
 
-void CJX_Node::oneOfChild(CFXJSE_Value* pValue,
+void CJX_Node::oneOfChild(v8::Isolate* pIsolate,
+                          CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -506,6 +512,7 @@
       GetXFANode()->GetNodeListWithFilter(XFA_NODEFILTER_OneOfProperty);
   if (!properties.empty()) {
     pValue->Assign(
+        pIsolate,
         GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
             properties.front()));
   }
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index eb975b1..4944a2b 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -125,14 +125,15 @@
   return ToNode(GetXFAObject());
 }
 
-void CJX_Object::className(CFXJSE_Value* pValue,
+void CJX_Object::className(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
                            bool bSetting,
                            XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetString(GetXFAObject()->GetClassName());
+  pValue->SetString(pIsolate, GetXFAObject()->GetClassName());
 }
 
 int32_t CJX_Object::Subform_and_SubformSet_InstanceIndex() {
@@ -942,15 +943,17 @@
   that->calc_data_ = nullptr;
 }
 
-void CJX_Object::ScriptAttributeString(CFXJSE_Value* pValue,
+void CJX_Object::ScriptAttributeString(v8::Isolate* pIsolate,
+                                       CFXJSE_Value* pValue,
                                        bool bSetting,
                                        XFA_Attribute eAttribute) {
   if (!bSetting) {
-    pValue->SetString(GetAttributeByEnum(eAttribute).ToUTF8().AsStringView());
+    pValue->SetString(pIsolate,
+                      GetAttributeByEnum(eAttribute).ToUTF8().AsStringView());
     return;
   }
 
-  WideString wsValue = pValue->ToWideString();
+  WideString wsValue = pValue->ToWideString(pIsolate);
   SetAttributeByEnum(eAttribute, wsValue, true);
   if (eAttribute != XFA_Attribute::Use ||
       GetXFAObject()->GetElementType() != XFA_Element::Desc) {
@@ -1009,27 +1012,30 @@
   }
 }
 
-void CJX_Object::ScriptAttributeBool(CFXJSE_Value* pValue,
+void CJX_Object::ScriptAttributeBool(v8::Isolate* pIsolate,
+                                     CFXJSE_Value* pValue,
                                      bool bSetting,
                                      XFA_Attribute eAttribute) {
   if (bSetting) {
-    SetBoolean(eAttribute, pValue->ToBoolean(), true);
+    SetBoolean(eAttribute, pValue->ToBoolean(pIsolate), true);
     return;
   }
-  pValue->SetString(GetBoolean(eAttribute) ? "1" : "0");
+  pValue->SetString(pIsolate, GetBoolean(eAttribute) ? "1" : "0");
 }
 
-void CJX_Object::ScriptAttributeInteger(CFXJSE_Value* pValue,
+void CJX_Object::ScriptAttributeInteger(v8::Isolate* pIsolate,
+                                        CFXJSE_Value* pValue,
                                         bool bSetting,
                                         XFA_Attribute eAttribute) {
   if (bSetting) {
-    SetInteger(eAttribute, pValue->ToInteger(), true);
+    SetInteger(eAttribute, pValue->ToInteger(pIsolate), true);
     return;
   }
-  pValue->SetInteger(GetInteger(eAttribute));
+  pValue->SetInteger(pIsolate, GetInteger(eAttribute));
 }
 
-void CJX_Object::ScriptSomFontColor(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomFontColor(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
   CXFA_Font* font = ToNode(object_.Get())->GetOrCreateFontIfPossible();
@@ -1040,7 +1046,7 @@
     int32_t r;
     int32_t g;
     int32_t b;
-    std::tie(r, g, b) = StrToRGB(pValue->ToWideString());
+    std::tie(r, g, b) = StrToRGB(pValue->ToWideString(pIsolate));
     FX_ARGB color = ArgbEncode(0xff, r, g, b);
     font->SetColor(color);
     return;
@@ -1051,10 +1057,12 @@
   int32_t g;
   int32_t b;
   std::tie(a, r, g, b) = ArgbDecode(font->GetColor());
-  pValue->SetString(ByteString::Format("%d,%d,%d", r, g, b).AsStringView());
+  pValue->SetString(pIsolate,
+                    ByteString::Format("%d,%d,%d", r, g, b).AsStringView());
 }
 
-void CJX_Object::ScriptSomFillColor(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomFillColor(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
   CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible();
@@ -1066,7 +1074,7 @@
     int32_t r;
     int32_t g;
     int32_t b;
-    std::tie(r, g, b) = StrToRGB(pValue->ToWideString());
+    std::tie(r, g, b) = StrToRGB(pValue->ToWideString(pIsolate));
     FX_ARGB color = ArgbEncode(0xff, r, g, b);
     borderfill->SetColor(color);
     return;
@@ -1079,10 +1087,12 @@
   int32_t b;
   std::tie(a, r, g, b) = ArgbDecode(color);
   pValue->SetString(
+      pIsolate,
       WideString::Format(L"%d,%d,%d", r, g, b).ToUTF8().AsStringView());
 }
 
-void CJX_Object::ScriptSomBorderColor(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomBorderColor(v8::Isolate* pIsolate,
+                                      CFXJSE_Value* pValue,
                                       bool bSetting,
                                       XFA_Attribute eAttribute) {
   CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible();
@@ -1091,7 +1101,7 @@
     int32_t r = 0;
     int32_t g = 0;
     int32_t b = 0;
-    std::tie(r, g, b) = StrToRGB(pValue->ToWideString());
+    std::tie(r, g, b) = StrToRGB(pValue->ToWideString(pIsolate));
     FX_ARGB rgb = ArgbEncode(100, r, g, b);
     for (int32_t i = 0; i < iSize; ++i) {
       CXFA_Edge* edge = border->GetEdgeIfExists(i);
@@ -1110,10 +1120,12 @@
   int32_t b;
   std::tie(a, r, g, b) = ArgbDecode(color);
   pValue->SetString(
+      pIsolate,
       WideString::Format(L"%d,%d,%d", r, g, b).ToUTF8().AsStringView());
 }
 
-void CJX_Object::ScriptSomBorderWidth(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomBorderWidth(v8::Isolate* pIsolate,
+                                      CFXJSE_Value* pValue,
                                       bool bSetting,
                                       XFA_Attribute eAttribute) {
   CXFA_Border* border = ToNode(object_.Get())->GetOrCreateBorderIfPossible();
@@ -1121,14 +1133,14 @@
     CXFA_Edge* edge = border->GetEdgeIfExists(0);
     CXFA_Measurement thickness =
         edge ? edge->GetMSThickness() : CXFA_Measurement(0.5, XFA_Unit::Pt);
-    pValue->SetString(thickness.ToString().ToUTF8().AsStringView());
+    pValue->SetString(pIsolate, thickness.ToString().ToUTF8().AsStringView());
     return;
   }
 
   if (pValue->IsEmpty())
     return;
 
-  WideString wsThickness = pValue->ToWideString();
+  WideString wsThickness = pValue->ToWideString(pIsolate);
   for (int32_t i = 0; i < border->CountEdges(); ++i) {
     CXFA_Edge* edge = border->GetEdgeIfExists(i);
     if (edge)
@@ -1136,7 +1148,8 @@
   }
 }
 
-void CJX_Object::ScriptSomMessage(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomMessage(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_SOM_MESSAGETYPE iMessageType) {
   bool bNew = false;
@@ -1150,13 +1163,13 @@
     if (validate) {
       switch (iMessageType) {
         case XFA_SOM_ValidationMessage:
-          validate->SetScriptMessageText(pValue->ToWideString());
+          validate->SetScriptMessageText(pValue->ToWideString(pIsolate));
           break;
         case XFA_SOM_FormatMessage:
-          validate->SetFormatMessageText(pValue->ToWideString());
+          validate->SetFormatMessageText(pValue->ToWideString(pIsolate));
           break;
         case XFA_SOM_MandatoryMessage:
-          validate->SetNullMessageText(pValue->ToWideString());
+          validate->SetNullMessageText(pValue->ToWideString(pIsolate));
           break;
         default:
           break;
@@ -1193,22 +1206,25 @@
     default:
       break;
   }
-  pValue->SetString(wsMessage.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsMessage.ToUTF8().AsStringView());
 }
 
-void CJX_Object::ScriptSomValidationMessage(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomValidationMessage(v8::Isolate* pIsolate,
+                                            CFXJSE_Value* pValue,
                                             bool bSetting,
                                             XFA_Attribute eAttribute) {
-  ScriptSomMessage(pValue, bSetting, XFA_SOM_ValidationMessage);
+  ScriptSomMessage(pIsolate, pValue, bSetting, XFA_SOM_ValidationMessage);
 }
 
-void CJX_Object::ScriptSomMandatoryMessage(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomMandatoryMessage(v8::Isolate* pIsolate,
+                                           CFXJSE_Value* pValue,
                                            bool bSetting,
                                            XFA_Attribute eAttribute) {
-  ScriptSomMessage(pValue, bSetting, XFA_SOM_MandatoryMessage);
+  ScriptSomMessage(pIsolate, pValue, bSetting, XFA_SOM_MandatoryMessage);
 }
 
-void CJX_Object::ScriptSomDefaultValue(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomDefaultValue(v8::Isolate* pIsolate,
+                                       CFXJSE_Value* pValue,
                                        bool bSetting,
                                        XFA_Attribute /* unused */) {
   XFA_Element eType = GetXFANode()->GetElementType();
@@ -1217,26 +1233,26 @@
   // if defaultValue is defined and, if so, call that one. Just have to make
   // sure that those defaultValue calls don't call back to this one ....
   if (eType == XFA_Element::Field) {
-    static_cast<CJX_Field*>(this)->defaultValue(pValue, bSetting,
+    static_cast<CJX_Field*>(this)->defaultValue(pIsolate, pValue, bSetting,
                                                 XFA_Attribute::Unknown);
     return;
   }
   if (eType == XFA_Element::Draw) {
-    static_cast<CJX_Draw*>(this)->defaultValue(pValue, bSetting,
+    static_cast<CJX_Draw*>(this)->defaultValue(pIsolate, pValue, bSetting,
                                                XFA_Attribute::Unknown);
     return;
   }
   if (eType == XFA_Element::Boolean) {
-    static_cast<CJX_Boolean*>(this)->defaultValue(pValue, bSetting,
+    static_cast<CJX_Boolean*>(this)->defaultValue(pIsolate, pValue, bSetting,
                                                   XFA_Attribute::Unknown);
     return;
   }
 
   if (bSetting) {
     WideString wsNewValue;
-    if (pValue &&
-        !(pValue->IsEmpty() || pValue->IsNull() || pValue->IsUndefined())) {
-      wsNewValue = pValue->ToWideString();
+    if (pValue && !(pValue->IsEmpty() || pValue->IsNull(pIsolate) ||
+                    pValue->IsUndefined(pIsolate))) {
+      wsNewValue = pValue->ToWideString(pIsolate);
     }
 
     WideString wsFormatValue(wsNewValue);
@@ -1271,18 +1287,19 @@
   WideString content = GetContent(true);
   if (content.IsEmpty() && eType != XFA_Element::Text &&
       eType != XFA_Element::SubmitUrl) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
   } else if (eType == XFA_Element::Integer) {
-    pValue->SetInteger(FXSYS_wtoi(content.c_str()));
+    pValue->SetInteger(pIsolate, FXSYS_wtoi(content.c_str()));
   } else if (eType == XFA_Element::Float || eType == XFA_Element::Decimal) {
     CFGAS_Decimal decimal(content.AsStringView());
-    pValue->SetFloat(decimal.ToFloat());
+    pValue->SetFloat(pIsolate, decimal.ToFloat());
   } else {
-    pValue->SetString(content.ToUTF8().AsStringView());
+    pValue->SetString(pIsolate, content.ToUTF8().AsStringView());
   }
 }
 
-void CJX_Object::ScriptSomDefaultValue_Read(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomDefaultValue_Read(v8::Isolate* pIsolate,
+                                            CFXJSE_Value* pValue,
                                             bool bSetting,
                                             XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -1292,13 +1309,14 @@
 
   WideString content = GetContent(true);
   if (content.IsEmpty()) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
-  pValue->SetString(content.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, content.ToUTF8().AsStringView());
 }
 
-void CJX_Object::ScriptSomDataNode(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomDataNode(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pValue,
                                    bool bSetting,
                                    XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -1308,15 +1326,17 @@
 
   CXFA_Node* pDataNode = GetXFANode()->GetBindData();
   if (!pDataNode) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
 
-  pValue->Assign(GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
-      pDataNode));
+  pValue->Assign(pIsolate,
+                 GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
+                     pDataNode));
 }
 
-void CJX_Object::ScriptSomMandatory(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomMandatory(v8::Isolate* pIsolate,
+                                    CFXJSE_Value* pValue,
                                     bool bSetting,
                                     XFA_Attribute eAttribute) {
   CXFA_Validate* validate =
@@ -1325,22 +1345,24 @@
     return;
 
   if (bSetting) {
-    validate->SetNullTest(pValue->ToWideString());
+    validate->SetNullTest(pValue->ToWideString(pIsolate));
     return;
   }
 
-  pValue->SetString(XFA_AttributeValueToName(validate->GetNullTest()));
+  pValue->SetString(pIsolate,
+                    XFA_AttributeValueToName(validate->GetNullTest()));
 }
 
-void CJX_Object::ScriptSomInstanceIndex(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSomInstanceIndex(v8::Isolate* pIsolate,
+                                        CFXJSE_Value* pValue,
                                         bool bSetting,
                                         XFA_Attribute eAttribute) {
   if (!bSetting) {
-    pValue->SetInteger(Subform_and_SubformSet_InstanceIndex());
+    pValue->SetInteger(pIsolate, Subform_and_SubformSet_InstanceIndex());
     return;
   }
 
-  int32_t iTo = pValue->ToInteger();
+  int32_t iTo = pValue->ToInteger(pIsolate);
   int32_t iFrom = Subform_and_SubformSet_InstanceIndex();
   CXFA_Node* pManagerNode = nullptr;
   for (CXFA_Node* pNode = GetXFANode()->GetPrevSibling(); pNode;
@@ -1371,7 +1393,8 @@
   }
 }
 
-void CJX_Object::ScriptSubmitFormatMode(CFXJSE_Value* pValue,
+void CJX_Object::ScriptSubmitFormatMode(v8::Isolate* pIsolate,
+                                        CFXJSE_Value* pValue,
                                         bool bSetting,
                                         XFA_Attribute eAttribute) {}
 
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 8cd5ab0..bae2419 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -180,7 +180,8 @@
   JSE_PROP(ScriptSomInstanceIndex);
   JSE_PROP(ScriptSubmitFormatMode);
 
-  void ScriptSomMessage(CFXJSE_Value* pValue,
+  void ScriptSomMessage(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_SOM_MESSAGETYPE iMessageType);
 
diff --git a/fxjs/xfa/cjx_occur.cpp b/fxjs/xfa/cjx_occur.cpp
index 227b8ae..c3aa678 100644
--- a/fxjs/xfa/cjx_occur.cpp
+++ b/fxjs/xfa/cjx_occur.cpp
@@ -17,24 +17,26 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Occur::max(CFXJSE_Value* pValue,
+void CJX_Occur::max(v8::Isolate* pIsolate,
+                    CFXJSE_Value* pValue,
                     bool bSetting,
                     XFA_Attribute eAttribute) {
   CXFA_Occur* occur = static_cast<CXFA_Occur*>(GetXFANode());
   if (!bSetting) {
-    pValue->SetInteger(occur->GetMax());
+    pValue->SetInteger(pIsolate, occur->GetMax());
     return;
   }
-  occur->SetMax(pValue->ToInteger());
+  occur->SetMax(pValue->ToInteger(pIsolate));
 }
 
-void CJX_Occur::min(CFXJSE_Value* pValue,
+void CJX_Occur::min(v8::Isolate* pIsolate,
+                    CFXJSE_Value* pValue,
                     bool bSetting,
                     XFA_Attribute eAttribute) {
   CXFA_Occur* occur = static_cast<CXFA_Occur*>(GetXFANode());
   if (!bSetting) {
-    pValue->SetInteger(occur->GetMin());
+    pValue->SetInteger(pIsolate, occur->GetMin());
     return;
   }
-  occur->SetMin(pValue->ToInteger());
+  occur->SetMin(pValue->ToInteger(pIsolate));
 }
diff --git a/fxjs/xfa/cjx_packet.cpp b/fxjs/xfa/cjx_packet.cpp
index ab1b478..70c8609 100644
--- a/fxjs/xfa/cjx_packet.cpp
+++ b/fxjs/xfa/cjx_packet.cpp
@@ -78,7 +78,8 @@
   return CJS_Result::Success(runtime->NewNull());
 }
 
-void CJX_Packet::content(CFXJSE_Value* pValue,
+void CJX_Packet::content(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {
   CFX_XMLElement* element = ToXMLElement(GetXFANode()->GetXMLMappingNode());
@@ -90,7 +91,7 @@
               ->GetNotify()
               ->GetFFDoc()
               ->GetXMLDocument()
-              ->CreateNode<CFX_XMLText>(pValue->ToWideString()));
+              ->CreateNode<CFX_XMLText>(pValue->ToWideString(pIsolate)));
     }
     return;
   }
@@ -99,5 +100,5 @@
   if (element)
     wsTextData = element->GetTextData();
 
-  pValue->SetString(wsTextData.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsTextData.ToUTF8().AsStringView());
 }
diff --git a/fxjs/xfa/cjx_script.cpp b/fxjs/xfa/cjx_script.cpp
index 207a2ce..a2de5a7 100644
--- a/fxjs/xfa/cjx_script.cpp
+++ b/fxjs/xfa/cjx_script.cpp
@@ -17,12 +17,13 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Script::stateless(CFXJSE_Value* pValue,
+void CJX_Script::stateless(v8::Isolate* pIsolate,
+                           CFXJSE_Value* pValue,
                            bool bSetting,
                            XFA_Attribute eAttribute) {
   if (bSetting) {
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetString("0");
+  pValue->SetString(pIsolate, "0");
 }
diff --git a/fxjs/xfa/cjx_source.cpp b/fxjs/xfa/cjx_source.cpp
index 0e1aab9..c793f29 100644
--- a/fxjs/xfa/cjx_source.cpp
+++ b/fxjs/xfa/cjx_source.cpp
@@ -183,6 +183,7 @@
   return CJS_Result::Success();
 }
 
-void CJX_Source::db(CFXJSE_Value* pValue,
+void CJX_Source::db(v8::Isolate* pIsolate,
+                    CFXJSE_Value* pValue,
                     bool bSetting,
                     XFA_Attribute eAttribute) {}
diff --git a/fxjs/xfa/cjx_subform.cpp b/fxjs/xfa/cjx_subform.cpp
index 37fe01c..709be8a 100644
--- a/fxjs/xfa/cjx_subform.cpp
+++ b/fxjs/xfa/cjx_subform.cpp
@@ -87,19 +87,22 @@
       runtime->NewBoolean(iRet != XFA_EventError::kError));
 }
 
-void CJX_Subform::locale(CFXJSE_Value* pValue,
+void CJX_Subform::locale(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {
   if (bSetting) {
-    SetCDataImpl(XFA_Attribute::Locale, pValue->ToWideString(), true, true);
+    SetCDataImpl(XFA_Attribute::Locale, pValue->ToWideString(pIsolate), true,
+                 true);
     return;
   }
 
   WideString wsLocaleName = GetXFANode()->GetLocaleName().value_or(L"");
-  pValue->SetString(wsLocaleName.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsLocaleName.ToUTF8().AsStringView());
 }
 
-void CJX_Subform::instanceManager(CFXJSE_Value* pValue,
+void CJX_Subform::instanceManager(v8::Isolate* pIsolate,
+                                  CFXJSE_Value* pValue,
                                   bool bSetting,
                                   XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -122,10 +125,11 @@
     }
   }
   if (!pInstanceMgr) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
 
-  pValue->Assign(GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
-      pInstanceMgr));
+  pValue->Assign(pIsolate,
+                 GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(
+                     pInstanceMgr));
 }
diff --git a/fxjs/xfa/cjx_textnode.cpp b/fxjs/xfa/cjx_textnode.cpp
index df6b305..6e90fb3 100644
--- a/fxjs/xfa/cjx_textnode.cpp
+++ b/fxjs/xfa/cjx_textnode.cpp
@@ -17,14 +17,16 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_TextNode::defaultValue(CFXJSE_Value* pValue,
+void CJX_TextNode::defaultValue(v8::Isolate* pIsolate,
+                                CFXJSE_Value* pValue,
                                 bool bSetting,
                                 XFA_Attribute attr) {
-  ScriptSomDefaultValue(pValue, bSetting, attr);
+  ScriptSomDefaultValue(pIsolate, pValue, bSetting, attr);
 }
 
-void CJX_TextNode::value(CFXJSE_Value* pValue,
+void CJX_TextNode::value(v8::Isolate* pIsolate,
+                         CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute attr) {
-  ScriptSomDefaultValue(pValue, bSetting, attr);
+  ScriptSomDefaultValue(pIsolate, pValue, bSetting, attr);
 }
diff --git a/fxjs/xfa/cjx_tree.cpp b/fxjs/xfa/cjx_tree.cpp
index 657e73d..3e7c556 100644
--- a/fxjs/xfa/cjx_tree.cpp
+++ b/fxjs/xfa/cjx_tree.cpp
@@ -74,7 +74,8 @@
   auto pValue = std::make_unique<CFXJSE_Value>(pScriptContext->GetIsolate());
   CJX_Object* jsObject = resolveNodeRS.objects.front()->JSObject();
   (*resolveNodeRS.script_attribute.callback)(
-      jsObject, pValue.get(), false, resolveNodeRS.script_attribute.attribute);
+      runtime->GetIsolate(), jsObject, pValue.get(), false,
+      resolveNodeRS.script_attribute.attribute);
   return CJS_Result::Success(
       pValue->DirectGetValue().Get(runtime->GetIsolate()));
 }
@@ -91,7 +92,8 @@
 
   CFXJSE_Engine* pScriptContext = GetDocument()->GetScriptContext();
   auto pValue = std::make_unique<CFXJSE_Value>(pScriptContext->GetIsolate());
-  ResolveNodeList(pValue.get(), runtime->ToWideString(params[0]),
+  ResolveNodeList(pScriptContext->GetIsolate(), pValue.get(),
+                  runtime->ToWideString(params[0]),
                   XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
                       XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
                       XFA_RESOLVENODE_Siblings,
@@ -100,7 +102,8 @@
       pValue->DirectGetValue().Get(runtime->GetIsolate()));
 }
 
-void CJX_Tree::all(CFXJSE_Value* pValue,
+void CJX_Tree::all(v8::Isolate* pIsolate,
+                   CFXJSE_Value* pValue,
                    bool bSetting,
                    XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -110,10 +113,11 @@
 
   uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
   WideString wsExpression = GetAttributeByEnum(XFA_Attribute::Name) + L"[*]";
-  ResolveNodeList(pValue, wsExpression, dwFlag, nullptr);
+  ResolveNodeList(pIsolate, pValue, wsExpression, dwFlag, nullptr);
 }
 
-void CJX_Tree::classAll(CFXJSE_Value* pValue,
+void CJX_Tree::classAll(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -123,11 +127,12 @@
 
   WideString wsExpression =
       L"#" + WideString::FromASCII(GetXFAObject()->GetClassName()) + L"[*]";
-  ResolveNodeList(pValue, wsExpression,
+  ResolveNodeList(pIsolate, pValue, wsExpression,
                   XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL, nullptr);
 }
 
-void CJX_Tree::nodes(CFXJSE_Value* pValue,
+void CJX_Tree::nodes(v8::Isolate* pIsolate,
+                     CFXJSE_Value* pValue,
                      bool bSetting,
                      XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -142,10 +147,12 @@
   pDoc->GetNodeOwner()->PersistList(pNodeList);
 
   CFXJSE_Engine* pEngine = pDoc->GetScriptContext();
-  pValue->SetHostObject(pNodeList->JSObject(), pEngine->GetJseNormalClass());
+  pValue->SetHostObject(pIsolate, pNodeList->JSObject(),
+                        pEngine->GetJseNormalClass());
 }
 
-void CJX_Tree::parent(CFXJSE_Value* pValue,
+void CJX_Tree::parent(v8::Isolate* pIsolate,
+                      CFXJSE_Value* pValue,
                       bool bSetting,
                       XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -155,15 +162,17 @@
 
   CXFA_Node* pParent = GetXFANode()->GetParent();
   if (!pParent) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
 
   pValue->Assign(
+      pIsolate,
       GetDocument()->GetScriptContext()->GetOrCreateJSBindingFromMap(pParent));
 }
 
-void CJX_Tree::index(CFXJSE_Value* pValue,
+void CJX_Tree::index(v8::Isolate* pIsolate,
+                     CFXJSE_Value* pValue,
                      bool bSetting,
                      XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -173,10 +182,11 @@
 
   CXFA_Node* pNode = GetXFANode();
   size_t iIndex = pNode ? pNode->GetIndexByName() : 0;
-  pValue->SetInteger(pdfium::base::checked_cast<int32_t>(iIndex));
+  pValue->SetInteger(pIsolate, pdfium::base::checked_cast<int32_t>(iIndex));
 }
 
-void CJX_Tree::classIndex(CFXJSE_Value* pValue,
+void CJX_Tree::classIndex(v8::Isolate* pIsolate,
+                          CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -186,10 +196,11 @@
 
   CXFA_Node* pNode = GetXFANode();
   size_t iIndex = pNode ? pNode->GetIndexByClassName() : 0;
-  pValue->SetInteger(pdfium::base::checked_cast<int32_t>(iIndex));
+  pValue->SetInteger(pIsolate, pdfium::base::checked_cast<int32_t>(iIndex));
 }
 
-void CJX_Tree::somExpression(CFXJSE_Value* pValue,
+void CJX_Tree::somExpression(v8::Isolate* pIsolate,
+                             CFXJSE_Value* pValue,
                              bool bSetting,
                              XFA_Attribute eAttribute) {
   if (bSetting) {
@@ -198,10 +209,11 @@
   }
 
   WideString wsSOMExpression = GetXFAObject()->GetSOMExpression();
-  pValue->SetString(wsSOMExpression.ToUTF8().AsStringView());
+  pValue->SetString(pIsolate, wsSOMExpression.ToUTF8().AsStringView());
 }
 
-void CJX_Tree::ResolveNodeList(CFXJSE_Value* pValue,
+void CJX_Tree::ResolveNodeList(v8::Isolate* pIsolate,
+                               CFXJSE_Value* pValue,
                                WideString wsExpression,
                                uint32_t dwFlag,
                                CXFA_Node* refNode) {
@@ -231,14 +243,15 @@
             std::make_unique<CFXJSE_Value>(pScriptContext->GetIsolate());
         CJX_Object* jsObject = pObject->JSObject();
         (*resolveNodeRS.script_attribute.callback)(
-            jsObject, innerValue.get(), false,
+            pIsolate, jsObject, innerValue.get(), false,
             resolveNodeRS.script_attribute.attribute);
-        CXFA_Object* obj = CFXJSE_Engine::ToObject(innerValue.get());
+        CXFA_Object* obj = CFXJSE_Engine::ToObject(pScriptContext->GetIsolate(),
+                                                   innerValue.get());
         if (obj->IsNode())
           pNodeList->Append(obj->AsNode());
       }
     }
   }
-  pValue->SetHostObject(pNodeList->JSObject(),
+  pValue->SetHostObject(pIsolate, pNodeList->JSObject(),
                         pScriptContext->GetJseNormalClass());
 }
diff --git a/fxjs/xfa/cjx_tree.h b/fxjs/xfa/cjx_tree.h
index 54dd88d..ad117f3 100644
--- a/fxjs/xfa/cjx_tree.h
+++ b/fxjs/xfa/cjx_tree.h
@@ -43,7 +43,8 @@
   static const TypeTag static_type__ = TypeTag::Tree;
   static const CJX_MethodSpec MethodSpecs[];
 
-  void ResolveNodeList(CFXJSE_Value* pValue,
+  void ResolveNodeList(v8::Isolate* pIsolate,
+                       CFXJSE_Value* pValue,
                        WideString wsExpression,
                        uint32_t dwFlag,
                        CXFA_Node* refNode);
diff --git a/fxjs/xfa/cjx_xfa.cpp b/fxjs/xfa/cjx_xfa.cpp
index 08c6a80..f107f76 100644
--- a/fxjs/xfa/cjx_xfa.cpp
+++ b/fxjs/xfa/cjx_xfa.cpp
@@ -19,7 +19,8 @@
   return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
 }
 
-void CJX_Xfa::thisValue(CFXJSE_Value* pValue,
+void CJX_Xfa::thisValue(v8::Isolate* pIsolate,
+                        CFXJSE_Value* pValue,
                         bool bSetting,
                         XFA_Attribute eAttribute) {
   if (bSetting)
@@ -28,8 +29,8 @@
   auto* pScriptContext = GetDocument()->GetScriptContext();
   CXFA_Object* pThis = pScriptContext->GetThisObject();
   if (!pThis) {
-    pValue->SetNull();
+    pValue->SetNull(pIsolate);
     return;
   }
-  pValue->Assign(pScriptContext->GetOrCreateJSBindingFromMap(pThis));
+  pValue->Assign(pIsolate, pScriptContext->GetOrCreateJSBindingFromMap(pThis));
 }
diff --git a/fxjs/xfa/fxjse.h b/fxjs/xfa/fxjse.h
index 10750ef..5d70351 100644
--- a/fxjs/xfa/fxjse.h
+++ b/fxjs/xfa/fxjse.h
@@ -50,10 +50,12 @@
 typedef void (*FXJSE_FuncCallback)(
     CFXJSE_HostObject* pThis,
     const v8::FunctionCallbackInfo<v8::Value>& info);
-typedef void (*FXJSE_PropAccessor)(CFXJSE_Value* pObject,
+typedef void (*FXJSE_PropAccessor)(v8::Isolate* pIsolate,
+                                   CFXJSE_Value* pObject,
                                    ByteStringView szPropName,
                                    CFXJSE_Value* pValue);
-typedef int32_t (*FXJSE_PropTypeGetter)(CFXJSE_Value* pObject,
+typedef int32_t (*FXJSE_PropTypeGetter)(v8::Isolate* pIsolate,
+                                        CFXJSE_Value* pObject,
                                         ByteStringView szPropName,
                                         bool bQueryIn);
 
diff --git a/fxjs/xfa/jse_define.h b/fxjs/xfa/jse_define.h
index 26405c9..328e0a0 100644
--- a/fxjs/xfa/jse_define.h
+++ b/fxjs/xfa/jse_define.h
@@ -24,12 +24,15 @@
   CJS_Result method_name(CFX_V8* runtime,                            \
                          const std::vector<v8::Local<v8::Value>>& params)
 
-#define JSE_PROP(prop_name)                                               \
-  static void prop_name##_static(CJX_Object* node, CFXJSE_Value* value,   \
-                                 bool setting, XFA_Attribute attribute) { \
-    if (node->DynamicTypeIs(static_type__))                               \
-      static_cast<Type__*>(node)->prop_name(value, setting, attribute);   \
-  }                                                                       \
-  void prop_name(CFXJSE_Value* pValue, bool bSetting, XFA_Attribute eAttribute)
+#define JSE_PROP(prop_name)                                                  \
+  static void prop_name##_static(v8::Isolate* pIsolate, CJX_Object* node,    \
+                                 CFXJSE_Value* value, bool setting,          \
+                                 XFA_Attribute attribute) {                  \
+    if (node->DynamicTypeIs(static_type__))                                  \
+      static_cast<Type__*>(node)->prop_name(pIsolate, value, setting,        \
+                                            attribute);                      \
+  }                                                                          \
+  void prop_name(v8::Isolate* pIsolate, CFXJSE_Value* pValue, bool bSetting, \
+                 XFA_Attribute eAttribute)
 
 #endif  // FXJS_XFA_JSE_DEFINE_H_
diff --git a/testing/xfa_js_embedder_test.cpp b/testing/xfa_js_embedder_test.cpp
index 2eb1947..4df2d05 100644
--- a/testing/xfa_js_embedder_test.cpp
+++ b/testing/xfa_js_embedder_test.cpp
@@ -59,13 +59,13 @@
     return true;
 
   CFXJSE_Value msg(isolate());
-  value_->GetObjectPropertyByIdx(1, &msg);
+  value_->GetObjectPropertyByIdx(isolate(), 1, &msg);
   fprintf(stderr, "FormCalc: %.*s\n", static_cast<int>(input.GetLength()),
           input.unterminated_c_str());
   // If the parsing of the input fails, then v8 will not run, so there will be
   // no value here to print.
-  if (msg.IsString() && !msg.ToWideString().IsEmpty())
-    fprintf(stderr, "JS ERROR: %ls\n", msg.ToWideString().c_str());
+  if (msg.IsString(isolate()) && !msg.ToWideString(isolate()).IsEmpty())
+    fprintf(stderr, "JS ERROR: %ls\n", msg.ToWideString(isolate()).c_str());
   return false;
 }
 
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index d2d1e63..51a34d1 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -2771,9 +2771,10 @@
     iRet = XFA_EventError::kSuccess;
     if (pEventParam->m_eType == XFA_EVENT_Calculate ||
         pEventParam->m_eType == XFA_EVENT_InitCalculate) {
-      if (!pTmpRetValue->IsUndefined()) {
-        if (!pTmpRetValue->IsNull())
-          pEventParam->m_wsResult = pTmpRetValue->ToWideString();
+      if (!pTmpRetValue->IsUndefined(pContext->GetIsolate())) {
+        if (!pTmpRetValue->IsNull(pContext->GetIsolate()))
+          pEventParam->m_wsResult =
+              pTmpRetValue->ToWideString(pContext->GetIsolate());
 
         iRet = XFA_EventError::kSuccess;
       } else {
@@ -2800,7 +2801,8 @@
   pContext->SetNodesOfRunScript(nullptr);
   pContext->SetEventParam(nullptr);
 
-  return {iRet, pTmpRetValue->IsBoolean() && pTmpRetValue->ToBoolean()};
+  return {iRet, pTmpRetValue->IsBoolean(pContext->GetIsolate()) &&
+                    pTmpRetValue->ToBoolean(pContext->GetIsolate())};
 }
 
 std::pair<XFA_FFWidgetType, CXFA_Ui*>
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index f342847..873d01c 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -14,7 +14,8 @@
 #include "third_party/base/optional.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
-typedef void (*XFA_ATTRIBUTE_CALLBACK)(CJX_Object* pNode,
+typedef void (*XFA_ATTRIBUTE_CALLBACK)(v8::Isolate* pIsolate,
+                                       CJX_Object* pNode,
                                        CFXJSE_Value* pValue,
                                        bool bSetting,
                                        XFA_Attribute eAttribute);