Methods are on CJX_Object not CJX_Node now

This CL converts all of the JSNode() to JSObject() calls as all of the
original CJX_Node methods have been moved to CJX_Object. This fixes
potential bad casts from things like CJX_Content which do not inhert
from CJX_Node.

Bug: pdfium:793372
Change-Id: I6c7f63a78f3d47bb6bad74faed3fd8c535bf095e
Reviewed-on: https://pdfium-review.googlesource.com/21090
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/fxjs/cfxjse_engine.cpp b/fxjs/cfxjse_engine.cpp
index 9d37f3e..65aeddd 100644
--- a/fxjs/cfxjse_engine.cpp
+++ b/fxjs/cfxjse_engine.cpp
@@ -352,7 +352,7 @@
     CXFA_Node* pPropOrChild = nullptr;
     XFA_Element eType = CXFA_Node::NameToElement(wsPropName);
     if (eType != XFA_Element::Unknown)
-      pPropOrChild = pNode->JSNode()->GetProperty(0, eType, true);
+      pPropOrChild = pNode->JSObject()->GetProperty(0, eType, true);
     else
       pPropOrChild = pNode->GetFirstChildByName(wsPropName.AsStringView());
 
@@ -360,8 +360,8 @@
       const XFA_SCRIPTATTRIBUTEINFO* lpAttrInfo = XFA_GetScriptAttributeByName(
           pPropOrChild->GetElementType(), L"{default}");
       if (lpAttrInfo) {
-        pPropOrChild->JSNode()->Script_Som_DefaultValue(pReturnValue, true,
-                                                        XFA_Attribute::Unknown);
+        pPropOrChild->JSObject()->Script_Som_DefaultValue(
+            pReturnValue, true, XFA_Attribute::Unknown);
         return;
       }
     }
@@ -465,7 +465,7 @@
     return false;
 
   pdfium::Optional<WideString> wsScript =
-      pTextNode->JSNode()->TryCData(XFA_Attribute::Value, true);
+      pTextNode->JSObject()->TryCData(XFA_Attribute::Value, true);
   if (!wsScript)
     return false;
 
diff --git a/fxjs/cfxjse_formcalc_context.cpp b/fxjs/cfxjse_formcalc_context.cpp
index 1777102..b02e5a9 100644
--- a/fxjs/cfxjse_formcalc_context.cpp
+++ b/fxjs/cfxjse_formcalc_context.cpp
@@ -5853,8 +5853,8 @@
     pDefaultValue->SetNull();
     return;
   }
-  pNode->JSNode()->Script_Som_DefaultValue(pDefaultValue, false,
-                                           XFA_Attribute::Unknown);
+  pNode->JSObject()->Script_Som_DefaultValue(pDefaultValue, false,
+                                             XFA_Attribute::Unknown);
 }
 
 // static
@@ -5864,8 +5864,8 @@
   if (!pNode)
     return false;
 
-  pNode->JSNode()->Script_Som_DefaultValue(hNewValue, true,
-                                           XFA_Attribute::Unknown);
+  pNode->JSObject()->Script_Som_DefaultValue(hNewValue, true,
+                                             XFA_Attribute::Unknown);
   return true;
 }
 
@@ -5951,7 +5951,7 @@
         WideString wsName;
         if (CXFA_Node* pXFANode = pNode->AsNode()) {
           pdfium::Optional<WideString> ret =
-              pXFANode->JSNode()->TryAttribute(XFA_Attribute::Name, false);
+              pXFANode->JSObject()->TryAttribute(XFA_Attribute::Name, false);
           if (ret)
             wsName = *ret;
         }
diff --git a/fxjs/cfxjse_resolveprocessor.cpp b/fxjs/cfxjse_resolveprocessor.cpp
index 9c0121d..f3e4a21 100644
--- a/fxjs/cfxjse_resolveprocessor.cpp
+++ b/fxjs/cfxjse_resolveprocessor.cpp
@@ -345,13 +345,13 @@
       CXFA_Node* pInstanceManager =
           curNode->AsNode()->GetInstanceMgrOfSubform();
       if (pInstanceManager) {
-        pProp = pInstanceManager->JSNode()->GetProperty(0, XFA_Element::Occur,
-                                                        true);
+        pProp = pInstanceManager->JSObject()->GetProperty(0, XFA_Element::Occur,
+                                                          true);
       }
     } else {
       XFA_Element eType = CXFA_Node::NameToElement(wsName);
       if (eType != XFA_Element::Unknown) {
-        pProp = curNode->AsNode()->JSNode()->GetProperty(
+        pProp = curNode->AsNode()->JSObject()->GetProperty(
             0, eType, eType != XFA_Element::PageSet);
       }
     }
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index 4165a36..e3e0fea 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -163,7 +163,7 @@
         continue;
 
       CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage();
-      if (pMasterPage->JSNode()->GetInteger(XFA_Attribute::Numbered))
+      if (pMasterPage->JSObject()->GetInteger(XFA_Attribute::Numbered))
         iPageCount++;
     }
   } else {
diff --git a/fxjs/xfa/cjx_model.cpp b/fxjs/xfa/cjx_model.cpp
index 7ab90e2..4ac6280 100644
--- a/fxjs/xfa/cjx_model.cpp
+++ b/fxjs/xfa/cjx_model.cpp
@@ -55,8 +55,8 @@
     if (!pNewNode->HasAttribute(XFA_Attribute::Name))
       return CJS_Return(JSGetStringFromID(JSMessage::kParamError));
 
-    pNewNode->JSNode()->SetAttribute(XFA_Attribute::Name, name.AsStringView(),
-                                     true);
+    pNewNode->JSObject()->SetAttribute(XFA_Attribute::Name, name.AsStringView(),
+                                       true);
     if (pNewNode->GetPacketType() == XFA_PacketType::Datasets)
       pNewNode->CreateXMLMappingNode();
   }
diff --git a/fxjs/xfa/cjx_node.cpp b/fxjs/xfa/cjx_node.cpp
index cceaa20..b2743f0 100644
--- a/fxjs/xfa/cjx_node.cpp
+++ b/fxjs/xfa/cjx_node.cpp
@@ -6,6 +6,9 @@
 
 #include "fxjs/xfa/cjx_node.h"
 
+#include <memory>
+#include <vector>
+
 #include "core/fxcrt/cfx_memorystream.h"
 #include "core/fxcrt/fx_codepage.h"
 #include "fxjs/cfxjse_engine.h"
@@ -186,7 +189,7 @@
   bool bHas = !!GetProperty(iIndex, eType, true);
   if (!bHas && bParent && GetXFANode()->GetParent()) {
     // Also check on the parent.
-    auto* jsnode = GetXFANode()->GetParent()->JSNode();
+    auto* jsnode = GetXFANode()->GetParent()->JSObject();
     bHas = jsnode->HasAttribute(attr) ||
            !!jsnode->GetProperty(iIndex, eType, true);
   }
@@ -227,8 +230,8 @@
   CXFA_Node* pFakeRoot = GetXFANode()->Clone(false);
   WideString wsContentType = GetCData(XFA_Attribute::ContentType);
   if (!wsContentType.IsEmpty()) {
-    pFakeRoot->JSNode()->SetCData(XFA_Attribute::ContentType,
-                                  WideString(wsContentType), false, false);
+    pFakeRoot->JSObject()->SetCData(XFA_Attribute::ContentType,
+                                    WideString(wsContentType), false, false);
   }
 
   std::unique_ptr<CFX_XMLNode> pFakeXMLRoot(pFakeRoot->GetXMLMappingNode());
diff --git a/fxjs/xfa/cjx_node.h b/fxjs/xfa/cjx_node.h
index 9d16d85..f54239a 100644
--- a/fxjs/xfa/cjx_node.h
+++ b/fxjs/xfa/cjx_node.h
@@ -7,18 +7,12 @@
 #ifndef FXJS_XFA_CJX_NODE_H_
 #define FXJS_XFA_CJX_NODE_H_
 
-#include <memory>
-#include <vector>
-
-#include "core/fxcrt/unowned_ptr.h"
 #include "fxjs/CJX_Define.h"
 #include "fxjs/xfa/cjx_object.h"
 #include "fxjs/xfa/cjx_tree.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
-class CXFA_LayoutItem;
 class CXFA_Node;
-class CXFA_WidgetData;
 
 class CJX_Node : public CJX_Tree {
  public:
@@ -28,12 +22,6 @@
   CXFA_Node* GetXFANode();
   const CXFA_Node* GetXFANode() const;
 
-  void SetLayoutItem(CXFA_LayoutItem* item) { layout_item_ = item; }
-  CXFA_LayoutItem* GetLayoutItem() const { return layout_item_.Get(); }
-
-  void SetCalcRecursionCount(size_t count) { calc_recursion_count_ = count; }
-  size_t GetCalcRecursionCount() const { return calc_recursion_count_; }
-
   JS_METHOD(applyXSL, CJX_Node);
   JS_METHOD(assignNode, CJX_Node);
   JS_METHOD(clone, CJX_Node);
@@ -51,8 +39,6 @@
                                 XFA_Element eType);
 
  private:
-  UnownedPtr<CXFA_LayoutItem> layout_item_;
-  size_t calc_recursion_count_ = 0;
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 04d053c..fc70858 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -602,10 +602,10 @@
 
         CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
         ASSERT(pChildValue);
-        pChildValue->JSNode()->SetCData(XFA_Attribute::ContentType, L"text/xml",
-                                        false, false);
-        pChildValue->JSNode()->SetContent(wsContent, wsContent, bNotify,
-                                          bScriptModify, false);
+        pChildValue->JSObject()->SetCData(XFA_Attribute::ContentType,
+                                          L"text/xml", false, false);
+        pChildValue->JSObject()->SetContent(wsContent, wsContent, bNotify,
+                                            bScriptModify, false);
         CXFA_Node* pBind = ToNode(GetXFAObject())->GetBindData();
         if (bSyncData && pBind) {
           std::vector<WideString> wsSaveTextArray;
@@ -645,8 +645,8 @@
               while (iAddNodes-- > 0) {
                 pValueNodes =
                     pBind->CreateSamePacketNode(XFA_Element::DataValue);
-                pValueNodes->JSNode()->SetCData(XFA_Attribute::Name, L"value",
-                                                false, false);
+                pValueNodes->JSObject()->SetCData(XFA_Attribute::Name, L"value",
+                                                  false, false);
                 pValueNodes->CreateXMLMappingNode();
                 pBind->InsertChild(pValueNodes, nullptr);
               }
@@ -663,15 +663,15 @@
                      pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
                  pValueNode; pValueNode = pValueNode->GetNodeItem(
                                  XFA_NODEITEM_NextSibling)) {
-              pValueNode->JSNode()->SetAttributeValue(
+              pValueNode->JSObject()->SetAttributeValue(
                   wsSaveTextArray[i], wsSaveTextArray[i], false, false);
               i++;
             }
           }
           for (const auto& pArrayNode : *(pBind->GetBindItems())) {
             if (pArrayNode.Get() != ToNode(GetXFAObject())) {
-              pArrayNode->JSNode()->SetContent(wsContent, wsContent, bNotify,
-                                               bScriptModify, false);
+              pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify,
+                                                 bScriptModify, false);
             }
           }
         }
@@ -686,17 +686,17 @@
 
         CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
         ASSERT(pChildValue);
-        pChildValue->JSNode()->SetContent(wsContent, wsContent, bNotify,
-                                          bScriptModify, false);
+        pChildValue->JSObject()->SetContent(wsContent, wsContent, bNotify,
+                                            bScriptModify, false);
       }
       pBindNode = ToNode(GetXFAObject())->GetBindData();
       if (pBindNode && bSyncData) {
-        pBindNode->JSNode()->SetContent(wsContent, wsXMLValue, bNotify,
-                                        bScriptModify, false);
+        pBindNode->JSObject()->SetContent(wsContent, wsXMLValue, bNotify,
+                                          bScriptModify, false);
         for (const auto& pArrayNode : *(pBindNode->GetBindItems())) {
           if (pArrayNode.Get() != ToNode(GetXFAObject())) {
-            pArrayNode->JSNode()->SetContent(wsContent, wsContent, bNotify,
-                                             true, false);
+            pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify,
+                                               true, false);
           }
         }
       }
@@ -727,7 +727,7 @@
                                            : XFA_Element::Sharptext);
         ToNode(GetXFAObject())->InsertChild(pContentRawDataNode, nullptr);
       }
-      return pContentRawDataNode->JSNode()->SetContent(
+      return pContentRawDataNode->JSObject()->SetContent(
           wsContent, wsXMLValue, bNotify, bScriptModify, bSyncData);
     }
     case XFA_ObjectType::NodeC:
@@ -748,8 +748,8 @@
           if (pParent && pParent->IsContainerNode()) {
             pBindNode = pParent->GetBindData();
             if (pBindNode) {
-              pBindNode->JSNode()->SetContent(wsContent, wsXMLValue, bNotify,
-                                              bScriptModify, false);
+              pBindNode->JSObject()->SetContent(wsContent, wsXMLValue, bNotify,
+                                                bScriptModify, false);
             }
           }
         }
@@ -768,8 +768,8 @@
   SetAttributeValue(wsContent, wsXMLValue, bNotify, bScriptModify);
   if (pBindNode && bSyncData) {
     for (const auto& pArrayNode : *(pBindNode->GetBindItems())) {
-      pArrayNode->JSNode()->SetContent(wsContent, wsContent, bNotify,
-                                       bScriptModify, false);
+      pArrayNode->JSObject()->SetContent(wsContent, wsContent, bNotify,
+                                         bScriptModify, false);
     }
   }
   return true;
@@ -794,11 +794,11 @@
 
         CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild);
         if (pChildValue && XFA_FieldIsMultiListBox(ToNode(GetXFAObject()))) {
-          pChildValue->JSNode()->SetAttribute(XFA_Attribute::ContentType,
-                                              L"text/xml", false);
+          pChildValue->JSObject()->SetAttribute(XFA_Attribute::ContentType,
+                                                L"text/xml", false);
         }
         if (pChildValue)
-          return pChildValue->JSNode()->TryContent(bScriptModify, bProto);
+          return pChildValue->JSObject()->TryContent(bScriptModify, bProto);
         return {};
       }
       break;
@@ -821,7 +821,7 @@
             ToNode(GetXFAObject())->CreateSamePacketNode(element);
         ToNode(GetXFAObject())->InsertChild(pContentRawDataNode, nullptr);
       }
-      return pContentRawDataNode->JSNode()->TryContent(bScriptModify, true);
+      return pContentRawDataNode->JSObject()->TryContent(bScriptModify, true);
     }
     case XFA_ObjectType::NodeC:
     case XFA_ObjectType::NodeV:
@@ -913,7 +913,7 @@
 bool CJX_Object::GetMapModuleValue(void* pKey, void*& pValue) {
   for (CXFA_Node* pNode = ToNode(GetXFAObject()); pNode;
        pNode = pNode->GetTemplateNode()) {
-    XFA_MAPMODULEDATA* pModule = pNode->JSNode()->GetMapModuleData();
+    XFA_MAPMODULEDATA* pModule = pNode->JSObject()->GetMapModuleData();
     if (pModule) {
       auto it = pModule->m_ValueMap.find(pKey);
       if (it != pModule->m_ValueMap.end()) {
@@ -973,7 +973,7 @@
   XFA_MAPDATABLOCK* pBuffer = nullptr;
   for (const CXFA_Node* pNode = ToNode(GetXFAObject()); pNode;
        pNode = pNode->GetTemplateNode()) {
-    XFA_MAPMODULEDATA* pModule = pNode->JSNode()->GetMapModuleData();
+    XFA_MAPMODULEDATA* pModule = pNode->JSObject()->GetMapModuleData();
     if (pModule) {
       auto it = pModule->m_BufferMap.find(pKey);
       if (it != pModule->m_BufferMap.end()) {
@@ -1040,7 +1040,7 @@
 
 void CJX_Object::MergeAllData(CXFA_Object* pDstModule) {
   XFA_MAPMODULEDATA* pDstModuleData =
-      ToNode(pDstModule)->JSNode()->CreateMapModuleData();
+      ToNode(pDstModule)->JSObject()->CreateMapModuleData();
   XFA_MAPMODULEDATA* pSrcModuleData = GetMapModuleData();
   if (!pSrcModuleData)
     return;
@@ -1092,18 +1092,18 @@
     bNeedMove = false;
 
   if (bNeedMove)
-    ToNode(pDstModule)->JSNode()->SetCalcData(ReleaseCalcData());
+    ToNode(pDstModule)->JSObject()->SetCalcData(ReleaseCalcData());
   if (!pDstModule->IsNodeV())
     return;
 
-  WideString wsValue = ToNode(pDstModule)->JSNode()->GetContent(false);
+  WideString wsValue = ToNode(pDstModule)->JSObject()->GetContent(false);
   WideString wsFormatValue(wsValue);
   CXFA_WidgetData* pWidgetData = ToNode(pDstModule)->GetContainerWidgetData();
   if (pWidgetData)
     wsFormatValue = pWidgetData->GetFormatDataValue(wsValue);
 
   ToNode(pDstModule)
-      ->JSNode()
+      ->JSObject()
       ->SetContent(wsValue, wsFormatValue, true, true, true);
 }
 
@@ -1122,7 +1122,7 @@
     pSrcChild = pSrcChild->GetNodeItem(XFA_NODEITEM_NextSibling);
     pDstChild = pDstChild->GetNodeItem(XFA_NODEITEM_NextSibling);
   }
-  ToNode(pSrcModule)->JSNode()->MoveBufferMapData(pDstModule);
+  ToNode(pSrcModule)->JSObject()->MoveBufferMapData(pDstModule);
 }
 
 void CJX_Object::OnChanging(XFA_Attribute eAttr, bool bNotify) {
@@ -1558,7 +1558,7 @@
   if (!pManagerNode)
     return;
 
-  pManagerNode->JSNode()->InstanceManager_MoveInstance(iTo, iFrom);
+  pManagerNode->JSObject()->InstanceManager_MoveInstance(iTo, iFrom);
   CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
   if (!pNotify)
     return;
@@ -1619,7 +1619,7 @@
       XFA_NODEITEM_FirstChild);
   if (pNode && pNode->GetElementType() == XFA_Element::Decimal) {
     if (pUIChild->GetElementType() == XFA_Element::NumericEdit &&
-        (pNode->JSNode()->GetInteger(XFA_Attribute::FracDigits) == -1)) {
+        (pNode->JSObject()->GetInteger(XFA_Attribute::FracDigits) == -1)) {
       pValue->SetString(content.UTF8Encode().AsStringView());
     } else {
       CFX_Decimal decimal(content.AsStringView());
@@ -1902,7 +1902,8 @@
            ToNode(GetXFAObject())->GetNodeItem(XFA_NODEITEM_PrevSibling);
        pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
     if (pNode->GetElementType() == XFA_Element::InstanceManager) {
-      WideString wsInstMgrName = pNode->JSNode()->GetCData(XFA_Attribute::Name);
+      WideString wsInstMgrName =
+          pNode->JSObject()->GetCData(XFA_Attribute::Name);
       if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' &&
           wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) {
         pInstanceMgr = pNode;
@@ -2073,7 +2074,7 @@
   }
 
   if (ToNode(GetXFAObject())->GetPacketType() != XFA_PacketType::Datasets)
-    return ToNode(GetXFAObject())->GetModelNode()->JSNode()->TryNamespace();
+    return ToNode(GetXFAObject())->GetModelNode()->JSObject()->TryNamespace();
 
   CFX_XMLNode* pXMLNode = ToNode(GetXFAObject())->GetXMLMappingNode();
   if (!pXMLNode || pXMLNode->GetType() != FX_XMLNODE_Element)
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index cb1fef6..b704037 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -23,6 +23,7 @@
 class CJS_V8;
 class CXFA_CalcData;
 class CXFA_Document;
+class CXFA_LayoutItem;
 class CXFA_Object;
 struct XFA_MAPMODULEDATA;
 
@@ -58,6 +59,12 @@
   }
   CXFA_WidgetData* GetWidgetData() const { return widget_data_.get(); }
 
+  void SetCalcRecursionCount(size_t count) { calc_recursion_count_ = count; }
+  size_t GetCalcRecursionCount() const { return calc_recursion_count_; }
+
+  void SetLayoutItem(CXFA_LayoutItem* item) { layout_item_ = item; }
+  CXFA_LayoutItem* GetLayoutItem() const { return layout_item_.Get(); }
+
   bool HasMethod(const WideString& func) const;
   CJS_Return RunMethod(const WideString& func,
                        const std::vector<v8::Local<v8::Value>>& params);
@@ -353,11 +360,13 @@
   void RemoveMapModuleKey(void* pKey);
   void MoveBufferMapData(CXFA_Object* pDstModule);
 
-  std::unique_ptr<CXFA_WidgetData> widget_data_;
   UnownedPtr<CXFA_Object> object_;
+  UnownedPtr<CXFA_LayoutItem> layout_item_;
+  std::unique_ptr<CXFA_WidgetData> widget_data_;
   std::unique_ptr<XFA_MAPMODULEDATA> map_module_data_;
   std::unique_ptr<CXFA_CalcData> calc_data_;
   std::map<ByteString, CJX_MethodCall> method_specs_;
+  size_t calc_recursion_count_ = 0;
 };
 
 #endif  // FXJS_XFA_CJX_OBJECT_H_
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index 3ff947c..2d22fb8 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -258,7 +258,7 @@
   if (!pDynamicRender)
     return;
 
-  WideString wsType = pDynamicRender->JSNode()->GetContent(false);
+  WideString wsType = pDynamicRender->JSObject()->GetContent(false);
   if (wsType == L"required")
     m_FormType = FormType::kXFAFull;
 }
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index f1ae2af..5b1dc82 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -279,7 +279,7 @@
                                      : nullptr;
       }
       if (pValidateNode)
-        wsValidateStr = pValidateNode->JSNode()->GetContent(false);
+        wsValidateStr = pValidateNode->JSObject()->GetContent(false);
     }
 
     if (!wsValidateStr.Contains(L"preSubmit"))
@@ -615,7 +615,7 @@
 }
 
 void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) {
-  CXFA_CalcData* pGlobalData = pNodeChange->JSNode()->GetCalcData();
+  CXFA_CalcData* pGlobalData = pNodeChange->JSObject()->GetCalcData();
   if (!pGlobalData)
     return;
 
@@ -629,8 +629,9 @@
   while (index < m_CalculateAccs.size()) {
     CXFA_WidgetAcc* pCurAcc = m_CalculateAccs[index];
     AddCalculateNodeNotify(pCurAcc->GetNode());
-    size_t recurse = pCurAcc->GetNode()->JSNode()->GetCalcRecursionCount() + 1;
-    pCurAcc->GetNode()->JSNode()->SetCalcRecursionCount(recurse);
+    size_t recurse =
+        pCurAcc->GetNode()->JSObject()->GetCalcRecursionCount() + 1;
+    pCurAcc->GetNode()->JSObject()->SetCalcRecursionCount(recurse);
     if (recurse > 11)
       break;
     if (pCurAcc->ProcessCalculate() == XFA_EVENTERROR_Success)
@@ -648,7 +649,7 @@
     RunCalculateRecursive(0);
 
   for (CXFA_WidgetAcc* pCurAcc : m_CalculateAccs)
-    pCurAcc->GetNode()->JSNode()->SetCalcRecursionCount(0);
+    pCurAcc->GetNode()->JSObject()->SetCalcRecursionCount(0);
 
   m_CalculateAccs.clear();
   return XFA_EVENTERROR_Success;
@@ -736,21 +737,21 @@
         continue;
 
       if (bValueUseContent) {
-        wsValue = refNode->JSNode()->GetContent(false);
+        wsValue = refNode->JSObject()->GetContent(false);
       } else {
         CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash);
-        wsValue = nodeValue ? nodeValue->JSNode()->GetContent(false)
-                            : refNode->JSNode()->GetContent(false);
+        wsValue = nodeValue ? nodeValue->JSObject()->GetContent(false)
+                            : refNode->JSObject()->GetContent(false);
       }
 
       if (!bUseValue) {
         if (bLabelUseContent) {
-          wsLabel = refNode->JSNode()->GetContent(false);
+          wsLabel = refNode->JSObject()->GetContent(false);
         } else {
           CXFA_Node* nodeLabel =
               refNode->GetFirstChildByName(wsLabelRef.AsStringView());
           if (nodeLabel)
-            wsLabel = nodeLabel->JSNode()->GetContent(false);
+            wsLabel = nodeLabel->JSObject()->GetContent(false);
         }
       } else {
         wsLabel = wsValue;
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index fc425c5..ef0b971 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -341,7 +341,7 @@
 
   XFA_Element eType = pNode->GetElementType();
   if (XFA_IsCreateWidget(eType)) {
-    pNode->JSNode()->SetWidgetData(
+    pNode->JSObject()->SetWidgetData(
         pdfium::MakeUnique<CXFA_WidgetAcc>(pDocView, pNode));
     return;
   }
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 26bdc26..2234b4c 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -315,7 +315,7 @@
         pTraversal->GetChild(0, XFA_Element::Traverse, false);
     if (pTraverse) {
       pdfium::Optional<WideString> traverseWidgetName =
-          pTraverse->JSNode()->TryAttribute(XFA_Attribute::Ref, true);
+          pTraverse->JSObject()->TryAttribute(XFA_Attribute::Ref, true);
       if (traverseWidgetName)
         return FindWidgetByName(*traverseWidgetName, pWidget);
     }
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 372abff..c4483c6 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -314,31 +314,31 @@
   CXFA_Node* pCaption = CreateCopyNode(XFA_Element::Caption, pField);
   CXFA_Node* pValue = CreateCopyNode(XFA_Element::Value, pCaption);
   CXFA_Node* pText = CreateCopyNode(XFA_Element::Text, pValue);
-  pText->JSNode()->SetContent(L"Button", L"Button", false, false, true);
+  pText->JSObject()->SetContent(L"Button", L"Button", false, false, true);
 
   CXFA_Node* pPara = CreateCopyNode(XFA_Element::Para, pCaption);
-  pPara->JSNode()->SetEnum(XFA_Attribute::VAlign, XFA_AttributeEnum::Middle,
-                           false);
-  pPara->JSNode()->SetEnum(XFA_Attribute::HAlign, XFA_AttributeEnum::Center,
-                           false);
+  pPara->JSObject()->SetEnum(XFA_Attribute::VAlign, XFA_AttributeEnum::Middle,
+                             false);
+  pPara->JSObject()->SetEnum(XFA_Attribute::HAlign, XFA_AttributeEnum::Center,
+                             false);
   CreateFontNode(pCaption);
 
   CXFA_Node* pBorder = CreateCopyNode(XFA_Element::Border, pField);
-  pBorder->JSNode()->SetEnum(XFA_Attribute::Hand, XFA_AttributeEnum::Right,
-                             false);
+  pBorder->JSObject()->SetEnum(XFA_Attribute::Hand, XFA_AttributeEnum::Right,
+                               false);
 
   CXFA_Node* pEdge = CreateCopyNode(XFA_Element::Edge, pBorder);
-  pEdge->JSNode()->SetEnum(XFA_Attribute::Stroke, XFA_AttributeEnum::Raised,
-                           false);
+  pEdge->JSObject()->SetEnum(XFA_Attribute::Stroke, XFA_AttributeEnum::Raised,
+                             false);
 
   CXFA_Node* pFill = CreateCopyNode(XFA_Element::Fill, pBorder);
   CXFA_Node* pColor = CreateCopyNode(XFA_Element::Color, pFill);
-  pColor->JSNode()->SetCData(XFA_Attribute::Value, L"212, 208, 200", false,
-                             false);
+  pColor->JSObject()->SetCData(XFA_Attribute::Value, L"212, 208, 200", false,
+                               false);
 
   CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField);
-  pBind->JSNode()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
-                           false);
+  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
+                             false);
 
   return pField;
 }
@@ -358,8 +358,8 @@
   CXFA_Node* pField = CreateField(XFA_Element::CheckButton, pParent, pBefore);
   CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_Element::Ui);
   CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_Element::CheckButton);
-  pWidget->JSNode()->SetEnum(XFA_Attribute::Shape, XFA_AttributeEnum::Round,
-                             false);
+  pWidget->JSObject()->SetEnum(XFA_Attribute::Shape, XFA_AttributeEnum::Round,
+                               false);
   return pField;
 }
 
@@ -402,10 +402,10 @@
   CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
   CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild);
   CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild);
-  pListBox->JSNode()->SetEnum(XFA_Attribute::Open, XFA_AttributeEnum::Always,
-                              false);
-  pListBox->JSNode()->SetEnum(XFA_Attribute::CommitOn, XFA_AttributeEnum::Exit,
-                              false);
+  pListBox->JSObject()->SetEnum(XFA_Attribute::Open, XFA_AttributeEnum::Always,
+                                false);
+  pListBox->JSObject()->SetEnum(XFA_Attribute::CommitOn,
+                                XFA_AttributeEnum::Exit, false);
   return pField;
 }
 
@@ -418,8 +418,8 @@
                                                     CXFA_Node* pBefore) const {
   CXFA_Node* pField = CreateField(XFA_Element::PasswordEdit, pParent, pBefore);
   CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField);
-  pBind->JSNode()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
-                           false);
+  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
+                             false);
   return pField;
 }
 
@@ -513,8 +513,8 @@
 
 CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const {
   CXFA_Node* pFont = CreateCopyNode(XFA_Element::Font, pParent);
-  pFont->JSNode()->SetCData(XFA_Attribute::Typeface, L"Myriad Pro", false,
-                            false);
+  pFont->JSObject()->SetCData(XFA_Attribute::Typeface, L"Myriad Pro", false,
+                              false);
   return pFont;
 }
 
@@ -523,21 +523,21 @@
                                                   float fInsets[4]) const {
   CXFA_Node* pMargin = CreateCopyNode(XFA_Element::Margin, pParent);
   if (dwFlags & 0x01)
-    pMargin->JSNode()->SetMeasure(XFA_Attribute::LeftInset,
-                                  CXFA_Measurement(fInsets[0], XFA_Unit::Pt),
-                                  false);
+    pMargin->JSObject()->SetMeasure(XFA_Attribute::LeftInset,
+                                    CXFA_Measurement(fInsets[0], XFA_Unit::Pt),
+                                    false);
   if (dwFlags & 0x02)
-    pMargin->JSNode()->SetMeasure(XFA_Attribute::TopInset,
-                                  CXFA_Measurement(fInsets[1], XFA_Unit::Pt),
-                                  false);
+    pMargin->JSObject()->SetMeasure(XFA_Attribute::TopInset,
+                                    CXFA_Measurement(fInsets[1], XFA_Unit::Pt),
+                                    false);
   if (dwFlags & 0x04)
-    pMargin->JSNode()->SetMeasure(XFA_Attribute::RightInset,
-                                  CXFA_Measurement(fInsets[2], XFA_Unit::Pt),
-                                  false);
+    pMargin->JSObject()->SetMeasure(XFA_Attribute::RightInset,
+                                    CXFA_Measurement(fInsets[2], XFA_Unit::Pt),
+                                    false);
   if (dwFlags & 0x08)
-    pMargin->JSNode()->SetMeasure(XFA_Attribute::BottomInset,
-                                  CXFA_Measurement(fInsets[3], XFA_Unit::Pt),
-                                  false);
+    pMargin->JSObject()->SetMeasure(XFA_Attribute::BottomInset,
+                                    CXFA_Measurement(fInsets[3], XFA_Unit::Pt),
+                                    false);
   return pMargin;
 }
 
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index ed36426..85ec369 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -671,7 +671,7 @@
     }
   }
 
-  WideString wsText = pNode->JSNode()->GetContent(false);
+  WideString wsText = pNode->JSObject()->GetContent(false);
   wsText.TrimRight(L" ");
   bool bRet = AppendChar(wsText, fLinePos, fSpaceAbove, bSavePieces);
   if (bRet && m_pLoader)
diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp
index 996ed00..5e242a4 100644
--- a/xfa/fxfa/cxfa_textprovider.cpp
+++ b/xfa/fxfa/cxfa_textprovider.cpp
@@ -46,7 +46,8 @@
     CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) {
       pdfium::Optional<WideString> contentType =
-          pChildNode->JSNode()->TryAttribute(XFA_Attribute::ContentType, false);
+          pChildNode->JSObject()->TryAttribute(XFA_Attribute::ContentType,
+                                               false);
       if (contentType && *contentType == L"text/html")
         bRichText = true;
     }
@@ -84,7 +85,8 @@
     CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) {
       pdfium::Optional<WideString> contentType =
-          pChildNode->JSNode()->TryAttribute(XFA_Attribute::ContentType, false);
+          pChildNode->JSObject()->TryAttribute(XFA_Attribute::ContentType,
+                                               false);
       if (contentType && *contentType == L"text/html")
         bRichText = true;
     }
@@ -98,7 +100,7 @@
 
   CXFA_Node* pNode = pItemNode->GetNodeItem(XFA_NODEITEM_FirstChild);
   while (pNode) {
-    WideString wsName = pNode->JSNode()->GetCData(XFA_Attribute::Name);
+    WideString wsName = pNode->JSObject()->GetCData(XFA_Attribute::Name);
     if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover && wsName == L"rollover")
       return pNode;
     if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName == L"down")
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index 86d1da5..c43ab65 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -209,7 +209,7 @@
           WideString itemText;
           if (pItems->CountChildren(XFA_Element::Unknown, false) > 1) {
             itemText = pItems->GetChild(1, XFA_Element::Unknown, false)
-                           ->JSNode()
+                           ->JSObject()
                            ->GetContent(false);
           }
           pAcc->SetValue(XFA_VALUEPICTURE_Raw, itemText);
@@ -241,19 +241,19 @@
     imageData.SetHref(wsHref);
   }
 
-  m_pNode->JSNode()->SetContent(wsData, GetFormatDataValue(wsData), true, false,
-                                true);
+  m_pNode->JSObject()->SetContent(wsData, GetFormatDataValue(wsData), true,
+                                  false, true);
 
   CXFA_Node* pBind = GetDatasets();
   if (!pBind) {
     imageData.SetTransferEncoding(XFA_AttributeEnum::Base64);
     return;
   }
-  pBind->JSNode()->SetCData(XFA_Attribute::ContentType, wsContentType, false,
-                            false);
+  pBind->JSObject()->SetCData(XFA_Attribute::ContentType, wsContentType, false,
+                              false);
   CXFA_Node* pHrefNode = pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
   if (pHrefNode) {
-    pHrefNode->JSNode()->SetCData(XFA_Attribute::Value, wsHref, false, false);
+    pHrefNode->JSObject()->SetCData(XFA_Attribute::Value, wsHref, false, false);
   } else {
     CFX_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
     ASSERT(pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element);
@@ -507,7 +507,7 @@
   }
   if (!wsCaptionName.IsEmpty())
     return wsCaptionName;
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::Name);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::Name);
 }
 
 WideString CXFA_WidgetAcc::GetValidateMessage(bool bError, bool bVersionFlag) {
@@ -636,10 +636,11 @@
         if (static_cast<CXFA_WidgetAcc*>(pRefNode->GetWidgetData()) == this)
           continue;
 
-        CXFA_CalcData* pGlobalData = pRefNode->JSNode()->GetCalcData();
+        CXFA_CalcData* pGlobalData = pRefNode->JSObject()->GetCalcData();
         if (!pGlobalData) {
-          pRefNode->JSNode()->SetCalcData(pdfium::MakeUnique<CXFA_CalcData>());
-          pGlobalData = pRefNode->JSNode()->GetCalcData();
+          pRefNode->JSObject()->SetCalcData(
+              pdfium::MakeUnique<CXFA_CalcData>());
+          pGlobalData = pRefNode->JSObject()->GetCalcData();
         }
         if (!pdfium::ContainsValue(pGlobalData->m_Globals, this))
           pGlobalData->m_Globals.push_back(this);
@@ -1260,7 +1261,7 @@
   bool bCanSplitNoContent = false;
   XFA_AttributeEnum eLayoutMode = GetNode()
                                       ->GetNodeItem(XFA_NODEITEM_Parent)
-                                      ->JSNode()
+                                      ->JSObject()
                                       ->TryEnum(XFA_Attribute::Layout, true)
                                       .value_or(XFA_AttributeEnum::Position);
   if ((eLayoutMode == XFA_AttributeEnum::Position ||
diff --git a/xfa/fxfa/parser/cxfa_binddata.cpp b/xfa/fxfa/parser/cxfa_binddata.cpp
index 19c4c96..62146e3 100644
--- a/xfa/fxfa/parser/cxfa_binddata.cpp
+++ b/xfa/fxfa/parser/cxfa_binddata.cpp
@@ -14,5 +14,5 @@
   CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_Element::Picture, false);
   if (!pPicture)
     return L"";
-  return pPicture->JSNode()->GetContent(false);
+  return pPicture->JSObject()->GetContent(false);
 }
diff --git a/xfa/fxfa/parser/cxfa_binditemsdata.cpp b/xfa/fxfa/parser/cxfa_binditemsdata.cpp
index 46ee0d5..0477d3e 100644
--- a/xfa/fxfa/parser/cxfa_binditemsdata.cpp
+++ b/xfa/fxfa/parser/cxfa_binditemsdata.cpp
@@ -12,13 +12,13 @@
     : CXFA_DataData(pNode) {}
 
 WideString CXFA_BindItemsData::GetLabelRef() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::LabelRef);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::LabelRef);
 }
 
 WideString CXFA_BindItemsData::GetValueRef() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::ValueRef);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::ValueRef);
 }
 
 WideString CXFA_BindItemsData::GetRef() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::Ref);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::Ref);
 }
diff --git a/xfa/fxfa/parser/cxfa_boxdata.cpp b/xfa/fxfa/parser/cxfa_boxdata.cpp
index b8a82c2..8f2674c 100644
--- a/xfa/fxfa/parser/cxfa_boxdata.cpp
+++ b/xfa/fxfa/parser/cxfa_boxdata.cpp
@@ -21,7 +21,7 @@
   int32_t i, j;
   for (i = 0, j = 0; i < 4; i++) {
     CXFA_CornerData cornerData = CXFA_CornerData(
-        pNode->JSNode()->GetProperty(i, XFA_Element::Corner, i == 0));
+        pNode->JSObject()->GetProperty(i, XFA_Element::Corner, i == 0));
     if (cornerData.HasValidNode() || i == 0) {
       strokes[j] = cornerData;
     } else if (!bNull) {
@@ -32,7 +32,7 @@
     }
     j++;
     CXFA_EdgeData edgeData = CXFA_EdgeData(
-        pNode->JSNode()->GetProperty(i, XFA_Element::Edge, i == 0));
+        pNode->JSObject()->GetProperty(i, XFA_Element::Edge, i == 0));
     if (edgeData.HasValidNode() || i == 0) {
       strokes[j] = edgeData;
     } else if (!bNull) {
@@ -79,13 +79,13 @@
 XFA_AttributeEnum CXFA_BoxData::GetHand() const {
   if (!m_pNode)
     return XFA_AttributeEnum::Even;
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Hand);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Hand);
 }
 
 XFA_AttributeEnum CXFA_BoxData::GetPresence() const {
   if (!m_pNode)
     return XFA_AttributeEnum::Hidden;
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::Presence, true)
       .value_or(XFA_AttributeEnum::Visible);
 }
@@ -97,7 +97,7 @@
 }
 
 CXFA_EdgeData CXFA_BoxData::GetEdgeData(int32_t nIndex) const {
-  return CXFA_EdgeData(m_pNode ? m_pNode->JSNode()->GetProperty(
+  return CXFA_EdgeData(m_pNode ? m_pNode->JSObject()->GetProperty(
                                      nIndex, XFA_Element::Edge, nIndex == 0)
                                : nullptr);
 }
@@ -109,19 +109,19 @@
 bool CXFA_BoxData::IsCircular() const {
   if (!m_pNode)
     return false;
-  return m_pNode->JSNode()->GetBoolean(XFA_Attribute::Circular);
+  return m_pNode->JSObject()->GetBoolean(XFA_Attribute::Circular);
 }
 
 pdfium::Optional<int32_t> CXFA_BoxData::GetStartAngle() const {
   if (!m_pNode)
     return {};
-  return m_pNode->JSNode()->TryInteger(XFA_Attribute::StartAngle, false);
+  return m_pNode->JSObject()->TryInteger(XFA_Attribute::StartAngle, false);
 }
 
 pdfium::Optional<int32_t> CXFA_BoxData::GetSweepAngle() const {
   if (!m_pNode)
     return {};
-  return m_pNode->JSNode()->TryInteger(XFA_Attribute::SweepAngle, false);
+  return m_pNode->JSObject()->TryInteger(XFA_Attribute::SweepAngle, false);
 }
 
 CXFA_FillData CXFA_BoxData::GetFillData(bool bModified) const {
@@ -129,7 +129,7 @@
     return CXFA_FillData(nullptr);
 
   CXFA_Node* pFillNode =
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Fill, bModified);
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Fill, bModified);
   return CXFA_FillData(pFillNode);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_calculatedata.cpp b/xfa/fxfa/parser/cxfa_calculatedata.cpp
index c5a2781..b0feb59 100644
--- a/xfa/fxfa/parser/cxfa_calculatedata.cpp
+++ b/xfa/fxfa/parser/cxfa_calculatedata.cpp
@@ -13,7 +13,7 @@
     : CXFA_DataData(pNode) {}
 
 XFA_AttributeEnum CXFA_CalculateData::GetOverride() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::Override, false)
       .value_or(XFA_AttributeEnum::Error);
 }
diff --git a/xfa/fxfa/parser/cxfa_captiondata.cpp b/xfa/fxfa/parser/cxfa_captiondata.cpp
index af670f1..6d9f02b 100644
--- a/xfa/fxfa/parser/cxfa_captiondata.cpp
+++ b/xfa/fxfa/parser/cxfa_captiondata.cpp
@@ -12,26 +12,26 @@
 CXFA_CaptionData::CXFA_CaptionData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 bool CXFA_CaptionData::IsVisible() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
              .value_or(XFA_AttributeEnum::Visible) ==
          XFA_AttributeEnum::Visible;
 }
 
 bool CXFA_CaptionData::IsHidden() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
              .value_or(XFA_AttributeEnum::Visible) == XFA_AttributeEnum::Hidden;
 }
 
 XFA_AttributeEnum CXFA_CaptionData::GetPlacementType() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::Placement, true)
       .value_or(XFA_AttributeEnum::Left);
 }
 
 float CXFA_CaptionData::GetReserve() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::Reserve)
       .ToUnit(XFA_Unit::Pt);
 }
diff --git a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
index 07203ca..28c0c2e 100644
--- a/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_containerlayoutitem.cpp
@@ -31,10 +31,13 @@
   if (!pMedium)
     return size;
 
-  size = CFX_SizeF(
-      pMedium->JSNode()->GetMeasure(XFA_Attribute::Short).ToUnit(XFA_Unit::Pt),
-      pMedium->JSNode()->GetMeasure(XFA_Attribute::Long).ToUnit(XFA_Unit::Pt));
-  if (pMedium->JSNode()->GetEnum(XFA_Attribute::Orientation) ==
+  size = CFX_SizeF(pMedium->JSObject()
+                       ->GetMeasure(XFA_Attribute::Short)
+                       .ToUnit(XFA_Unit::Pt),
+                   pMedium->JSObject()
+                       ->GetMeasure(XFA_Attribute::Long)
+                       .ToUnit(XFA_Unit::Pt));
+  if (pMedium->JSObject()->GetEnum(XFA_Attribute::Orientation) ==
       XFA_AttributeEnum::Landscape) {
     size = CFX_SizeF(size.height, size.width);
   }
diff --git a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
index 0c9cab4..cfa5ae5 100644
--- a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
@@ -15,6 +15,6 @@
       m_dwStatus(0) {}
 
 CXFA_ContentLayoutItem::~CXFA_ContentLayoutItem() {
-  if (m_pFormNode->JSNode()->GetLayoutItem() == this)
-    m_pFormNode->JSNode()->SetLayoutItem(nullptr);
+  if (m_pFormNode->JSObject()->GetLayoutItem() == this)
+    m_pFormNode->JSObject()->SetLayoutItem(nullptr);
 }
diff --git a/xfa/fxfa/parser/cxfa_datadata.cpp b/xfa/fxfa/parser/cxfa_datadata.cpp
index 8429dd4..b2c8119 100644
--- a/xfa/fxfa/parser/cxfa_datadata.cpp
+++ b/xfa/fxfa/parser/cxfa_datadata.cpp
@@ -72,7 +72,7 @@
 pdfium::Optional<float> CXFA_DataData::TryMeasureAsFloat(
     XFA_Attribute attr) const {
   pdfium::Optional<CXFA_Measurement> measure =
-      m_pNode->JSNode()->TryMeasure(attr, false);
+      m_pNode->JSObject()->TryMeasure(attr, false);
   if (measure)
     return {measure->ToUnit(XFA_Unit::Pt)};
   return {};
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index 8e0d25d..e418c83 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -162,12 +162,12 @@
           continue;
 
         pdfium::Optional<WideString> namespaceURI =
-            pDatasetsChild->JSNode()->TryNamespace();
+            pDatasetsChild->JSObject()->TryNamespace();
         if (!namespaceURI)
           continue;
 
         pdfium::Optional<WideString> datasetsURI =
-            pDatasetsNode->JSNode()->TryNamespace();
+            pDatasetsNode->JSObject()->TryNamespace();
         if (!datasetsURI)
           continue;
         if (*namespaceURI == *datasetsURI)
@@ -265,7 +265,7 @@
   if (pFormFiller) {
     m_dwDocFlags |= XFA_DOCFLAG_HasInteractive;
 
-    WideString wsInteractive = pFormFiller->JSNode()->GetContent(false);
+    WideString wsInteractive = pFormFiller->JSObject()->GetContent(false);
     if (wsInteractive == L"1") {
       m_dwDocFlags |= XFA_DOCFLAG_Interactive;
       return true;
@@ -331,7 +331,7 @@
   CXFA_NodeIterator sIterator(pRoot);
   for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
        pNode = sIterator.MoveToNext()) {
-    WideString wsIDVal = pNode->JSNode()->GetCData(XFA_Attribute::Id);
+    WideString wsIDVal = pNode->JSObject()->GetCData(XFA_Attribute::Id);
     if (!wsIDVal.IsEmpty() && wsIDVal == wsID)
       return pNode;
   }
@@ -348,15 +348,15 @@
   CXFA_NodeIterator sIterator(pTemplateRoot);
   for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
        pNode = sIterator.MoveToNext()) {
-    WideString wsIDVal = pNode->JSNode()->GetCData(XFA_Attribute::Id);
+    WideString wsIDVal = pNode->JSObject()->GetCData(XFA_Attribute::Id);
     if (!wsIDVal.IsEmpty())
       mIDMap[FX_HashCode_GetW(wsIDVal.AsStringView(), false)] = pNode;
 
-    WideString wsUseVal = pNode->JSNode()->GetCData(XFA_Attribute::Use);
+    WideString wsUseVal = pNode->JSObject()->GetCData(XFA_Attribute::Use);
     if (!wsUseVal.IsEmpty()) {
       sUseNodes.insert(pNode);
     } else {
-      wsUseVal = pNode->JSNode()->GetCData(XFA_Attribute::Usehref);
+      wsUseVal = pNode->JSObject()->GetCData(XFA_Attribute::Usehref);
       if (!wsUseVal.IsEmpty())
         sUseNodes.insert(pNode);
     }
@@ -368,7 +368,7 @@
     WideStringView wsSOM;
 
     WideString wsUseVal =
-        pUseHrefNode->JSNode()->GetCData(XFA_Attribute::Usehref);
+        pUseHrefNode->JSObject()->GetCData(XFA_Attribute::Usehref);
     if (!wsUseVal.IsEmpty()) {
       auto uSharpPos = wsUseVal.Find('#');
       if (!uSharpPos.has_value()) {
@@ -388,7 +388,7 @@
         }
       }
     } else {
-      wsUseVal = pUseHrefNode->JSNode()->GetCData(XFA_Attribute::Use);
+      wsUseVal = pUseHrefNode->JSObject()->GetCData(XFA_Attribute::Use);
       if (!wsUseVal.IsEmpty()) {
         if (wsUseVal[0] == '#')
           wsID = WideStringView(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1);
diff --git a/xfa/fxfa/parser/cxfa_eventdata.cpp b/xfa/fxfa/parser/cxfa_eventdata.cpp
index 1af8389..0250346 100644
--- a/xfa/fxfa/parser/cxfa_eventdata.cpp
+++ b/xfa/fxfa/parser/cxfa_eventdata.cpp
@@ -11,7 +11,7 @@
 CXFA_EventData::CXFA_EventData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 XFA_AttributeEnum CXFA_EventData::GetActivity() {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Activity);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Activity);
 }
 
 XFA_Element CXFA_EventData::GetEventType() const {
@@ -27,7 +27,7 @@
 }
 
 WideString CXFA_EventData::GetRef() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::Ref);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::Ref);
 }
 
 CXFA_ScriptData CXFA_EventData::GetScriptData() const {
diff --git a/xfa/fxfa/parser/cxfa_exdatadata.cpp b/xfa/fxfa/parser/cxfa_exdatadata.cpp
index 7508ba8..41a1b03 100644
--- a/xfa/fxfa/parser/cxfa_exdatadata.cpp
+++ b/xfa/fxfa/parser/cxfa_exdatadata.cpp
@@ -11,6 +11,6 @@
 CXFA_ExDataData::CXFA_ExDataData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 void CXFA_ExDataData::SetContentType(const WideString& wsContentType) {
-  m_pNode->JSNode()->SetCData(XFA_Attribute::ContentType, wsContentType, false,
-                              false);
+  m_pNode->JSObject()->SetCData(XFA_Attribute::ContentType, wsContentType,
+                                false, false);
 }
diff --git a/xfa/fxfa/parser/cxfa_filldata.cpp b/xfa/fxfa/parser/cxfa_filldata.cpp
index b4ca997..2ea7652 100644
--- a/xfa/fxfa/parser/cxfa_filldata.cpp
+++ b/xfa/fxfa/parser/cxfa_filldata.cpp
@@ -13,7 +13,7 @@
 CXFA_FillData::~CXFA_FillData() {}
 
 bool CXFA_FillData::IsVisible() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
              ->TryEnum(XFA_Attribute::Presence, true)
              .value_or(XFA_AttributeEnum::Visible) ==
          XFA_AttributeEnum::Visible;
@@ -21,21 +21,21 @@
 
 void CXFA_FillData::SetColor(FX_ARGB color) {
   CXFA_Node* pNode =
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Color, true);
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Color, true);
   int a;
   int r;
   int g;
   int b;
   std::tie(a, r, g, b) = ArgbDecode(color);
-  pNode->JSNode()->SetCData(XFA_Attribute::Value,
-                            WideString::Format(L"%d,%d,%d", r, g, b), false,
-                            false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Value,
+                              WideString::Format(L"%d,%d,%d", r, g, b), false,
+                              false);
 }
 
 FX_ARGB CXFA_FillData::GetColor(bool bText) const {
   if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Color, false)) {
     pdfium::Optional<WideString> wsColor =
-        pNode->JSNode()->TryCData(XFA_Attribute::Value, false);
+        pNode->JSObject()->TryCData(XFA_Attribute::Value, false);
     if (wsColor)
       return CXFA_DataData::ToColor(wsColor->AsStringView());
   }
@@ -57,14 +57,14 @@
 }
 
 XFA_AttributeEnum CXFA_FillData::GetPatternType() const {
-  return GetPattern()->JSNode()->GetEnum(XFA_Attribute::Type);
+  return GetPattern()->JSObject()->GetEnum(XFA_Attribute::Type);
 }
 
 FX_ARGB CXFA_FillData::GetPatternColor() const {
   if (CXFA_Node* pColor =
           GetPattern()->GetChild(0, XFA_Element::Color, false)) {
     pdfium::Optional<WideString> wsColor =
-        pColor->JSNode()->TryCData(XFA_Attribute::Value, false);
+        pColor->JSObject()->TryCData(XFA_Attribute::Value, false);
     if (wsColor)
       return CXFA_DataData::ToColor(wsColor->AsStringView());
   }
@@ -73,7 +73,7 @@
 
 int32_t CXFA_FillData::GetStippleRate() const {
   return GetStipple()
-      ->JSNode()
+      ->JSObject()
       ->TryInteger(XFA_Attribute::Rate, true)
       .value_or(50);
 }
@@ -82,7 +82,7 @@
   if (CXFA_Node* pColor =
           GetStipple()->GetChild(0, XFA_Element::Color, false)) {
     pdfium::Optional<WideString> wsColor =
-        pColor->JSNode()->TryCData(XFA_Attribute::Value, false);
+        pColor->JSObject()->TryCData(XFA_Attribute::Value, false);
     if (wsColor)
       return CXFA_DataData::ToColor(wsColor->AsStringView());
   }
@@ -91,7 +91,7 @@
 
 XFA_AttributeEnum CXFA_FillData::GetLinearType() const {
   return GetLinear()
-      ->JSNode()
+      ->JSObject()
       ->TryEnum(XFA_Attribute::Type, true)
       .value_or(XFA_AttributeEnum::ToRight);
 }
@@ -99,7 +99,7 @@
 FX_ARGB CXFA_FillData::GetLinearColor() const {
   if (CXFA_Node* pColor = GetLinear()->GetChild(0, XFA_Element::Color, false)) {
     pdfium::Optional<WideString> wsColor =
-        pColor->JSNode()->TryCData(XFA_Attribute::Value, false);
+        pColor->JSObject()->TryCData(XFA_Attribute::Value, false);
     if (wsColor)
       return CXFA_DataData::ToColor(wsColor->AsStringView());
   }
@@ -108,7 +108,7 @@
 
 bool CXFA_FillData::IsRadialToEdge() const {
   return GetRadial()
-             ->JSNode()
+             ->JSObject()
              ->TryEnum(XFA_Attribute::Type, true)
              .value_or(XFA_AttributeEnum::ToEdge) == XFA_AttributeEnum::ToEdge;
 }
@@ -116,7 +116,7 @@
 FX_ARGB CXFA_FillData::GetRadialColor() const {
   if (CXFA_Node* pColor = GetRadial()->GetChild(0, XFA_Element::Color, false)) {
     pdfium::Optional<WideString> wsColor =
-        pColor->JSNode()->TryCData(XFA_Attribute::Value, false);
+        pColor->JSObject()->TryCData(XFA_Attribute::Value, false);
     if (wsColor)
       return CXFA_DataData::ToColor(wsColor->AsStringView());
   }
@@ -124,17 +124,17 @@
 }
 
 CXFA_Node* CXFA_FillData::GetStipple() const {
-  return m_pNode->JSNode()->GetProperty(0, XFA_Element::Stipple, true);
+  return m_pNode->JSObject()->GetProperty(0, XFA_Element::Stipple, true);
 }
 
 CXFA_Node* CXFA_FillData::GetRadial() const {
-  return m_pNode->JSNode()->GetProperty(0, XFA_Element::Radial, true);
+  return m_pNode->JSObject()->GetProperty(0, XFA_Element::Radial, true);
 }
 
 CXFA_Node* CXFA_FillData::GetLinear() const {
-  return m_pNode->JSNode()->GetProperty(0, XFA_Element::Linear, true);
+  return m_pNode->JSObject()->GetProperty(0, XFA_Element::Linear, true);
 }
 
 CXFA_Node* CXFA_FillData::GetPattern() const {
-  return m_pNode->JSNode()->GetProperty(0, XFA_Element::Pattern, true);
+  return m_pNode->JSObject()->GetProperty(0, XFA_Element::Pattern, true);
 }
diff --git a/xfa/fxfa/parser/cxfa_fontdata.cpp b/xfa/fxfa/parser/cxfa_fontdata.cpp
index 7eda807..c2b4a79 100644
--- a/xfa/fxfa/parser/cxfa_fontdata.cpp
+++ b/xfa/fxfa/parser/cxfa_fontdata.cpp
@@ -14,28 +14,28 @@
 CXFA_FontData::CXFA_FontData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 float CXFA_FontData::GetBaselineShift() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::BaselineShift)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_FontData::GetHorizontalScale() const {
   WideString wsValue =
-      m_pNode->JSNode()->GetCData(XFA_Attribute::FontHorizontalScale);
+      m_pNode->JSObject()->GetCData(XFA_Attribute::FontHorizontalScale);
   int32_t iScale = FXSYS_wtoi(wsValue.c_str());
   return iScale > 0 ? (float)iScale : 100.0f;
 }
 
 float CXFA_FontData::GetVerticalScale() const {
   WideString wsValue =
-      m_pNode->JSNode()->GetCData(XFA_Attribute::FontVerticalScale);
+      m_pNode->JSObject()->GetCData(XFA_Attribute::FontVerticalScale);
   int32_t iScale = FXSYS_wtoi(wsValue.c_str());
   return iScale > 0 ? (float)iScale : 100.0f;
 }
 
 float CXFA_FontData::GetLetterSpacing() const {
   WideString wsValue =
-      m_pNode->JSNode()->GetCData(XFA_Attribute::LetterSpacing);
+      m_pNode->JSObject()->GetCData(XFA_Attribute::LetterSpacing);
   CXFA_Measurement ms(wsValue.AsStringView());
   if (ms.GetUnit() == XFA_Unit::Em)
     return ms.GetValue() * GetFontSize();
@@ -43,41 +43,41 @@
 }
 
 int32_t CXFA_FontData::GetLineThrough() const {
-  return m_pNode->JSNode()->GetInteger(XFA_Attribute::LineThrough);
+  return m_pNode->JSObject()->GetInteger(XFA_Attribute::LineThrough);
 }
 
 int32_t CXFA_FontData::GetUnderline() const {
-  return m_pNode->JSNode()->GetInteger(XFA_Attribute::Underline);
+  return m_pNode->JSObject()->GetInteger(XFA_Attribute::Underline);
 }
 
 XFA_AttributeEnum CXFA_FontData::GetUnderlinePeriod() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::UnderlinePeriod, true)
       .value_or(XFA_AttributeEnum::All);
 }
 
 float CXFA_FontData::GetFontSize() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::Size)
       .ToUnit(XFA_Unit::Pt);
 }
 
 WideString CXFA_FontData::GetTypeface() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::Typeface);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::Typeface);
 }
 
 bool CXFA_FontData::IsBold() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Weight) ==
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Weight) ==
          XFA_AttributeEnum::Bold;
 }
 
 bool CXFA_FontData::IsItalic() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Posture) ==
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Posture) ==
          XFA_AttributeEnum::Italic;
 }
 
 void CXFA_FontData::SetColor(FX_ARGB color) {
-  CXFA_FillData(m_pNode->JSNode()->GetProperty(0, XFA_Element::Fill, true))
+  CXFA_FillData(m_pNode->JSObject()->GetProperty(0, XFA_Element::Fill, true))
       .SetColor(color);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_imagedata.cpp b/xfa/fxfa/parser/cxfa_imagedata.cpp
index ebd4a8a..cacbf95 100644
--- a/xfa/fxfa/parser/cxfa_imagedata.cpp
+++ b/xfa/fxfa/parser/cxfa_imagedata.cpp
@@ -11,38 +11,38 @@
 CXFA_ImageData::CXFA_ImageData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 XFA_AttributeEnum CXFA_ImageData::GetAspect() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Aspect);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Aspect);
 }
 
 WideString CXFA_ImageData::GetContentType() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryCData(XFA_Attribute::ContentType, true)
       .value_or(L"");
 }
 
 WideString CXFA_ImageData::GetHref() const {
-  return m_pNode->JSNode()->TryCData(XFA_Attribute::Href, true).value_or(L"");
+  return m_pNode->JSObject()->TryCData(XFA_Attribute::Href, true).value_or(L"");
 }
 
 XFA_AttributeEnum CXFA_ImageData::GetTransferEncoding() const {
   return static_cast<XFA_AttributeEnum>(
-      m_pNode->JSNode()->GetEnum(XFA_Attribute::TransferEncoding));
+      m_pNode->JSObject()->GetEnum(XFA_Attribute::TransferEncoding));
 }
 
 WideString CXFA_ImageData::GetContent() const {
-  return m_pNode->JSNode()->TryContent(false, true).value_or(L"");
+  return m_pNode->JSObject()->TryContent(false, true).value_or(L"");
 }
 
 void CXFA_ImageData::SetContentType(const WideString& wsContentType) {
-  m_pNode->JSNode()->SetCData(XFA_Attribute::ContentType, wsContentType, false,
-                              false);
+  m_pNode->JSObject()->SetCData(XFA_Attribute::ContentType, wsContentType,
+                                false, false);
 }
 
 void CXFA_ImageData::SetHref(const WideString& wsHref) {
-  m_pNode->JSNode()->SetCData(XFA_Attribute::Href, wsHref, false, false);
+  m_pNode->JSObject()->SetCData(XFA_Attribute::Href, wsHref, false, false);
 }
 
 void CXFA_ImageData::SetTransferEncoding(XFA_AttributeEnum iTransferEncoding) {
-  m_pNode->JSNode()->SetEnum(XFA_Attribute::TransferEncoding, iTransferEncoding,
-                             false);
+  m_pNode->JSObject()->SetEnum(XFA_Attribute::TransferEncoding,
+                               iTransferEncoding, false);
 }
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
index 725eb53..a52821b 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
@@ -90,14 +90,14 @@
   CFX_SizeF containerSize;
   if (eType == XFA_Element::Subform || eType == XFA_Element::ExclGroup) {
     pdfium::Optional<CXFA_Measurement> wValue =
-        pFormNode->JSNode()->TryMeasure(XFA_Attribute::W, false);
+        pFormNode->JSObject()->TryMeasure(XFA_Attribute::W, false);
     if (wValue && wValue->GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
       containerSize.width = wValue->ToUnit(XFA_Unit::Pt);
       *bContainerWidthAutoSize = false;
     }
 
     pdfium::Optional<CXFA_Measurement> hValue =
-        pFormNode->JSNode()->TryMeasure(XFA_Attribute::H, false);
+        pFormNode->JSObject()->TryMeasure(XFA_Attribute::H, false);
     if (hValue && hValue->GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
       containerSize.height = hValue->ToUnit(XFA_Unit::Pt);
       *bContainerHeightAutoSize = false;
@@ -106,14 +106,14 @@
 
   if (*bContainerWidthAutoSize && eType == XFA_Element::Subform) {
     pdfium::Optional<CXFA_Measurement> maxW =
-        pFormNode->JSNode()->TryMeasure(XFA_Attribute::MaxW, false);
+        pFormNode->JSObject()->TryMeasure(XFA_Attribute::MaxW, false);
     if (maxW && maxW->GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
       containerSize.width = maxW->ToUnit(XFA_Unit::Pt);
       *bContainerWidthAutoSize = false;
     }
 
     pdfium::Optional<CXFA_Measurement> maxH =
-        pFormNode->JSNode()->TryMeasure(XFA_Attribute::MaxH, false);
+        pFormNode->JSObject()->TryMeasure(XFA_Attribute::MaxH, false);
     if (maxH && maxH->GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
       containerSize.height = maxH->ToUnit(XFA_Unit::Pt);
       *bContainerHeightAutoSize = false;
@@ -135,12 +135,12 @@
     componentSize.width = fContentCalculatedWidth;
     if (pMarginNode) {
       pdfium::Optional<CXFA_Measurement> leftInset =
-          pMarginNode->JSNode()->TryMeasure(XFA_Attribute::LeftInset, false);
+          pMarginNode->JSObject()->TryMeasure(XFA_Attribute::LeftInset, false);
       if (leftInset)
         componentSize.width += leftInset->ToUnit(XFA_Unit::Pt);
 
       pdfium::Optional<CXFA_Measurement> rightInset =
-          pMarginNode->JSNode()->TryMeasure(XFA_Attribute::RightInset, false);
+          pMarginNode->JSObject()->TryMeasure(XFA_Attribute::RightInset, false);
       if (rightInset)
         componentSize.width += rightInset->ToUnit(XFA_Unit::Pt);
     }
@@ -150,12 +150,13 @@
     componentSize.height = fContentCalculatedHeight;
     if (pMarginNode) {
       pdfium::Optional<CXFA_Measurement> topInset =
-          pMarginNode->JSNode()->TryMeasure(XFA_Attribute::TopInset, false);
+          pMarginNode->JSObject()->TryMeasure(XFA_Attribute::TopInset, false);
       if (topInset)
         componentSize.height += topInset->ToUnit(XFA_Unit::Pt);
 
       pdfium::Optional<CXFA_Measurement> bottomInset =
-          pMarginNode->JSNode()->TryMeasure(XFA_Attribute::BottomInset, false);
+          pMarginNode->JSObject()->TryMeasure(XFA_Attribute::BottomInset,
+                                              false);
       if (bottomInset)
         componentSize.height += bottomInset->ToUnit(XFA_Unit::Pt);
     }
@@ -178,16 +179,16 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSNode()
+    fLeftInset = pMarginNode->JSObject()
                      ->GetMeasure(XFA_Attribute::LeftInset)
                      .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSNode()
+    fTopInset = pMarginNode->JSObject()
                     ->GetMeasure(XFA_Attribute::TopInset)
                     .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSNode()
+    fRightInset = pMarginNode->JSObject()
                       ->GetMeasure(XFA_Attribute::RightInset)
                       .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSNode()
+    fBottomInset = pMarginNode->JSObject()
                        ->GetMeasure(XFA_Attribute::BottomInset)
                        .ToUnit(XFA_Unit::Pt);
   }
@@ -208,7 +209,8 @@
        pLayoutChild; pLayoutChild = static_cast<CXFA_ContentLayoutItem*>(
                          pLayoutChild->m_pNextSibling)) {
     int32_t nOriginalColSpan =
-        pLayoutChild->m_pFormNode->JSNode()->GetInteger(XFA_Attribute::ColSpan);
+        pLayoutChild->m_pFormNode->JSObject()->GetInteger(
+            XFA_Attribute::ColSpan);
     int32_t nColSpan = nOriginalColSpan;
     float fColSpanWidth = 0;
     if (nColSpan == -1 ||
@@ -258,7 +260,7 @@
       if (pParaNode && pLayoutChild->m_pFirstChild) {
         float fOffHeight = fContentCalculatedHeight - fOldChildHeight;
         XFA_AttributeEnum eVType =
-            pParaNode->JSNode()->GetEnum(XFA_Attribute::VAlign);
+            pParaNode->JSObject()->GetEnum(XFA_Attribute::VAlign);
         switch (eVType) {
           case XFA_AttributeEnum::Middle:
             fOffHeight = fOffHeight / 2;
@@ -295,7 +297,7 @@
     fContentCalculatedWidth = containerSize.width - fLeftInset - fRightInset;
   }
 
-  if (pLayoutRow->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout) ==
+  if (pLayoutRow->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout) ==
       XFA_AttributeEnum::Rl_row) {
     for (CXFA_ContentLayoutItem* pLayoutChild =
              (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild;
@@ -314,7 +316,7 @@
 void UpdatePendingItemLayout(CXFA_ItemLayoutProcessor* pProcessor,
                              CXFA_ContentLayoutItem* pLayoutItem) {
   XFA_AttributeEnum eLayout =
-      pLayoutItem->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+      pLayoutItem->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
   switch (eLayout) {
     case XFA_AttributeEnum::Row:
     case XFA_AttributeEnum::Rl_row:
@@ -351,16 +353,16 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSNode()
+    fLeftInset = pMarginNode->JSObject()
                      ->GetMeasure(XFA_Attribute::LeftInset)
                      .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSNode()
+    fTopInset = pMarginNode->JSObject()
                     ->GetMeasure(XFA_Attribute::TopInset)
                     .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSNode()
+    fRightInset = pMarginNode->JSObject()
                       ->GetMeasure(XFA_Attribute::RightInset)
                       .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSNode()
+    fBottomInset = pMarginNode->JSObject()
                        ->GetMeasure(XFA_Attribute::BottomInset)
                        .ToUnit(XFA_Unit::Pt);
   }
@@ -385,7 +387,7 @@
     pTrailerLayoutItem->m_sPos.y = fSplitPos - fTopInset - fBottomInset;
   }
 
-  switch (pTrailerLayoutItem->m_pFormNode->JSNode()->GetEnum(
+  switch (pTrailerLayoutItem->m_pFormNode->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
     case XFA_AttributeEnum::Right:
       pTrailerLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.width -
@@ -416,10 +418,10 @@
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSNode()
+    fLeftInset = pMarginNode->JSObject()
                      ->GetMeasure(XFA_Attribute::LeftInset)
                      .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSNode()
+    fRightInset = pMarginNode->JSObject()
                       ->GetMeasure(XFA_Attribute::RightInset)
                       .ToUnit(XFA_Unit::Pt);
   }
@@ -433,7 +435,7 @@
   }
   pLeaderLayoutItem->m_sPos.y = 0;
 
-  switch (pLeaderLayoutItem->m_pFormNode->JSNode()->GetEnum(
+  switch (pLeaderLayoutItem->m_pFormNode->JSObject()->GetEnum(
       XFA_Attribute::HAlign)) {
     case XFA_AttributeEnum::Right:
       pLeaderLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.width -
@@ -495,7 +497,7 @@
 XFA_AttributeEnum GetLayout(CXFA_Node* pFormNode, bool* bRootForceTb) {
   *bRootForceTb = false;
   pdfium::Optional<XFA_AttributeEnum> layoutMode =
-      pFormNode->JSNode()->TryEnum(XFA_Attribute::Layout, false);
+      pFormNode->JSObject()->TryEnum(XFA_Attribute::Layout, false);
   if (layoutMode)
     return *layoutMode;
 
@@ -527,7 +529,7 @@
       eKeepType = XFA_Attribute::Next;
 
     pdfium::Optional<XFA_AttributeEnum> previous =
-        pKeep->JSNode()->TryEnum(eKeepType, false);
+        pKeep->JSObject()->TryEnum(eKeepType, false);
     if (previous) {
       if (*previous == XFA_AttributeEnum::ContentArea ||
           *previous == XFA_AttributeEnum::PageArea) {
@@ -545,7 +547,7 @@
     eKeepType = XFA_Attribute::Previous;
 
   pdfium::Optional<XFA_AttributeEnum> next =
-      pKeep->JSNode()->TryEnum(eKeepType, false);
+      pKeep->JSObject()->TryEnum(eKeepType, false);
   if (!next)
     return false;
   if (*next == XFA_AttributeEnum::ContentArea ||
@@ -584,7 +586,7 @@
         break;
       }
       case XFA_Element::Break:
-        if (pBreakNode->JSNode()->GetEnum(eAttributeType) !=
+        if (pBreakNode->JSObject()->GetEnum(eAttributeType) !=
             XFA_AttributeEnum::Auto) {
           pCurActionNode = pBreakNode;
           *nCurStage = XFA_ItemLayoutProcessorStages::BreakBefore;
@@ -612,7 +614,8 @@
   for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
        pNode = sIterator.MoveToNext()) {
     CXFA_ContentLayoutItem* pCurLayoutItem =
-        static_cast<CXFA_ContentLayoutItem*>(pNode->JSNode()->GetLayoutItem());
+        static_cast<CXFA_ContentLayoutItem*>(
+            pNode->JSObject()->GetLayoutItem());
     CXFA_ContentLayoutItem* pNextLayoutItem = nullptr;
     while (pCurLayoutItem) {
       pNextLayoutItem = pCurLayoutItem->m_pNext;
@@ -660,7 +663,7 @@
   bool bTakeSpace =
       XFA_ItemLayoutProcessor_IsTakingSpace(pProcessor->m_pFormNode);
   uint8_t uHAlign = HAlignEnumToInt(
-      pThis->m_pCurChildNode->JSNode()->GetEnum(XFA_Attribute::HAlign));
+      pThis->m_pCurChildNode->JSObject()->GetEnum(XFA_Attribute::HAlign));
   if (bContainerWidthAutoSize)
     uHAlign = 0;
 
@@ -848,7 +851,7 @@
   float fSplitPos = pProcessor->FindSplitPos(fAvailHeight - *fContentCurRowY);
   if (fSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
     XFA_AttributeEnum eLayout =
-        pProcessor->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+        pProcessor->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
     if (eLayout == XFA_AttributeEnum::Tb &&
         eRetValue == XFA_ItemLayoutProcessorResult::Done) {
       pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
@@ -943,7 +946,7 @@
   }
 
   XFA_AttributeEnum eLayout =
-      pProcessor->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+      pProcessor->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
   if (pProcessor->m_pFormNode->GetIntact() == XFA_AttributeEnum::None &&
       eLayout == XFA_AttributeEnum::Tb) {
     if (pThis->m_pPageMgr) {
@@ -996,10 +999,10 @@
       CXFA_Node* pMarginNode =
           pFormNode->GetFirstChildByClass(XFA_Element::Margin);
       if (pMarginNode && bCalculateMargin) {
-        fCurTopMargin = pMarginNode->JSNode()
+        fCurTopMargin = pMarginNode->JSObject()
                             ->GetMeasure(XFA_Attribute::TopInset)
                             .ToUnit(XFA_Unit::Pt);
-        fCurBottomMargin = pMarginNode->JSNode()
+        fCurBottomMargin = pMarginNode->JSObject()
                                ->GetMeasure(XFA_Attribute::BottomInset)
                                .ToUnit(XFA_Unit::Pt);
       }
@@ -1062,7 +1065,7 @@
 CFX_PointF CalculatePositionedContainerPos(CXFA_Node* pNode,
                                            const CFX_SizeF& size) {
   XFA_AttributeEnum eAnchorType =
-      pNode->JSNode()->GetEnum(XFA_Attribute::AnchorType);
+      pNode->JSObject()->GetEnum(XFA_Attribute::AnchorType);
   int32_t nAnchorType = 0;
   switch (eAnchorType) {
     case XFA_AttributeEnum::TopLeft:
@@ -1101,10 +1104,11 @@
                                          {2, 5, 8, 1, 4, 7, 0, 3, 6}};
 
   CFX_PointF pos(
-      pNode->JSNode()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt),
-      pNode->JSNode()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt));
+      pNode->JSObject()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt),
+      pNode->JSObject()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt));
   int32_t nRotate =
-      XFA_MapRotation(pNode->JSNode()->GetInteger(XFA_Attribute::Rotate)) / 90;
+      XFA_MapRotation(pNode->JSObject()->GetInteger(XFA_Attribute::Rotate)) /
+      90;
   int32_t nAbsoluteAnchorType = nNextPos[nRotate][nAnchorType];
   switch (nAbsoluteAnchorType / 3) {
     case 1:
@@ -1155,7 +1159,7 @@
   ASSERT(m_pFormNode && (m_pFormNode->IsContainerNode() ||
                          m_pFormNode->GetElementType() == XFA_Element::Form));
   m_pOldLayoutItem = static_cast<CXFA_ContentLayoutItem*>(
-      m_pFormNode->JSNode()->GetLayoutItem());
+      m_pFormNode->JSObject()->GetLayoutItem());
 }
 
 CXFA_ItemLayoutProcessor::~CXFA_ItemLayoutProcessor() {}
@@ -1176,7 +1180,7 @@
                     ->OnCreateLayoutItem(pFormNode);
   CXFA_ContentLayoutItem* pPrevLayoutItem =
       static_cast<CXFA_ContentLayoutItem*>(
-          pFormNode->JSNode()->GetLayoutItem());
+          pFormNode->JSObject()->GetLayoutItem());
   if (pPrevLayoutItem) {
     while (pPrevLayoutItem->m_pNext)
       pPrevLayoutItem = pPrevLayoutItem->m_pNext;
@@ -1184,14 +1188,14 @@
     pPrevLayoutItem->m_pNext = pLayoutItem;
     pLayoutItem->m_pPrev = pPrevLayoutItem;
   } else {
-    pFormNode->JSNode()->SetLayoutItem(pLayoutItem);
+    pFormNode->JSObject()->SetLayoutItem(pLayoutItem);
   }
   return pLayoutItem;
 }
 
 float CXFA_ItemLayoutProcessor::FindSplitPos(float fProposedSplitPos) {
   ASSERT(m_pLayoutItem);
-  XFA_AttributeEnum eLayout = m_pFormNode->JSNode()
+  XFA_AttributeEnum eLayout = m_pFormNode->JSObject()
                                   ->TryEnum(XFA_Attribute::Layout, true)
                                   .value_or(XFA_AttributeEnum::Position);
   bool bCalculateMargin = eLayout != XFA_AttributeEnum::Position;
@@ -1210,7 +1214,7 @@
     CXFA_ContentLayoutItem* pSecondParent,
     float fSplitPos) {
   float fCurTopMargin = 0, fCurBottomMargin = 0;
-  XFA_AttributeEnum eLayout = m_pFormNode->JSNode()
+  XFA_AttributeEnum eLayout = m_pFormNode->JSObject()
                                   ->TryEnum(XFA_Attribute::Layout, true)
                                   .value_or(XFA_AttributeEnum::Position);
   bool bCalculateMargin = true;
@@ -1220,10 +1224,10 @@
   CXFA_Node* pMarginNode =
       pLayoutItem->m_pFormNode->GetFirstChildByClass(XFA_Element::Margin);
   if (pMarginNode && bCalculateMargin) {
-    fCurTopMargin = pMarginNode->JSNode()
+    fCurTopMargin = pMarginNode->JSObject()
                         ->GetMeasure(XFA_Attribute::TopInset)
                         .ToUnit(XFA_Unit::Pt);
-    fCurBottomMargin = pMarginNode->JSNode()
+    fCurBottomMargin = pMarginNode->JSObject()
                            ->GetMeasure(XFA_Attribute::BottomInset)
                            .ToUnit(XFA_Unit::Pt);
   }
@@ -1584,7 +1588,7 @@
 }
 
 bool XFA_ItemLayoutProcessor_IsTakingSpace(CXFA_Node* pNode) {
-  XFA_AttributeEnum ePresence = pNode->JSNode()
+  XFA_AttributeEnum ePresence = pNode->JSObject()
                                     ->TryEnum(XFA_Attribute::Presence, true)
                                     .value_or(XFA_AttributeEnum::Visible);
   return ePresence == XFA_AttributeEnum::Visible ||
@@ -1660,7 +1664,7 @@
     return;
 
   m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
-  bool bIgnoreXY = (m_pFormNode->JSNode()
+  bool bIgnoreXY = (m_pFormNode->JSObject()
                         ->TryEnum(XFA_Attribute::Layout, true)
                         .value_or(XFA_AttributeEnum::Position) !=
                     XFA_AttributeEnum::Position);
@@ -1690,7 +1694,7 @@
         m_pCurChildNode, m_pPageMgr);
     if (pContext && pContext->m_prgSpecifiedColumnWidths) {
       int32_t iColSpan =
-          m_pCurChildNode->JSNode()->GetInteger(XFA_Attribute::ColSpan);
+          m_pCurChildNode->JSObject()->GetInteger(XFA_Attribute::ColSpan);
       if (iColSpan <= pdfium::CollectionSize<int32_t>(
                           *pContext->m_prgSpecifiedColumnWidths) -
                           iColIndex) {
@@ -1785,10 +1789,10 @@
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSNode()
+    fLeftInset = pMarginNode->JSObject()
                      ->GetMeasure(XFA_Attribute::LeftInset)
                      .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSNode()
+    fRightInset = pMarginNode->JSObject()
                       ->GetMeasure(XFA_Attribute::RightInset)
                       .ToUnit(XFA_Unit::Pt);
   }
@@ -1797,7 +1801,7 @@
       bContainerWidthAutoSize ? FLT_MAX
                               : containerSize.width - fLeftInset - fRightInset;
   WideString wsColumnWidths =
-      pLayoutNode->JSNode()->GetCData(XFA_Attribute::ColumnWidths);
+      pLayoutNode->JSObject()->GetCData(XFA_Attribute::ColumnWidths);
   if (!wsColumnWidths.IsEmpty()) {
     auto widths = SeparateStringW(wsColumnWidths.c_str(),
                                   wsColumnWidths.GetLength(), L' ');
@@ -1854,7 +1858,7 @@
         continue;
 
       XFA_AttributeEnum eLayout =
-          pLayoutChild->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+          pLayoutChild->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
       if (eLayout != XFA_AttributeEnum::Row &&
           eLayout != XFA_AttributeEnum::Rl_row) {
         continue;
@@ -1862,7 +1866,7 @@
       if (CXFA_ContentLayoutItem* pRowLayoutCell =
               (CXFA_ContentLayoutItem*)pLayoutChild->m_pFirstChild) {
         rgRowItems.push_back(pRowLayoutCell);
-        int32_t iColSpan = pRowLayoutCell->m_pFormNode->JSNode()->GetInteger(
+        int32_t iColSpan = pRowLayoutCell->m_pFormNode->JSObject()->GetInteger(
             XFA_Attribute::ColSpan);
         rgRowItemsSpan.push_back(iColSpan);
         rgRowItemsWidth.push_back(pRowLayoutCell->m_sSize.width);
@@ -1886,10 +1890,10 @@
             pNewCell = nullptr;
           }
           rgRowItems[i] = pNewCell;
-          rgRowItemsSpan[i] = pNewCell
-                                  ? pNewCell->m_pFormNode->JSNode()->GetInteger(
-                                        XFA_Attribute::ColSpan)
-                                  : 0;
+          rgRowItemsSpan[i] =
+              pNewCell ? pNewCell->m_pFormNode->JSObject()->GetInteger(
+                             XFA_Attribute::ColSpan)
+                       : 0;
           rgRowItemsWidth[i] = pNewCell ? pNewCell->m_sSize.width : 0;
         }
         CXFA_ContentLayoutItem* pCell = rgRowItems[i];
@@ -1941,7 +1945,7 @@
 
     if (pLayoutChild->m_pFormNode->GetElementType() == XFA_Element::Subform) {
       XFA_AttributeEnum eSubformLayout =
-          pLayoutChild->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+          pLayoutChild->m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
       if (eSubformLayout == XFA_AttributeEnum::Row ||
           eSubformLayout == XFA_AttributeEnum::Rl_row) {
         RelocateTableRowCells(pLayoutChild, m_rgSpecifiedColumnWidths,
@@ -1953,8 +1957,8 @@
     if (bContainerWidthAutoSize) {
       pLayoutChild->m_sPos.x = 0;
     } else {
-      switch (
-          pLayoutChild->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::HAlign)) {
+      switch (pLayoutChild->m_pFormNode->JSObject()->GetEnum(
+          XFA_Attribute::HAlign)) {
         case XFA_AttributeEnum::Center:
           pLayoutChild->m_sPos.x =
               (fContentWidthLimit - pLayoutChild->m_sSize.width) / 2;
@@ -1999,7 +2003,7 @@
 
   float fWidth = pTrailerItem->m_sSize.width;
   XFA_AttributeEnum eLayout =
-      m_pFormNode->JSNode()->GetEnum(XFA_Attribute::Layout);
+      m_pFormNode->JSObject()->GetEnum(XFA_Attribute::Layout);
   return eLayout == XFA_AttributeEnum::Tb || m_fWidthLimite <= fWidth;
 }
 
@@ -2187,16 +2191,16 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSNode()
+    fLeftInset = pMarginNode->JSObject()
                      ->GetMeasure(XFA_Attribute::LeftInset)
                      .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSNode()
+    fTopInset = pMarginNode->JSObject()
                     ->GetMeasure(XFA_Attribute::TopInset)
                     .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSNode()
+    fRightInset = pMarginNode->JSObject()
                       ->GetMeasure(XFA_Attribute::RightInset)
                       .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSNode()
+    fBottomInset = pMarginNode->JSObject()
                        ->GetMeasure(XFA_Attribute::BottomInset)
                        .ToUnit(XFA_Unit::Pt);
   }
@@ -2277,8 +2281,9 @@
           m_pCurChildPreprocessor->m_pLayoutItem = pLayoutNext;
           break;
         }
-        uint8_t uHAlign = HAlignEnumToInt(
-            pLayoutNext->m_pFormNode->JSNode()->GetEnum(XFA_Attribute::HAlign));
+        uint8_t uHAlign =
+            HAlignEnumToInt(pLayoutNext->m_pFormNode->JSObject()->GetEnum(
+                XFA_Attribute::HAlign));
         rgCurLineLayoutItems[uHAlign].push_back(pLayoutNext);
         if (eFlowStrategy == XFA_AttributeEnum::Lr_tb) {
           if (uHAlign > uCurHAlignState)
@@ -2761,8 +2766,8 @@
   CFX_SizeF size(-1, -1);
   pNotify->StartFieldDrawLayout(m_pFormNode, size.width, size.height);
 
-  int32_t nRotate =
-      XFA_MapRotation(m_pFormNode->JSNode()->GetInteger(XFA_Attribute::Rotate));
+  int32_t nRotate = XFA_MapRotation(
+      m_pFormNode->JSObject()->GetInteger(XFA_Attribute::Rotate));
   if (nRotate == 90 || nRotate == 270)
     std::swap(size.width, size.height);
 
diff --git a/xfa/fxfa/parser/cxfa_layoutitem.cpp b/xfa/fxfa/parser/cxfa_layoutitem.cpp
index 322884b..02602fd 100644
--- a/xfa/fxfa/parser/cxfa_layoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutitem.cpp
@@ -76,10 +76,10 @@
       CXFA_Node* pMarginNode =
           pLayoutItem->m_pFormNode->GetFirstChildByClass(XFA_Element::Margin);
       if (pMarginNode) {
-        sPos += CFX_PointF(pMarginNode->JSNode()
+        sPos += CFX_PointF(pMarginNode->JSObject()
                                ->GetMeasure(XFA_Attribute::LeftInset)
                                .ToUnit(XFA_Unit::Pt),
-                           pMarginNode->JSNode()
+                           pMarginNode->JSObject()
                                ->GetMeasure(XFA_Attribute::TopInset)
                                .ToUnit(XFA_Unit::Pt));
       }
@@ -88,10 +88,10 @@
 
     if (pLayoutItem->m_pFormNode->GetElementType() ==
         XFA_Element::ContentArea) {
-      sPos += CFX_PointF(pLayoutItem->m_pFormNode->JSNode()
+      sPos += CFX_PointF(pLayoutItem->m_pFormNode->JSObject()
                              ->GetMeasure(XFA_Attribute::X)
                              .ToUnit(XFA_Unit::Pt),
-                         pLayoutItem->m_pFormNode->JSNode()
+                         pLayoutItem->m_pFormNode->JSObject()
                              ->GetMeasure(XFA_Attribute::Y)
                              .ToUnit(XFA_Unit::Pt));
       break;
diff --git a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
index 9ee0531..f9040d6 100644
--- a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
@@ -66,7 +66,7 @@
 uint32_t GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) {
   uint32_t dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
   WideString wsRelevant =
-      pFormItem->JSNode()->GetCData(XFA_Attribute::Relevant);
+      pFormItem->JSObject()->GetCData(XFA_Attribute::Relevant);
   if (!wsRelevant.IsEmpty()) {
     if (wsRelevant == L"+print" || wsRelevant == L"print")
       dwRelevant &= ~XFA_WidgetStatus_Viewable;
@@ -97,7 +97,7 @@
   uint32_t dwRelevantContainer = 0;
   if (bVisible) {
     XFA_AttributeEnum eAttributeValue =
-        pContainerItem->m_pFormNode->JSNode()
+        pContainerItem->m_pFormNode->JSObject()
             ->TryEnum(XFA_Attribute::Presence, true)
             .value_or(XFA_AttributeEnum::Visible);
     if (eAttributeValue == XFA_AttributeEnum::Visible)
@@ -274,7 +274,7 @@
     return false;
 
   m_pTemplatePageSetRoot =
-      pTemplateNode->JSNode()->GetProperty(0, XFA_Element::PageSet, true);
+      pTemplateNode->JSObject()->GetProperty(0, XFA_Element::PageSet, true);
   ASSERT(m_pTemplatePageSetRoot);
   if (m_pPageSetLayoutItemRoot) {
     m_pPageSetLayoutItemRoot->m_pParent = nullptr;
@@ -286,10 +286,10 @@
         new CXFA_ContainerLayoutItem(m_pTemplatePageSetRoot);
   }
   m_pPageSetCurRoot = m_pPageSetLayoutItemRoot;
-  m_pTemplatePageSetRoot->JSNode()->SetLayoutItem(m_pPageSetLayoutItemRoot);
+  m_pTemplatePageSetRoot->JSObject()->SetLayoutItem(m_pPageSetLayoutItemRoot);
 
   XFA_AttributeEnum eRelation =
-      m_pTemplatePageSetRoot->JSNode()->GetEnum(XFA_Attribute::Relation);
+      m_pTemplatePageSetRoot->JSObject()->GetEnum(XFA_Attribute::Relation);
   if (eRelation != XFA_AttributeEnum::Unknown)
     m_ePageSetMode = eRelation;
 
@@ -329,13 +329,13 @@
 
     pPageArea->InsertChild(pContentArea, nullptr);
     pContentArea->SetFlag(XFA_NodeFlag_Initialized, true);
-    pContentArea->JSNode()->SetMeasure(
+    pContentArea->JSObject()->SetMeasure(
         XFA_Attribute::X, CXFA_Measurement(0.25f, XFA_Unit::In), false);
-    pContentArea->JSNode()->SetMeasure(
+    pContentArea->JSObject()->SetMeasure(
         XFA_Attribute::Y, CXFA_Measurement(0.25f, XFA_Unit::In), false);
-    pContentArea->JSNode()->SetMeasure(
+    pContentArea->JSObject()->SetMeasure(
         XFA_Attribute::W, CXFA_Measurement(8.0f, XFA_Unit::In), false);
-    pContentArea->JSNode()->SetMeasure(
+    pContentArea->JSObject()->SetMeasure(
         XFA_Attribute::H, CXFA_Measurement(10.5f, XFA_Unit::In), false);
   }
   CXFA_Node* pMedium = pPageArea->GetChild(0, XFA_Element::Medium, false);
@@ -347,10 +347,10 @@
 
     pPageArea->InsertChild(pMedium, nullptr);
     pMedium->SetFlag(XFA_NodeFlag_Initialized, true);
-    pMedium->JSNode()->SetMeasure(XFA_Attribute::Short,
-                                  CXFA_Measurement(8.5f, XFA_Unit::In), false);
-    pMedium->JSNode()->SetMeasure(XFA_Attribute::Long,
-                                  CXFA_Measurement(11.0f, XFA_Unit::In), false);
+    pMedium->JSObject()->SetMeasure(
+        XFA_Attribute::Short, CXFA_Measurement(8.5f, XFA_Unit::In), false);
+    pMedium->JSObject()->SetMeasure(
+        XFA_Attribute::Long, CXFA_Measurement(11.0f, XFA_Unit::In), false);
   }
   return true;
 }
@@ -366,7 +366,7 @@
       XFA_Element eType = pBreakNode->GetElementType();
       if (eType == XFA_Element::BreakBefore ||
           (eType == XFA_Element::Break &&
-           pBreakNode->JSNode()->GetEnum(XFA_Attribute::Before) !=
+           pBreakNode->JSObject()->GetEnum(XFA_Attribute::Before) !=
                XFA_AttributeEnum::Auto)) {
         bProBreakBefore = true;
         pBreakBeforeNode = pBreakNode;
@@ -471,7 +471,7 @@
   if (!pLayoutItem || !pLayoutItem->m_pFormNode)
     return 0.0f;
 
-  float fAvailHeight = pLayoutItem->m_pFormNode->JSNode()
+  float fAvailHeight = pLayoutItem->m_pFormNode->JSObject()
                            ->GetMeasure(XFA_Attribute::H)
                            .ToUnit(XFA_Unit::Pt);
   if (fAvailHeight >= XFA_LAYOUT_FLOAT_PERCISION)
@@ -482,7 +482,7 @@
 }
 
 bool XFA_LayoutPageMgr_RunBreakTestScript(CXFA_Node* pTestScript) {
-  WideString wsExpression = pTestScript->JSNode()->GetContent(false);
+  WideString wsExpression = pTestScript->JSObject()->GetContent(false);
   if (wsExpression.IsEmpty())
     return true;
   return pTestScript->GetDocument()->GetNotify()->RunScript(
@@ -507,7 +507,7 @@
       } else {
         CXFA_ContainerLayoutItem* pParentLayoutItem =
             static_cast<CXFA_ContainerLayoutItem*>(
-                pPageSet->JSNode()->GetLayoutItem());
+                pPageSet->JSObject()->GetLayoutItem());
         if (!pParentLayoutItem)
           pParentLayoutItem = m_pPageSetCurRoot;
 
@@ -521,12 +521,12 @@
       } else {
         pParentPageSetLayout = static_cast<CXFA_ContainerLayoutItem*>(
             pPageSet->GetNodeItem(XFA_NODEITEM_Parent)
-                ->JSNode()
+                ->JSObject()
                 ->GetLayoutItem());
       }
       CXFA_ContainerLayoutItem* pPageSetLayoutItem =
           new CXFA_ContainerLayoutItem(pPageSet);
-      pPageSet->JSNode()->SetLayoutItem(pPageSetLayoutItem);
+      pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
       if (!pParentPageSetLayout) {
         CXFA_ContainerLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
         while (pPrePageSet->m_pNextSibling) {
@@ -549,7 +549,7 @@
       } else {
         CXFA_ContainerLayoutItem* pPageSetLayoutItem =
             new CXFA_ContainerLayoutItem(pPageSet);
-        pPageSet->JSNode()->SetLayoutItem(pPageSetLayoutItem);
+        pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
         m_pPageSetLayoutItemRoot->AddChild(pPageSetLayoutItem);
         pNewRecord->pCurPageSet = pPageSetLayoutItem;
       }
@@ -608,7 +608,7 @@
     for (CXFA_ContainerLayoutItem* pPageSetLayoutItem = sIterator.GetCurrent();
          pPageSetLayoutItem; pPageSetLayoutItem = sIterator.MoveToNext()) {
       XFA_AttributeEnum ePageRelation =
-          pPageSetLayoutItem->m_pFormNode->JSNode()->GetEnum(
+          pPageSetLayoutItem->m_pFormNode->JSObject()->GetEnum(
               XFA_Attribute::Relation);
       switch (ePageRelation) {
         case XFA_AttributeEnum::OrderedOccurrence:
@@ -644,12 +644,12 @@
           }
           CXFA_Node* pNode = m_pCurPageArea;
           XFA_AttributeEnum eCurChoice =
-              pNode->JSNode()->GetEnum(XFA_Attribute::PagePosition);
+              pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition);
           if (eCurChoice == XFA_AttributeEnum::Last) {
             XFA_AttributeEnum eOddOrEven =
-                pNode->JSNode()->GetEnum(XFA_Attribute::OddOrEven);
+                pNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven);
             XFA_AttributeEnum eLastChoice =
-                pLastPageAreaLayoutItem->m_pFormNode->JSNode()->GetEnum(
+                pLastPageAreaLayoutItem->m_pFormNode->JSObject()->GetEnum(
                     XFA_Attribute::PagePosition);
             if (eLastChoice == XFA_AttributeEnum::First &&
                 (ePageRelation == XFA_AttributeEnum::SimplexPaginated ||
@@ -694,7 +694,7 @@
             }
             iCurContentAreaIndex++;
             if (rgUsedHeights[iCurContentAreaIndex] >
-                pContentAreaNode->JSNode()
+                pContentAreaNode->JSObject()
                         ->GetMeasure(XFA_Attribute::H)
                         .ToUnit(XFA_Unit::Pt) +
                     XFA_LAYOUT_FLOAT_PERCISION) {
@@ -725,7 +725,7 @@
               pContentAreaNode =
                   pContentAreaNode->GetNodeItem(XFA_NODEITEM_NextSibling);
             }
-          } else if (pNode->JSNode()->GetEnum(XFA_Attribute::PagePosition) ==
+          } else if (pNode->JSObject()->GetEnum(XFA_Attribute::PagePosition) ==
                      XFA_AttributeEnum::Last) {
             CXFA_ContainerRecord* pRecord = CreateContainerRecord();
             AddPageAreaLayoutItem(pRecord, pNode);
@@ -815,22 +815,23 @@
           XFA_NODEITEM_Parent, XFA_ObjectType::ContainerNode);
       CXFA_Node* pContainer = pFormNode->GetTemplateNode();
       bool bStartNew =
-          pCurNode->JSNode()->GetInteger(XFA_Attribute::StartNew) != 0;
+          pCurNode->JSObject()->GetInteger(XFA_Attribute::StartNew) != 0;
       CXFA_Node* pScript = pCurNode->GetFirstChildByClass(XFA_Element::Script);
       if (pScript && !XFA_LayoutPageMgr_RunBreakTestScript(pScript))
         return false;
 
-      WideString wsTarget = pCurNode->JSNode()->GetCData(XFA_Attribute::Target);
+      WideString wsTarget =
+          pCurNode->JSObject()->GetCData(XFA_Attribute::Target);
       CXFA_Node* pTarget =
           ResolveBreakTarget(m_pTemplatePageSetRoot, true, wsTarget);
-      wsBreakTrailer = pCurNode->JSNode()->GetCData(XFA_Attribute::Trailer);
-      wsBreakLeader = pCurNode->JSNode()->GetCData(XFA_Attribute::Leader);
+      wsBreakTrailer = pCurNode->JSObject()->GetCData(XFA_Attribute::Trailer);
+      wsBreakLeader = pCurNode->JSObject()->GetCData(XFA_Attribute::Leader);
       pBreakLeaderTemplate =
           ResolveBreakTarget(pContainer, true, wsBreakLeader);
       pBreakTrailerTemplate =
           ResolveBreakTarget(pContainer, true, wsBreakTrailer);
       if (RunBreak(eType,
-                   pCurNode->JSNode()->GetEnum(XFA_Attribute::TargetType),
+                   pCurNode->JSObject()->GetEnum(XFA_Attribute::TargetType),
                    pTarget, bStartNew)) {
         return true;
       }
@@ -856,14 +857,14 @@
     }
     case XFA_Element::Break: {
       bool bStartNew =
-          pCurNode->JSNode()->GetInteger(XFA_Attribute::StartNew) != 0;
-      WideString wsTarget = pCurNode->JSNode()->GetCData(
+          pCurNode->JSObject()->GetInteger(XFA_Attribute::StartNew) != 0;
+      WideString wsTarget = pCurNode->JSObject()->GetCData(
           bBefore ? XFA_Attribute::BeforeTarget : XFA_Attribute::AfterTarget);
       CXFA_Node* pTarget =
           ResolveBreakTarget(m_pTemplatePageSetRoot, true, wsTarget);
       if (RunBreak(bBefore ? XFA_Element::BreakBefore : XFA_Element::BreakAfter,
-                   pCurNode->JSNode()->GetEnum(bBefore ? XFA_Attribute::Before
-                                                       : XFA_Attribute::After),
+                   pCurNode->JSObject()->GetEnum(
+                       bBefore ? XFA_Attribute::Before : XFA_Attribute::After),
                    pTarget, bStartNew)) {
         return true;
       }
@@ -949,11 +950,11 @@
           ->GetTemplateNode();
   if (pOverflowNode->GetElementType() == XFA_Element::Break) {
     WideString wsOverflowLeader =
-        pOverflowNode->JSNode()->GetCData(XFA_Attribute::OverflowLeader);
+        pOverflowNode->JSObject()->GetCData(XFA_Attribute::OverflowLeader);
     WideString wsOverflowTarget =
-        pOverflowNode->JSNode()->GetCData(XFA_Attribute::OverflowTarget);
+        pOverflowNode->JSObject()->GetCData(XFA_Attribute::OverflowTarget);
     WideString wsOverflowTrailer =
-        pOverflowNode->JSNode()->GetCData(XFA_Attribute::OverflowTrailer);
+        pOverflowNode->JSObject()->GetCData(XFA_Attribute::OverflowTrailer);
     if (wsOverflowTarget.IsEmpty() && wsOverflowLeader.IsEmpty() &&
         wsOverflowTrailer.IsEmpty()) {
       return nullptr;
@@ -990,7 +991,7 @@
     return nullptr;
 
   WideString wsOverflowTarget =
-      pOverflowNode->JSNode()->GetCData(XFA_Attribute::Target);
+      pOverflowNode->JSObject()->GetCData(XFA_Attribute::Target);
   if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) {
     CXFA_Node* pTarget =
         ResolveBreakTarget(m_pTemplatePageSetRoot, true, wsOverflowTarget);
@@ -1012,9 +1013,9 @@
   }
   if (!bCreatePage) {
     WideString wsLeader =
-        pOverflowNode->JSNode()->GetCData(XFA_Attribute::Leader);
+        pOverflowNode->JSObject()->GetCData(XFA_Attribute::Leader);
     WideString wsTrailer =
-        pOverflowNode->JSNode()->GetCData(XFA_Attribute::Trailer);
+        pOverflowNode->JSObject()->GetCData(XFA_Attribute::Trailer);
     pLeaderTemplate = ResolveBreakTarget(pContainer, true, wsLeader);
     pTrailerTemplate = ResolveBreakTarget(pContainer, true, wsTrailer);
   }
@@ -1083,7 +1084,7 @@
           ->GetNodeItem(XFA_NODEITEM_Parent, XFA_ObjectType::ContainerNode)
           ->GetTemplateNode();
   if (pBookendNode->GetElementType() == XFA_Element::Break) {
-    WideString leader = pBookendNode->JSNode()->GetCData(
+    WideString leader = pBookendNode->JSObject()->GetCData(
         bLeader ? XFA_Attribute::BookendLeader : XFA_Attribute::BookendTrailer);
     if (!leader.IsEmpty()) {
       pBookendAppendTemplate = ResolveBreakTarget(pContainer, false, leader);
@@ -1093,7 +1094,7 @@
   }
 
   if (pBookendNode->GetElementType() == XFA_Element::Bookend) {
-    WideString leader = pBookendNode->JSNode()->GetCData(
+    WideString leader = pBookendNode->JSObject()->GetCData(
         bLeader ? XFA_Attribute::Leader : XFA_Attribute::Trailer);
     pBookendAppendTemplate = ResolveBreakTarget(pContainer, true, leader);
     return true;
@@ -1140,7 +1141,7 @@
     CXFA_Node* pOccurNode = pPageSet->GetFirstChildByClass(XFA_Element::Occur);
     if (pOccurNode) {
       pdfium::Optional<int32_t> ret =
-          pOccurNode->JSNode()->TryInteger(XFA_Attribute::Max, false);
+          pOccurNode->JSObject()->TryInteger(XFA_Attribute::Max, false);
       if (ret)
         iMax = *ret;
     }
@@ -1220,12 +1221,12 @@
         continue;
 
       XFA_AttributeEnum eCurPagePosition =
-          pCurrentNode->JSNode()->GetEnum(XFA_Attribute::PagePosition);
+          pCurrentNode->JSObject()->GetEnum(XFA_Attribute::PagePosition);
       if (ePreferredPosition == XFA_AttributeEnum::Last) {
         if (eCurPagePosition != ePreferredPosition)
           continue;
         if (m_ePageSetMode == XFA_AttributeEnum::SimplexPaginated ||
-            pCurrentNode->JSNode()->GetEnum(XFA_Attribute::OddOrEven) ==
+            pCurrentNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven) ==
                 XFA_AttributeEnum::Any) {
           pPreferredPageArea = pCurrentNode;
           break;
@@ -1241,7 +1242,7 @@
         if (eCurPagePosition != ePreferredPosition)
           continue;
         if (m_ePageSetMode != XFA_AttributeEnum::DuplexPaginated ||
-            pCurrentNode->JSNode()->GetEnum(XFA_Attribute::OddOrEven) ==
+            pCurrentNode->JSObject()->GetEnum(XFA_Attribute::OddOrEven) ==
                 XFA_AttributeEnum::Any) {
           pPreferredPageArea = pCurrentNode;
           break;
@@ -1308,7 +1309,7 @@
     return true;
 
   pdfium::Optional<XFA_AttributeEnum> ret =
-      pPageArea->JSNode()->TryEnum(XFA_Attribute::OddOrEven, true);
+      pPageArea->JSObject()->TryEnum(XFA_Attribute::OddOrEven, true);
   if (!ret || *ret == XFA_AttributeEnum::Any)
     return true;
 
@@ -1338,7 +1339,7 @@
           m_pCurPageArea->GetFirstChildByClass(XFA_Element::Occur);
       if (pOccurNode) {
         pdfium::Optional<int32_t> ret =
-            pOccurNode->JSNode()->TryInteger(XFA_Attribute::Max, false);
+            pOccurNode->JSObject()->TryInteger(XFA_Attribute::Max, false);
         if (ret)
           iMax = *ret;
       }
@@ -1428,7 +1429,7 @@
        pPageSetNode = sIterator.MoveToNext()) {
     if (pPageSetNode->GetElementType() == XFA_Element::PageSet) {
       XFA_AttributeEnum eRelation =
-          pPageSetNode->JSNode()->GetEnum(XFA_Attribute::Relation);
+          pPageSetNode->JSObject()->GetEnum(XFA_Attribute::Relation);
       if (eRelation == XFA_AttributeEnum::OrderedOccurrence)
         m_pPageSetMap[pPageSetNode] = 0;
     }
@@ -1445,7 +1446,7 @@
   pdfium::Optional<int32_t> ret;
   CXFA_Node* pOccurNode = pPageArea->GetFirstChildByClass(XFA_Element::Occur);
   if (pOccurNode) {
-    ret = pOccurNode->JSNode()->TryInteger(XFA_Attribute::Min, false);
+    ret = pOccurNode->JSObject()->TryInteger(XFA_Attribute::Min, false);
     if (ret)
       iMin = *ret;
   }
@@ -1488,7 +1489,7 @@
     return;
 
   pdfium::Optional<int32_t> iMin =
-      pOccurNode->JSNode()->TryInteger(XFA_Attribute::Min, false);
+      pOccurNode->JSObject()->TryInteger(XFA_Attribute::Min, false);
   if (!iMin || iCurSetCount >= *iMin)
     return;
 
@@ -1542,7 +1543,7 @@
   pCurContentNode =
       pCurContentNode->GetNextSameClassSibling(XFA_Element::ContentArea);
   if (pCurContentNode) {
-    float fNextContentHeight = pCurContentNode->JSNode()
+    float fNextContentHeight = pCurContentNode->JSObject()
                                    ->GetMeasure(XFA_Attribute::H)
                                    .ToUnit(XFA_Unit::Pt);
     return fNextContentHeight > fChildHeight;
@@ -1553,7 +1554,7 @@
   int32_t iMax = 0;
   pdfium::Optional<int32_t> ret;
   if (pOccurNode) {
-    ret = pOccurNode->JSNode()->TryInteger(XFA_Attribute::Max, false);
+    ret = pOccurNode->JSObject()->TryInteger(XFA_Attribute::Max, false);
     if (ret)
       iMax = *ret;
   }
@@ -1578,7 +1579,7 @@
         CXFA_Node* pContentArea =
             pNextPage->GetFirstChildByClass(XFA_Element::ContentArea);
         if (pContentArea) {
-          float fNextContentHeight = pContentArea->JSNode()
+          float fNextContentHeight = pContentArea->JSObject()
                                          ->GetMeasure(XFA_Attribute::H)
                                          .ToUnit(XFA_Unit::Pt);
           if (fNextContentHeight > fChildHeight)
@@ -1591,8 +1592,9 @@
 
   CXFA_Node* pContentArea =
       pPageNode->GetFirstChildByClass(XFA_Element::ContentArea);
-  float fNextContentHeight =
-      pContentArea->JSNode()->GetMeasure(XFA_Attribute::H).ToUnit(XFA_Unit::Pt);
+  float fNextContentHeight = pContentArea->JSObject()
+                                 ->GetMeasure(XFA_Attribute::H)
+                                 .ToUnit(XFA_Unit::Pt);
   if (fNextContentHeight < XFA_LAYOUT_FLOAT_PERCISION)
     return true;
   if (fNextContentHeight > fChildHeight)
@@ -1667,11 +1669,11 @@
        pCurNode; pCurNode = pCurNode->GetNodeItem((XFA_NODEITEM_NextSibling))) {
     if (pCurNode->GetElementType() == XFA_Element::Break) {
       WideString wsOverflowLeader =
-          pCurNode->JSNode()->GetCData(XFA_Attribute::OverflowLeader);
+          pCurNode->JSObject()->GetCData(XFA_Attribute::OverflowLeader);
       WideString wsOverflowTarget =
-          pCurNode->JSNode()->GetCData(XFA_Attribute::OverflowTarget);
+          pCurNode->JSObject()->GetCData(XFA_Attribute::OverflowTarget);
       WideString wsOverflowTrailer =
-          pCurNode->JSNode()->GetCData(XFA_Attribute::OverflowTrailer);
+          pCurNode->JSObject()->GetCData(XFA_Attribute::OverflowTrailer);
 
       if (!wsOverflowLeader.IsEmpty() || !wsOverflowTrailer.IsEmpty() ||
           !wsOverflowTarget.IsEmpty()) {
@@ -1731,9 +1733,10 @@
         pPendingPageSet = pRootPageSetContainerItem->m_pFormNode;
       }
     }
-    if (pRootPageSetContainerItem->m_pFormNode->JSNode()->GetLayoutItem() ==
+    if (pRootPageSetContainerItem->m_pFormNode->JSObject()->GetLayoutItem() ==
         pRootPageSetContainerItem) {
-      pRootPageSetContainerItem->m_pFormNode->JSNode()->SetLayoutItem(nullptr);
+      pRootPageSetContainerItem->m_pFormNode->JSObject()->SetLayoutItem(
+          nullptr);
     }
     pRootPageSetContainerItem->m_pFormNode = pPendingPageSet;
     pPendingPageSet->ClearFlag(XFA_NodeFlag_UnusedNode);
@@ -1781,7 +1784,7 @@
                    pIter = sIterator.MoveToNext()) {
                 if (pIter->GetElementType() != XFA_Element::ContentArea) {
                   CXFA_LayoutItem* pLayoutItem =
-                      pIter->JSNode()->GetLayoutItem();
+                      pIter->JSObject()->GetLayoutItem();
                   if (pLayoutItem) {
                     pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem);
                     delete pLayoutItem;
@@ -1845,14 +1848,14 @@
             CXFA_Node* pChildNode = iteChild.MoveToNext();
             for (; pChildNode; pChildNode = iteChild.MoveToNext()) {
               CXFA_LayoutItem* pLayoutItem =
-                  pChildNode->JSNode()->GetLayoutItem();
+                  pChildNode->JSObject()->GetLayoutItem();
               if (pLayoutItem) {
                 pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem);
                 delete pLayoutItem;
               }
             }
           } else if (eType != XFA_Element::ContentArea) {
-            CXFA_LayoutItem* pLayoutItem = pNode->JSNode()->GetLayoutItem();
+            CXFA_LayoutItem* pLayoutItem = pNode->JSObject()->GetLayoutItem();
             if (pLayoutItem) {
               pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem);
               delete pLayoutItem;
@@ -1932,7 +1935,7 @@
             }
 
             XFA_AttributeEnum presence =
-                pContentItem->m_pFormNode->JSNode()
+                pContentItem->m_pFormNode->JSObject()
                     ->TryEnum(XFA_Attribute::Presence, true)
                     .value_or(XFA_AttributeEnum::Visible);
             bool bVisible = presence == XFA_AttributeEnum::Visible;
diff --git a/xfa/fxfa/parser/cxfa_layoutprocessor.cpp b/xfa/fxfa/parser/cxfa_layoutprocessor.cpp
index b8afd6e..37906ce 100644
--- a/xfa/fxfa/parser/cxfa_layoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutprocessor.cpp
@@ -64,9 +64,9 @@
   XFA_ItemLayoutProcessorResult eStatus;
   CXFA_Node* pFormNode = m_pRootItemLayoutProcessor->GetFormNode();
   float fPosX =
-      pFormNode->JSNode()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt);
+      pFormNode->JSObject()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt);
   float fPosY =
-      pFormNode->JSNode()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt);
+      pFormNode->JSObject()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt);
   do {
     float fAvailHeight = m_pLayoutPageMgr->GetAvailHeight();
     eStatus = m_pRootItemLayoutProcessor->DoLayout(true, fAvailHeight,
@@ -122,7 +122,7 @@
 }
 
 CXFA_LayoutItem* CXFA_LayoutProcessor::GetLayoutItem(CXFA_Node* pFormItem) {
-  return pFormItem->JSNode()->GetLayoutItem();
+  return pFormItem->JSObject()->GetLayoutItem();
 }
 
 void CXFA_LayoutProcessor::AddChangedContainer(CXFA_Node* pContainer) {
diff --git a/xfa/fxfa/parser/cxfa_linedata.cpp b/xfa/fxfa/parser/cxfa_linedata.cpp
index c4995d7..47e45c7 100644
--- a/xfa/fxfa/parser/cxfa_linedata.cpp
+++ b/xfa/fxfa/parser/cxfa_linedata.cpp
@@ -9,11 +9,11 @@
 #include "xfa/fxfa/parser/cxfa_node.h"
 
 XFA_AttributeEnum CXFA_LineData::GetHand() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Hand);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Hand);
 }
 
 bool CXFA_LineData::GetSlope() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Slope) ==
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Slope) ==
          XFA_AttributeEnum::Slash;
 }
 
diff --git a/xfa/fxfa/parser/cxfa_localemgr.cpp b/xfa/fxfa/parser/cxfa_localemgr.cpp
index a4c041e..e7aa09b 100644
--- a/xfa/fxfa/parser/cxfa_localemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_localemgr.cpp
@@ -1237,7 +1237,7 @@
           pCommon ? pCommon->GetFirstChildByClass(XFA_Element::Locale)
                   : nullptr;
       if (pLocale) {
-        m_wsConfigLocale = pLocale->JSNode()
+        m_wsConfigLocale = pLocale->JSObject()
                                ->TryCData(XFA_Attribute::Value, false)
                                .value_or(WideString());
       }
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index b404b34..bede0a7 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -216,22 +216,22 @@
   if (!pClone)
     return nullptr;
 
-  JSNode()->MergeAllData(pClone);
+  JSObject()->MergeAllData(pClone);
   pClone->UpdateNameHash();
   if (IsNeedSavingXMLNode()) {
     std::unique_ptr<CFX_XMLNode> pCloneXML;
     if (IsAttributeInXML()) {
-      WideString wsName = JSNode()
+      WideString wsName = JSObject()
                               ->TryAttribute(XFA_Attribute::Name, false)
                               .value_or(WideString());
       auto pCloneXMLElement = pdfium::MakeUnique<CFX_XMLElement>(wsName);
-      WideString wsValue = JSNode()->GetCData(XFA_Attribute::Value);
+      WideString wsValue = JSObject()->GetCData(XFA_Attribute::Value);
       if (!wsValue.IsEmpty())
         pCloneXMLElement->SetTextData(WideString(wsValue));
 
       pCloneXML.reset(pCloneXMLElement.release());
-      pClone->JSNode()->SetEnum(XFA_Attribute::Contains,
-                                XFA_AttributeEnum::Unknown, false);
+      pClone->JSObject()->SetEnum(XFA_Attribute::Contains,
+                                  XFA_AttributeEnum::Unknown, false);
     } else {
       pCloneXML = m_pXMLNode->Clone();
     }
@@ -556,7 +556,7 @@
 }
 
 CXFA_WidgetData* CXFA_Node::GetWidgetData() {
-  return JSNode()->GetWidgetData();
+  return JSObject()->GetWidgetData();
 }
 
 CXFA_WidgetData* CXFA_Node::GetContainerWidgetData() {
@@ -627,7 +627,7 @@
   CXFA_Node* pLocaleNode = this;
   do {
     pdfium::Optional<WideString> ret =
-        pLocaleNode->JSNode()->TryCData(XFA_Attribute::Locale, false);
+        pLocaleNode->JSObject()->TryCData(XFA_Attribute::Locale, false);
     if (ret) {
       wsLocaleName = *ret;
       return true;
@@ -642,7 +642,7 @@
 
   if (pTopSubform) {
     pdfium::Optional<WideString> ret =
-        pTopSubform->JSNode()->TryCData(XFA_Attribute::Locale, false);
+        pTopSubform->JSObject()->TryCData(XFA_Attribute::Locale, false);
     if (ret) {
       wsLocaleName = *ret;
       return true;
@@ -659,12 +659,12 @@
 
 XFA_AttributeEnum CXFA_Node::GetIntact() {
   CXFA_Node* pKeep = GetFirstChildByClass(XFA_Element::Keep);
-  XFA_AttributeEnum eLayoutType = JSNode()
+  XFA_AttributeEnum eLayoutType = JSObject()
                                       ->TryEnum(XFA_Attribute::Layout, true)
                                       .value_or(XFA_AttributeEnum::Position);
   if (pKeep) {
     pdfium::Optional<XFA_AttributeEnum> intact =
-        pKeep->JSNode()->TryEnum(XFA_Attribute::Intact, false);
+        pKeep->JSObject()->TryEnum(XFA_Attribute::Intact, false);
     if (intact) {
       if (*intact == XFA_AttributeEnum::None &&
           eLayoutType == XFA_AttributeEnum::Row &&
@@ -672,10 +672,10 @@
         CXFA_Node* pPreviewRow = GetNodeItem(XFA_NODEITEM_PrevSibling,
                                              XFA_ObjectType::ContainerNode);
         if (pPreviewRow &&
-            pPreviewRow->JSNode()->GetEnum(XFA_Attribute::Layout) ==
+            pPreviewRow->JSObject()->GetEnum(XFA_Attribute::Layout) ==
                 XFA_AttributeEnum::Row) {
           pdfium::Optional<XFA_AttributeEnum> value =
-              pKeep->JSNode()->TryEnum(XFA_Attribute::Previous, false);
+              pKeep->JSObject()->TryEnum(XFA_Attribute::Previous, false);
           if (value && (*value == XFA_AttributeEnum::ContentArea ||
                         *value == XFA_AttributeEnum::PageArea)) {
             return XFA_AttributeEnum::ContentArea;
@@ -685,7 +685,7 @@
               pPreviewRow->GetFirstChildByClass(XFA_Element::Keep);
           pdfium::Optional<XFA_AttributeEnum> ret;
           if (pNode)
-            ret = pNode->JSNode()->TryEnum(XFA_Attribute::Next, false);
+            ret = pNode->JSObject()->TryEnum(XFA_Attribute::Next, false);
           if (ret && (*ret == XFA_AttributeEnum::ContentArea ||
                       *ret == XFA_AttributeEnum::PageArea)) {
             return XFA_AttributeEnum::ContentArea;
@@ -712,7 +712,7 @@
       if (parent->GetIntact() != XFA_AttributeEnum::None)
         return XFA_AttributeEnum::ContentArea;
 
-      XFA_AttributeEnum eParLayout = parent->JSNode()
+      XFA_AttributeEnum eParLayout = parent->JSObject()
                                          ->TryEnum(XFA_Attribute::Layout, true)
                                          .value_or(XFA_AttributeEnum::Position);
       if (eParLayout == XFA_AttributeEnum::Position ||
@@ -724,7 +724,7 @@
       XFA_VERSION version = m_pDocument->GetCurVersionMode();
       if (eParLayout == XFA_AttributeEnum::Tb && version < XFA_VERSION_208) {
         pdfium::Optional<CXFA_Measurement> measureH =
-            JSNode()->TryMeasure(XFA_Attribute::H, false);
+            JSObject()->TryMeasure(XFA_Attribute::H, false);
         if (measureH)
           return XFA_AttributeEnum::ContentArea;
       }
@@ -946,21 +946,21 @@
         CFX_XMLElement* pXMLElement =
             static_cast<CFX_XMLElement*>(pNode->m_pXMLNode);
         WideString wsAttributeName =
-            pNode->JSNode()->GetCData(XFA_Attribute::QualifiedName);
+            pNode->JSObject()->GetCData(XFA_Attribute::QualifiedName);
         pXMLElement->RemoveAttribute(wsAttributeName.c_str());
       }
 
-      WideString wsName = pNode->JSNode()
+      WideString wsName = pNode->JSObject()
                               ->TryAttribute(XFA_Attribute::Name, false)
                               .value_or(WideString());
       CFX_XMLElement* pNewXMLElement = new CFX_XMLElement(wsName);
-      WideString wsValue = JSNode()->GetCData(XFA_Attribute::Value);
+      WideString wsValue = JSObject()->GetCData(XFA_Attribute::Value);
       if (!wsValue.IsEmpty())
         pNewXMLElement->SetTextData(WideString(wsValue));
 
       pNode->m_pXMLNode = pNewXMLElement;
-      pNode->JSNode()->SetEnum(XFA_Attribute::Contains,
-                               XFA_AttributeEnum::Unknown, false);
+      pNode->JSObject()->SetEnum(XFA_Attribute::Contains,
+                                 XFA_AttributeEnum::Unknown, false);
     } else {
       m_pXMLNode->RemoveChildNode(pNode->m_pXMLNode);
     }
@@ -1049,8 +1049,9 @@
         break;
       }
       if (eType == XFA_Element::InstanceManager) {
-        WideString wsName = JSNode()->GetCData(XFA_Attribute::Name);
-        WideString wsInstName = pNode->JSNode()->GetCData(XFA_Attribute::Name);
+        WideString wsName = JSObject()->GetCData(XFA_Attribute::Name);
+        WideString wsInstName =
+            pNode->JSObject()->GetCData(XFA_Attribute::Name);
         if (wsInstName.GetLength() > 0 && wsInstName[0] == '_' &&
             wsInstName.Right(wsInstName.GetLength() - 1) == wsName) {
           pInstanceMgr = pNode;
@@ -1099,7 +1100,7 @@
 }
 
 bool CXFA_Node::IsAttributeInXML() {
-  return JSNode()->GetEnum(XFA_Attribute::Contains) ==
+  return JSObject()->GetEnum(XFA_Attribute::Contains) ==
          XFA_AttributeEnum::MetaData;
 }
 
@@ -1113,13 +1114,13 @@
 }
 
 void CXFA_Node::UpdateNameHash() {
-  WideString wsName = JSNode()->GetCData(XFA_Attribute::Name);
+  WideString wsName = JSObject()->GetCData(XFA_Attribute::Name);
   m_dwNameHash = FX_HashCode_GetW(wsName.AsStringView(), false);
 }
 
 CFX_XMLNode* CXFA_Node::CreateXMLMappingNode() {
   if (!m_pXMLNode) {
-    WideString wsTag(JSNode()->GetCData(XFA_Attribute::Name));
+    WideString wsTag(JSObject()->GetCData(XFA_Attribute::Name));
     m_pXMLNode = new CFX_XMLElement(wsTag);
     SetFlag(XFA_NodeFlag_OwnXMLNode, false);
   }
@@ -1144,8 +1145,8 @@
       continue;
     }
     if (iCount == 0) {
-      WideString wsName = pNode->JSNode()->GetCData(XFA_Attribute::Name);
-      WideString wsInstName = JSNode()->GetCData(XFA_Attribute::Name);
+      WideString wsName = pNode->JSObject()->GetCData(XFA_Attribute::Name);
+      WideString wsInstName = JSObject()->GetCData(XFA_Attribute::Name);
       if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' ||
           wsInstName.Right(wsInstName.GetLength() - 1) != wsName) {
         return nullptr;
@@ -1175,8 +1176,8 @@
       continue;
     }
     if (iCount == 0) {
-      WideString wsName = pNode->JSNode()->GetCData(XFA_Attribute::Name);
-      WideString wsInstName = JSNode()->GetCData(XFA_Attribute::Name);
+      WideString wsName = pNode->JSObject()->GetCData(XFA_Attribute::Name);
+      WideString wsInstName = JSObject()->GetCData(XFA_Attribute::Name);
       if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' ||
           wsInstName.Right(wsInstName.GetLength() - 1) != wsName) {
         return iCount;
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index 6079ea7..2b0b476 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -91,10 +91,6 @@
   void SetFlag(uint32_t dwFlag, bool bNotify);
   void ClearFlag(uint32_t dwFlag);
 
-  CJX_Node* JSNode() { return static_cast<CJX_Node*>(JSObject()); }
-  const CJX_Node* JSNode() const {
-    return static_cast<const CJX_Node*>(JSObject());
-  }
   CXFA_Node* GetParent() { return m_pParent; }
   CXFA_Node* GetChildNode() { return m_pChild; }
 
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index 3324a9b..2c3c46d 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -260,7 +260,7 @@
                            GetIndex(refNode, eLogicType, bIsProperty, true));
     return;
   }
-  ws = refNode->JSNode()->GetCData(XFA_Attribute::Name);
+  ws = refNode->JSObject()->GetCData(XFA_Attribute::Name);
   ws.Replace(L".", L"\\.");
   wsName =
       WideString::Format(L"%ls[%d]", ws.c_str(),
@@ -354,8 +354,8 @@
     for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) {
       CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eClassType);
       if (pNewNode) {
-        pNewNode->JSNode()->SetAttribute(XFA_Attribute::Name,
-                                         wsName.AsStringView(), false);
+        pNewNode->JSObject()->SetAttribute(XFA_Attribute::Name,
+                                           wsName.AsStringView(), false);
         pNewNode->CreateXMLMappingNode();
         m_pCreateParent->InsertChild(pNewNode, nullptr);
         if (iIndex == m_iCreateCount - 1) {
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.cpp b/xfa/fxfa/parser/cxfa_nodelocale.cpp
index da64c4a..54440d5 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.cpp
+++ b/xfa/fxfa/parser/cxfa_nodelocale.cpp
@@ -43,8 +43,9 @@
 CXFA_NodeLocale::~CXFA_NodeLocale() {}
 
 WideString CXFA_NodeLocale::GetName() const {
-  return WideString(
-      m_pLocale ? m_pLocale->JSNode()->GetCData(XFA_Attribute::Name) : nullptr);
+  return WideString(m_pLocale
+                        ? m_pLocale->JSObject()->GetCData(XFA_Attribute::Name)
+                        : nullptr);
 }
 
 WideString CXFA_NodeLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const {
@@ -71,7 +72,7 @@
   CXFA_Node* pSymbols =
       m_pLocale ? m_pLocale->GetChild(0, XFA_Element::DateTimeSymbols, false)
                 : nullptr;
-  return pSymbols ? pSymbols->JSNode()->GetContent(false) : WideString();
+  return pSymbols ? pSymbols->JSObject()->GetContent(false) : WideString();
 }
 
 WideString CXFA_NodeLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
@@ -135,7 +136,7 @@
   CXFA_Node* pChild =
       pParent ? pParent->GetNodeItem(XFA_NODEITEM_FirstChild) : nullptr;
   while (pChild) {
-    if (pChild->JSNode()->GetAttribute(XFA_Attribute::Name) == wsName)
+    if (pChild->JSObject()->GetAttribute(XFA_Attribute::Name) == wsName)
       return pChild;
 
     pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
@@ -148,7 +149,7 @@
   CXFA_Node* pSymbols =
       m_pLocale ? m_pLocale->GetChild(0, eElement, false) : nullptr;
   CXFA_Node* pSymbol = GetNodeByName(pSymbols, symbol_type);
-  return pSymbol ? pSymbol->JSNode()->GetContent(false) : WideString();
+  return pSymbol ? pSymbol->JSObject()->GetContent(false) : WideString();
 }
 
 WideString CXFA_NodeLocale::GetCalendarSymbol(XFA_Element eElement,
@@ -162,9 +163,9 @@
 
   CXFA_Node* pNode = pCalendar->GetFirstChildByClass(eElement);
   for (; pNode; pNode = pNode->GetNextSameClassSibling(eElement)) {
-    if (pNode->JSNode()->GetBoolean(XFA_Attribute::Abbr) == bAbbr) {
+    if (pNode->JSObject()->GetBoolean(XFA_Attribute::Abbr) == bAbbr) {
       CXFA_Node* pSymbol = pNode->GetChild(index, XFA_Element::Unknown, false);
-      return pSymbol ? pSymbol->JSNode()->GetContent(false) : WideString();
+      return pSymbol ? pSymbol->JSObject()->GetContent(false) : WideString();
     }
   }
   return WideString();
diff --git a/xfa/fxfa/parser/cxfa_occurdata.cpp b/xfa/fxfa/parser/cxfa_occurdata.cpp
index ffad9fd..195dce7 100644
--- a/xfa/fxfa/parser/cxfa_occurdata.cpp
+++ b/xfa/fxfa/parser/cxfa_occurdata.cpp
@@ -15,7 +15,7 @@
     return 1;
 
   pdfium::Optional<int32_t> max =
-      m_pNode->JSNode()->TryInteger(XFA_Attribute::Max, true);
+      m_pNode->JSObject()->TryInteger(XFA_Attribute::Max, true);
   return max ? *max : GetMin();
 }
 
@@ -24,7 +24,7 @@
     return 1;
 
   pdfium::Optional<int32_t> min =
-      m_pNode->JSNode()->TryInteger(XFA_Attribute::Min, true);
+      m_pNode->JSObject()->TryInteger(XFA_Attribute::Min, true);
   return min && *min >= 0 ? *min : 1;
 }
 
@@ -35,28 +35,28 @@
   int32_t iMax = GetMax();
 
   pdfium::Optional<int32_t> init =
-      m_pNode->JSNode()->TryInteger(XFA_Attribute::Initial, false);
+      m_pNode->JSObject()->TryInteger(XFA_Attribute::Initial, false);
   return {iMin, iMax, init && *init >= iMin ? *init : iMin};
 }
 
 void CXFA_OccurData::SetMax(int32_t iMax) {
   iMax = (iMax != -1 && iMax < 1) ? 1 : iMax;
-  m_pNode->JSNode()->SetInteger(XFA_Attribute::Max, iMax, false);
+  m_pNode->JSObject()->SetInteger(XFA_Attribute::Max, iMax, false);
 
   int32_t iMin = GetMin();
   if (iMax != -1 && iMax < iMin) {
     iMin = iMax;
-    m_pNode->JSNode()->SetInteger(XFA_Attribute::Min, iMin, false);
+    m_pNode->JSObject()->SetInteger(XFA_Attribute::Min, iMin, false);
   }
 }
 
 void CXFA_OccurData::SetMin(int32_t iMin) {
   iMin = (iMin < 0) ? 1 : iMin;
-  m_pNode->JSNode()->SetInteger(XFA_Attribute::Min, iMin, false);
+  m_pNode->JSObject()->SetInteger(XFA_Attribute::Min, iMin, false);
 
   int32_t iMax = GetMax();
   if (iMax > 0 && iMax < iMin) {
     iMax = iMin;
-    m_pNode->JSNode()->SetInteger(XFA_Attribute::Max, iMax, false);
+    m_pNode->JSObject()->SetInteger(XFA_Attribute::Max, iMax, false);
   }
 }
diff --git a/xfa/fxfa/parser/cxfa_paradata.cpp b/xfa/fxfa/parser/cxfa_paradata.cpp
index 22cb678..7dfd924 100644
--- a/xfa/fxfa/parser/cxfa_paradata.cpp
+++ b/xfa/fxfa/parser/cxfa_paradata.cpp
@@ -12,49 +12,49 @@
 CXFA_ParaData::CXFA_ParaData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 XFA_AttributeEnum CXFA_ParaData::GetHorizontalAlign() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::HAlign, true)
       .value_or(XFA_AttributeEnum::Left);
 }
 
 XFA_AttributeEnum CXFA_ParaData::GetVerticalAlign() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->TryEnum(XFA_Attribute::VAlign, true)
       .value_or(XFA_AttributeEnum::Top);
 }
 
 float CXFA_ParaData::GetLineHeight() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::LineHeight)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_ParaData::GetMarginLeft() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::MarginLeft)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_ParaData::GetMarginRight() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::MarginRight)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_ParaData::GetSpaceAbove() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::SpaceAbove)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_ParaData::GetSpaceBelow() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::SpaceBelow)
       .ToUnit(XFA_Unit::Pt);
 }
 
 float CXFA_ParaData::GetTextIndent() const {
-  return m_pNode->JSNode()
+  return m_pNode->JSObject()
       ->GetMeasure(XFA_Attribute::TextIndent)
       .ToUnit(XFA_Unit::Pt);
 }
diff --git a/xfa/fxfa/parser/cxfa_scriptdata.cpp b/xfa/fxfa/parser/cxfa_scriptdata.cpp
index 23e9438..7e9f490 100644
--- a/xfa/fxfa/parser/cxfa_scriptdata.cpp
+++ b/xfa/fxfa/parser/cxfa_scriptdata.cpp
@@ -12,7 +12,7 @@
 
 CXFA_ScriptData::Type CXFA_ScriptData::GetContentType() const {
   pdfium::Optional<WideString> cData =
-      m_pNode->JSNode()->TryCData(XFA_Attribute::ContentType, false);
+      m_pNode->JSObject()->TryCData(XFA_Attribute::ContentType, false);
   if (!cData || *cData == L"application/x-formcalc")
     return Type::Formcalc;
   if (*cData == L"application/x-javascript")
@@ -21,9 +21,9 @@
 }
 
 XFA_AttributeEnum CXFA_ScriptData::GetRunAt() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::RunAt);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::RunAt);
 }
 
 WideString CXFA_ScriptData::GetExpression() const {
-  return m_pNode->JSNode()->GetContent(false);
+  return m_pNode->JSObject()->GetContent(false);
 }
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp
index bd3fdf7..5c72282 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp
@@ -436,12 +436,12 @@
 
           CFX_XMLElement* child = static_cast<CFX_XMLElement*>(pXMLChild);
           WideString wsNodeStr = child->GetLocalTagName();
-          pXFAChild->JSNode()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
-                                        false);
+          pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
+                                          false);
           WideString wsChildValue = GetPlainTextFromRichText(child);
           if (!wsChildValue.IsEmpty())
-            pXFAChild->JSNode()->SetCData(XFA_Attribute::Value, wsChildValue,
-                                          false, false);
+            pXFAChild->JSObject()->SetCData(XFA_Attribute::Value, wsChildValue,
+                                            false, false);
 
           pXFANode->InsertChild(pXFAChild, nullptr);
           pXFAChild->SetXMLMappingNode(pXMLChild);
@@ -513,16 +513,16 @@
     return nullptr;
 
   m_pRootNode = pXFARootNode;
-  pXFARootNode->JSNode()->SetCData(XFA_Attribute::Name, L"xfa", false, false);
+  pXFARootNode->JSObject()->SetCData(XFA_Attribute::Name, L"xfa", false, false);
 
   CFX_XMLElement* pElement = static_cast<CFX_XMLElement*>(pXMLDocumentNode);
   for (auto it : pElement->GetAttributes()) {
     if (it.first == L"uuid")
-      pXFARootNode->JSNode()->SetCData(XFA_Attribute::Uuid, it.second, false,
-                                       false);
+      pXFARootNode->JSObject()->SetCData(XFA_Attribute::Uuid, it.second, false,
+                                         false);
     else if (it.first == L"timeStamp")
-      pXFARootNode->JSNode()->SetCData(XFA_Attribute::TimeStamp, it.second,
-                                       false, false);
+      pXFARootNode->JSObject()->SetCData(XFA_Attribute::TimeStamp, it.second,
+                                         false, false);
   }
 
   CFX_XMLNode* pXMLConfigDOMRoot = nullptr;
@@ -637,7 +637,7 @@
   if (!pNode)
     return nullptr;
 
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false);
   if (!NormalLoader(pNode, pXMLDocumentNode, XFA_PacketType::Config, true))
     return nullptr;
 
@@ -658,7 +658,7 @@
   if (!pNode)
     return nullptr;
 
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false);
   if (m_bDocumentParser) {
     CFX_XMLElement* pXMLDocumentElement =
         static_cast<CFX_XMLElement*>(pXMLDocumentNode);
@@ -706,9 +706,9 @@
   if (!pNode)
     return nullptr;
 
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
-  pNode->JSNode()->SetAttribute(XFA_Attribute::Checksum,
-                                wsChecksum.AsStringView(), false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+  pNode->JSObject()->SetAttribute(XFA_Attribute::Checksum,
+                                  wsChecksum.AsStringView(), false);
   CXFA_Node* pTemplateRoot =
       m_pRootNode->GetFirstChildByClass(XFA_Element::Template);
   CXFA_Node* pTemplateChosen =
@@ -716,7 +716,7 @@
                     : nullptr;
   bool bUseAttribute = true;
   if (pTemplateChosen &&
-      pTemplateChosen->JSNode()->GetEnum(XFA_Attribute::RestoreState) !=
+      pTemplateChosen->JSObject()->GetEnum(XFA_Attribute::RestoreState) !=
           XFA_AttributeEnum::Auto) {
     bUseAttribute = false;
   }
@@ -738,7 +738,8 @@
     if (!pNode)
       return nullptr;
 
-    pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+    pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false,
+                                false);
     if (!DataLoader(pNode, pDatasetsXMLNode, false))
       return nullptr;
 
@@ -777,7 +778,7 @@
     }
     WideString wsLocalName =
         static_cast<CFX_XMLElement*>(pDataXMLNode)->GetLocalTagName();
-    pNode->JSNode()->SetCData(XFA_Attribute::Name, wsLocalName, false, false);
+    pNode->JSObject()->SetCData(XFA_Attribute::Name, wsLocalName, false, false);
     if (!DataLoader(pNode, pDataXMLNode, true))
       return nullptr;
 
@@ -803,7 +804,7 @@
   if (!pNode)
     return nullptr;
 
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false);
   if (!NormalLoader(pNode, pXMLDocumentNode, packet_type, true))
     return nullptr;
 
@@ -823,7 +824,7 @@
   if (!pNode)
     return nullptr;
 
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, packet->name, false, false);
   pNode->SetXMLMappingNode(pXMLDocumentNode);
   return pNode;
 }
@@ -837,7 +838,7 @@
 
   WideString wsName =
       static_cast<CFX_XMLElement*>(pXMLDocumentNode)->GetLocalTagName();
-  pNode->JSNode()->SetCData(XFA_Attribute::Name, wsName, false, false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Name, wsName, false, false);
   if (!UserPacketLoader(pNode, pXMLDocumentNode))
     return nullptr;
 
@@ -885,8 +886,8 @@
         if (!pXFAChild)
           return nullptr;
         if (ePacketID == XFA_PacketType::Config) {
-          pXFAChild->JSNode()->SetAttribute(XFA_Attribute::Name,
-                                            wsTagName.AsStringView(), false);
+          pXFAChild->JSObject()->SetAttribute(XFA_Attribute::Name,
+                                              wsTagName.AsStringView(), false);
         }
 
         bool IsNeedValue = true;
@@ -905,8 +906,8 @@
               attr != XFA_Attribute::Save) {
             continue;
           }
-          pXFAChild->JSNode()->SetAttribute(attr, it.second.AsStringView(),
-                                            false);
+          pXFAChild->JSObject()->SetAttribute(attr, it.second.AsStringView(),
+                                              false);
         }
         pXFANode->InsertChild(pXFAChild, nullptr);
         if (eType == XFA_Element::Validate || eType == XFA_Element::Locale) {
@@ -947,7 +948,7 @@
   XFA_Element element = XFA_Element::Sharptext;
   if (pXFANode->GetElementType() == XFA_Element::ExData) {
     WideString wsContentType =
-        pXFANode->JSNode()->GetCData(XFA_Attribute::ContentType);
+        pXFANode->JSObject()->GetCData(XFA_Attribute::ContentType);
     if (wsContentType == L"text/html")
       element = XFA_Element::SharpxHTML;
     else if (wsContentType == L"text/xml")
@@ -989,11 +990,12 @@
       CXFA_Node* pContentRawDataNode =
           m_pFactory->CreateNode(ePacketID, element);
       ASSERT(pContentRawDataNode);
-      pContentRawDataNode->JSNode()->SetCData(XFA_Attribute::Value, wsValue,
-                                              false, false);
+      pContentRawDataNode->JSObject()->SetCData(XFA_Attribute::Value, wsValue,
+                                                false, false);
       pXFANode->InsertChild(pContentRawDataNode, nullptr);
     } else {
-      pXFANode->JSNode()->SetCData(XFA_Attribute::Value, wsValue, false, false);
+      pXFANode->JSObject()->SetCData(XFA_Attribute::Value, wsValue, false,
+                                     false);
     }
   }
 }
@@ -1059,7 +1061,7 @@
         if (!pXFAChild)
           return;
 
-        pXFAChild->JSNode()->SetCData(
+        pXFAChild->JSObject()->SetCData(
             XFA_Attribute::Name, pXMLElement->GetLocalTagName(), false, false);
         bool bNeedValue = true;
 
@@ -1084,14 +1086,14 @@
           if (!pXFAMetaData)
             return;
 
-          pXFAMetaData->JSNode()->SetCData(XFA_Attribute::Name, wsName, false,
-                                           false);
-          pXFAMetaData->JSNode()->SetCData(XFA_Attribute::QualifiedName,
-                                           it.first, false, false);
-          pXFAMetaData->JSNode()->SetCData(XFA_Attribute::Value, it.second,
-                                           false, false);
-          pXFAMetaData->JSNode()->SetEnum(XFA_Attribute::Contains,
-                                          XFA_AttributeEnum::MetaData, false);
+          pXFAMetaData->JSObject()->SetCData(XFA_Attribute::Name, wsName, false,
+                                             false);
+          pXFAMetaData->JSObject()->SetCData(XFA_Attribute::QualifiedName,
+                                             it.first, false, false);
+          pXFAMetaData->JSObject()->SetCData(XFA_Attribute::Value, it.second,
+                                             false, false);
+          pXFAMetaData->JSObject()->SetEnum(XFA_Attribute::Contains,
+                                            XFA_AttributeEnum::MetaData, false);
           pXFAChild->InsertChild(pXFAMetaData, nullptr);
           pXFAMetaData->SetXMLMappingNode(pXMLElement);
           pXFAMetaData->SetFlag(XFA_NodeFlag_Initialized, false);
@@ -1123,8 +1125,8 @@
         if (!pXFAChild)
           return;
 
-        pXFAChild->JSNode()->SetCData(XFA_Attribute::Value, wsText, false,
-                                      false);
+        pXFAChild->JSObject()->SetCData(XFA_Attribute::Value, wsText, false,
+                                        false);
         pXFANode->InsertChild(pXFAChild, nullptr);
         pXFAChild->SetXMLMappingNode(pXMLText);
         pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
@@ -1173,9 +1175,10 @@
           if (!pXFAChild)
             return;
 
-          pXFAChild->JSNode()->SetCData(XFA_Attribute::Name, L"", false, false);
-          pXFAChild->JSNode()->SetCData(XFA_Attribute::Value, wsCurValue, false,
-                                        false);
+          pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, L"", false,
+                                          false);
+          pXFAChild->JSObject()->SetCData(XFA_Attribute::Value, wsCurValue,
+                                          false, false);
           pXFANode->InsertChild(pXFAChild, nullptr);
           pXFAChild->SetXMLMappingNode(pXMLCurValueNode);
           pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
@@ -1191,14 +1194,14 @@
 
       WideString wsNodeStr =
           static_cast<CFX_XMLElement*>(pXMLChild)->GetLocalTagName();
-      pXFAChild->JSNode()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
-                                    false);
+      pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
+                                      false);
       ParseDataValue(pXFAChild, pXMLChild, ePacketID);
       pXFANode->InsertChild(pXFAChild, nullptr);
       pXFAChild->SetXMLMappingNode(pXMLChild);
       pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
       WideString wsCurValue =
-          pXFAChild->JSNode()->GetCData(XFA_Attribute::Value);
+          pXFAChild->JSObject()->GetCData(XFA_Attribute::Value);
       wsValueTextBuf << wsCurValue;
     }
   }
@@ -1211,9 +1214,9 @@
         if (!pXFAChild)
           return;
 
-        pXFAChild->JSNode()->SetCData(XFA_Attribute::Name, L"", false, false);
-        pXFAChild->JSNode()->SetCData(XFA_Attribute::Value, wsCurValue, false,
-                                      false);
+        pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, L"", false, false);
+        pXFAChild->JSObject()->SetCData(XFA_Attribute::Value, wsCurValue, false,
+                                        false);
         pXFANode->InsertChild(pXFAChild, nullptr);
         pXFAChild->SetXMLMappingNode(pXMLCurValueNode);
         pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
@@ -1224,7 +1227,8 @@
     pXMLCurValueNode = nullptr;
   }
   WideString wsNodeValue = wsValueTextBuf.MakeString();
-  pXFANode->JSNode()->SetCData(XFA_Attribute::Value, wsNodeValue, false, false);
+  pXFANode->JSObject()->SetCData(XFA_Attribute::Value, wsNodeValue, false,
+                                 false);
 }
 
 void CXFA_SimpleParser::ParseInstruction(CXFA_Node* pXFANode,
diff --git a/xfa/fxfa/parser/cxfa_strokedata.cpp b/xfa/fxfa/parser/cxfa_strokedata.cpp
index a0e80cd..96d2866 100644
--- a/xfa/fxfa/parser/cxfa_strokedata.cpp
+++ b/xfa/fxfa/parser/cxfa_strokedata.cpp
@@ -14,7 +14,7 @@
   if (!m_pNode)
     return false;
 
-  XFA_AttributeEnum presence = m_pNode->JSNode()
+  XFA_AttributeEnum presence = m_pNode->JSObject()
                                    ->TryEnum(XFA_Attribute::Presence, true)
                                    .value_or(XFA_AttributeEnum::Visible);
   return presence == XFA_AttributeEnum::Visible;
@@ -23,11 +23,11 @@
 XFA_AttributeEnum CXFA_StrokeData::GetCapType() const {
   if (!m_pNode)
     return XFA_AttributeEnum::Square;
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Cap);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Cap);
 }
 
 XFA_AttributeEnum CXFA_StrokeData::GetStrokeType() const {
-  return m_pNode ? m_pNode->JSNode()->GetEnum(XFA_Attribute::Stroke)
+  return m_pNode ? m_pNode->JSObject()->GetEnum(XFA_Attribute::Stroke)
                  : XFA_AttributeEnum::Solid;
 }
 
@@ -36,7 +36,7 @@
 }
 
 CXFA_Measurement CXFA_StrokeData::GetMSThickness() const {
-  return m_pNode ? m_pNode->JSNode()->GetMeasure(XFA_Attribute::Thickness)
+  return m_pNode ? m_pNode->JSObject()->GetMeasure(XFA_Attribute::Thickness)
                  : CXFA_Measurement(0.5, XFA_Unit::Pt);
 }
 
@@ -44,7 +44,7 @@
   if (!m_pNode)
     return;
 
-  m_pNode->JSNode()->SetMeasure(XFA_Attribute::Thickness, msThinkness, false);
+  m_pNode->JSObject()->SetMeasure(XFA_Attribute::Thickness, msThinkness, false);
 }
 
 FX_ARGB CXFA_StrokeData::GetColor() const {
@@ -56,7 +56,7 @@
     return 0xFF000000;
 
   return CXFA_DataData::ToColor(
-      pNode->JSNode()->GetCData(XFA_Attribute::Value).AsStringView());
+      pNode->JSObject()->GetCData(XFA_Attribute::Value).AsStringView());
 }
 
 void CXFA_StrokeData::SetColor(FX_ARGB argb) {
@@ -64,29 +64,29 @@
     return;
 
   CXFA_Node* pNode =
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Color, true);
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Color, true);
   int a;
   int r;
   int g;
   int b;
   std::tie(a, r, g, b) = ArgbDecode(argb);
-  pNode->JSNode()->SetCData(XFA_Attribute::Value,
-                            WideString::Format(L"%d,%d,%d", r, g, b), false,
-                            false);
+  pNode->JSObject()->SetCData(XFA_Attribute::Value,
+                              WideString::Format(L"%d,%d,%d", r, g, b), false,
+                              false);
 }
 
 XFA_AttributeEnum CXFA_StrokeData::GetJoinType() const {
-  return m_pNode ? m_pNode->JSNode()->GetEnum(XFA_Attribute::Join)
+  return m_pNode ? m_pNode->JSObject()->GetEnum(XFA_Attribute::Join)
                  : XFA_AttributeEnum::Square;
 }
 
 bool CXFA_StrokeData::IsInverted() const {
-  return m_pNode ? m_pNode->JSNode()->GetBoolean(XFA_Attribute::Inverted)
+  return m_pNode ? m_pNode->JSObject()->GetBoolean(XFA_Attribute::Inverted)
                  : false;
 }
 
 float CXFA_StrokeData::GetRadius() const {
-  return m_pNode ? m_pNode->JSNode()
+  return m_pNode ? m_pNode->JSObject()
                        ->TryMeasure(XFA_Attribute::Radius, true)
                        .value_or(CXFA_Measurement(0, XFA_Unit::In))
                        .ToUnit(XFA_Unit::Pt)
diff --git a/xfa/fxfa/parser/cxfa_submitdata.cpp b/xfa/fxfa/parser/cxfa_submitdata.cpp
index 91c88dd..20dce38 100644
--- a/xfa/fxfa/parser/cxfa_submitdata.cpp
+++ b/xfa/fxfa/parser/cxfa_submitdata.cpp
@@ -11,17 +11,17 @@
 CXFA_SubmitData::CXFA_SubmitData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 bool CXFA_SubmitData::IsSubmitEmbedPDF() const {
-  return m_pNode->JSNode()->GetBoolean(XFA_Attribute::EmbedPDF);
+  return m_pNode->JSObject()->GetBoolean(XFA_Attribute::EmbedPDF);
 }
 
 XFA_AttributeEnum CXFA_SubmitData::GetSubmitFormat() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::Format);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::Format);
 }
 
 WideString CXFA_SubmitData::GetSubmitTarget() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::Target);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::Target);
 }
 
 WideString CXFA_SubmitData::GetSubmitXDPContent() const {
-  return m_pNode->JSNode()->GetCData(XFA_Attribute::XdpContent);
+  return m_pNode->JSObject()->GetCData(XFA_Attribute::XdpContent);
 }
diff --git a/xfa/fxfa/parser/cxfa_textdata.cpp b/xfa/fxfa/parser/cxfa_textdata.cpp
index a042853..2ce6c03 100644
--- a/xfa/fxfa/parser/cxfa_textdata.cpp
+++ b/xfa/fxfa/parser/cxfa_textdata.cpp
@@ -11,5 +11,5 @@
 CXFA_TextData::CXFA_TextData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 WideString CXFA_TextData::GetContent() const {
-  return m_pNode->JSNode()->GetContent(false);
+  return m_pNode->JSObject()->GetContent(false);
 }
diff --git a/xfa/fxfa/parser/cxfa_treelist.h b/xfa/fxfa/parser/cxfa_treelist.h
index 890fc89..3c65ca5 100644
--- a/xfa/fxfa/parser/cxfa_treelist.h
+++ b/xfa/fxfa/parser/cxfa_treelist.h
@@ -18,8 +18,6 @@
   explicit CXFA_TreeList(CXFA_Document* pDocument);
   ~CXFA_TreeList() override;
 
-  CJX_TreeList* JSNodeList() { return static_cast<CJX_TreeList*>(JSObject()); }
-
   CXFA_Node* NamedItem(const WideStringView& wsName);
 };
 
diff --git a/xfa/fxfa/parser/cxfa_validatedata.cpp b/xfa/fxfa/parser/cxfa_validatedata.cpp
index 3f7ce17..934edba 100644
--- a/xfa/fxfa/parser/cxfa_validatedata.cpp
+++ b/xfa/fxfa/parser/cxfa_validatedata.cpp
@@ -20,28 +20,29 @@
 CXFA_ValidateData::CXFA_ValidateData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
 
 XFA_AttributeEnum CXFA_ValidateData::GetFormatTest() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::FormatTest);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::FormatTest);
 }
 
 void CXFA_ValidateData::SetNullTest(const WideString& wsValue) {
   pdfium::Optional<XFA_AttributeEnum> item =
       CXFA_Node::NameToAttributeEnum(wsValue.AsStringView());
-  m_pNode->JSNode()->SetEnum(XFA_Attribute::NullTest,
-                             item ? *item : XFA_AttributeEnum::Disabled, false);
+  m_pNode->JSObject()->SetEnum(XFA_Attribute::NullTest,
+                               item ? *item : XFA_AttributeEnum::Disabled,
+                               false);
 }
 
 XFA_AttributeEnum CXFA_ValidateData::GetNullTest() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::NullTest);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::NullTest);
 }
 
 XFA_AttributeEnum CXFA_ValidateData::GetScriptTest() const {
-  return m_pNode->JSNode()->GetEnum(XFA_Attribute::ScriptTest);
+  return m_pNode->JSObject()->GetEnum(XFA_Attribute::ScriptTest);
 }
 
 WideString CXFA_ValidateData::GetMessageText(
     const WideString& wsMessageType) const {
   CXFA_Node* pNode =
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Message, false);
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Message, false);
   if (!pNode)
     return L"";
 
@@ -51,9 +52,9 @@
     if (pItemNode->GetElementType() != XFA_Element::Text)
       continue;
 
-    WideString wsName = pItemNode->JSNode()->GetCData(XFA_Attribute::Name);
+    WideString wsName = pItemNode->JSObject()->GetCData(XFA_Attribute::Name);
     if (wsName.IsEmpty() || wsName == wsMessageType)
-      return pItemNode->JSNode()->GetContent(false);
+      return pItemNode->JSObject()->GetContent(false);
   }
   return L"";
 }
@@ -85,7 +86,7 @@
 void CXFA_ValidateData::SetMessageText(const WideString& wsMessageType,
                                        const WideString& wsMessage) {
   CXFA_Node* pNode =
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Message, true);
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Message, true);
   if (!pNode)
     return;
 
@@ -95,24 +96,25 @@
     if (pItemNode->GetElementType() != XFA_Element::Text)
       continue;
 
-    WideString wsName = pItemNode->JSNode()->GetCData(XFA_Attribute::Name);
+    WideString wsName = pItemNode->JSObject()->GetCData(XFA_Attribute::Name);
     if (wsName.IsEmpty() || wsName == wsMessageType) {
-      pItemNode->JSNode()->SetContent(wsMessage, wsMessage, false, false, true);
+      pItemNode->JSObject()->SetContent(wsMessage, wsMessage, false, false,
+                                        true);
       return;
     }
   }
 
   CXFA_Node* pTextNode = pNode->CreateSamePacketNode(XFA_Element::Text);
   pNode->InsertChild(pTextNode, nullptr);
-  pTextNode->JSNode()->SetCData(XFA_Attribute::Name, wsMessageType, false,
-                                false);
-  pTextNode->JSNode()->SetContent(wsMessage, wsMessage, false, false, true);
+  pTextNode->JSObject()->SetCData(XFA_Attribute::Name, wsMessageType, false,
+                                  false);
+  pTextNode->JSObject()->SetContent(wsMessage, wsMessage, false, false, true);
 }
 
 WideString CXFA_ValidateData::GetPicture() const {
   CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Picture, false);
   if (pNode)
-    return pNode->JSNode()->GetContent(false);
+    return pNode->JSObject()->GetContent(false);
   return L"";
 }
 
diff --git a/xfa/fxfa/parser/cxfa_valuedata.cpp b/xfa/fxfa/parser/cxfa_valuedata.cpp
index d0f86a8..c88af7a 100644
--- a/xfa/fxfa/parser/cxfa_valuedata.cpp
+++ b/xfa/fxfa/parser/cxfa_valuedata.cpp
@@ -24,7 +24,7 @@
   if (!pNode)
     return L"";
 
-  return pNode->JSNode()->TryContent(false, true).value_or(L"");
+  return pNode->JSObject()->TryContent(false, true).value_or(L"");
 }
 
 CXFA_ArcData CXFA_ValueData::GetArcData() const {
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index d147bd9..4ba6b41 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -69,7 +69,7 @@
   eWidgetType = XFA_Element::Unknown;
   XFA_Element eUIType = XFA_Element::Unknown;
   CXFA_ValueData defValueData(
-      pNode->JSNode()->GetProperty(0, XFA_Element::Value, true));
+      pNode->JSObject()->GetProperty(0, XFA_Element::Value, true));
   XFA_Element eValueType = defValueData.GetChildValueClassID();
   switch (eValueType) {
     case XFA_Element::Boolean:
@@ -105,7 +105,7 @@
   }
 
   CXFA_Node* pUIChild = nullptr;
-  CXFA_Node* pUI = pNode->JSNode()->GetProperty(0, XFA_Element::Ui, true);
+  CXFA_Node* pUI = pNode->JSObject()->GetProperty(0, XFA_Element::Ui, true);
   CXFA_Node* pChild = pUI->GetNodeItem(XFA_NODEITEM_FirstChild);
   for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
     XFA_Element eChildType = pChild->GetElementType();
@@ -151,9 +151,10 @@
   if (!pUIChild) {
     if (eUIType == XFA_Element::Unknown) {
       eUIType = XFA_Element::TextEdit;
-      defValueData.GetNode()->JSNode()->GetProperty(0, XFA_Element::Text, true);
+      defValueData.GetNode()->JSObject()->GetProperty(0, XFA_Element::Text,
+                                                      true);
     }
-    return pUI->JSNode()->GetProperty(0, eUIType, true);
+    return pUI->JSObject()->GetProperty(0, eUIType, true);
   }
 
   if (eUIType != XFA_Element::Unknown)
@@ -178,7 +179,7 @@
       eValueType = XFA_Element::Float;
       break;
     case XFA_Element::ChoiceList: {
-      eValueType = (pUIChild->JSNode()->GetEnum(XFA_Attribute::Open) ==
+      eValueType = (pUIChild->JSObject()->GetEnum(XFA_Attribute::Open) ==
                     XFA_AttributeEnum::MultiSelect)
                        ? XFA_Element::ExData
                        : XFA_Element::Text;
@@ -193,7 +194,7 @@
       eValueType = XFA_Element::Text;
       break;
   }
-  defValueData.GetNode()->JSNode()->GetProperty(0, eValueType, true);
+  defValueData.GetNode()->JSObject()->GetProperty(0, eValueType, true);
 
   return pUIChild;
 }
@@ -220,14 +221,14 @@
 }
 
 WideString CXFA_WidgetData::GetRawValue() const {
-  return m_pNode->JSNode()->GetContent(false);
+  return m_pNode->JSObject()->GetContent(false);
 }
 
 bool CXFA_WidgetData::IsOpenAccess() const {
   for (CXFA_Node* pNode = m_pNode; pNode;
        pNode = pNode->GetNodeItem(XFA_NODEITEM_Parent,
                                   XFA_ObjectType::ContainerNode)) {
-    XFA_AttributeEnum iAcc = pNode->JSNode()->GetEnum(XFA_Attribute::Access);
+    XFA_AttributeEnum iAcc = pNode->JSObject()->GetEnum(XFA_Attribute::Access);
     if (iAcc != XFA_AttributeEnum::Open)
       return false;
   }
@@ -236,33 +237,33 @@
 
 int32_t CXFA_WidgetData::GetRotate() const {
   pdfium::Optional<int32_t> degrees =
-      m_pNode->JSNode()->TryInteger(XFA_Attribute::Rotate, false);
+      m_pNode->JSObject()->TryInteger(XFA_Attribute::Rotate, false);
   return degrees ? XFA_MapRotation(*degrees) / 90 * 90 : 0;
 }
 
 CXFA_BorderData CXFA_WidgetData::GetBorderData(bool bModified) {
   return CXFA_BorderData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Border, bModified));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Border, bModified));
 }
 
 CXFA_CaptionData CXFA_WidgetData::GetCaptionData() {
   return CXFA_CaptionData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Caption, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Caption, false));
 }
 
 CXFA_FontData CXFA_WidgetData::GetFontData(bool bModified) {
   return CXFA_FontData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Font, bModified));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Font, bModified));
 }
 
 CXFA_MarginData CXFA_WidgetData::GetMarginData() {
   return CXFA_MarginData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Margin, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Margin, false));
 }
 
 CXFA_ParaData CXFA_WidgetData::GetParaData() {
   return CXFA_ParaData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Para, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Para, false));
 }
 
 std::vector<CXFA_Node*> CXFA_WidgetData::GetEventList() {
@@ -296,28 +297,28 @@
 CXFA_ValueData CXFA_WidgetData::GetDefaultValueData() {
   CXFA_Node* pTemNode = m_pNode->GetTemplateNode();
   return CXFA_ValueData(
-      pTemNode ? pTemNode->JSNode()->GetProperty(0, XFA_Element::Value, false)
+      pTemNode ? pTemNode->JSObject()->GetProperty(0, XFA_Element::Value, false)
                : nullptr);
 }
 
 CXFA_ValueData CXFA_WidgetData::GetFormValueData() {
   return CXFA_ValueData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Value, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Value, false));
 }
 
 CXFA_CalculateData CXFA_WidgetData::GetCalculateData() {
   return CXFA_CalculateData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Calculate, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Calculate, false));
 }
 
 CXFA_ValidateData CXFA_WidgetData::GetValidateData(bool bModified) {
   return CXFA_ValidateData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Validate, bModified));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Validate, bModified));
 }
 
 CXFA_BindData CXFA_WidgetData::GetBindData() {
   return CXFA_BindData(
-      m_pNode->JSNode()->GetProperty(0, XFA_Element::Bind, false));
+      m_pNode->JSObject()->GetProperty(0, XFA_Element::Bind, false));
 }
 
 pdfium::Optional<float> CXFA_WidgetData::TryWidth() {
@@ -346,16 +347,17 @@
 
 CXFA_BorderData CXFA_WidgetData::GetUIBorderData() {
   CXFA_Node* pUIChild = GetUIChild();
-  return CXFA_BorderData(
-      pUIChild ? pUIChild->JSNode()->GetProperty(0, XFA_Element::Border, false)
-               : nullptr);
+  return CXFA_BorderData(pUIChild ? pUIChild->JSObject()->GetProperty(
+                                        0, XFA_Element::Border, false)
+                                  : nullptr);
 }
 
 CFX_RectF CXFA_WidgetData::GetUIMargin() {
   CXFA_Node* pUIChild = GetUIChild();
-  CXFA_MarginData mgUI = CXFA_MarginData(
-      pUIChild ? pUIChild->JSNode()->GetProperty(0, XFA_Element::Margin, false)
-               : nullptr);
+  CXFA_MarginData mgUI =
+      CXFA_MarginData(pUIChild ? pUIChild->JSObject()->GetProperty(
+                                     0, XFA_Element::Margin, false)
+                               : nullptr);
 
   if (!mgUI.HasValidNode())
     return CFX_RectF();
@@ -394,7 +396,7 @@
 XFA_AttributeEnum CXFA_WidgetData::GetButtonHighlight() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild)
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::Highlight);
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::Highlight);
   return XFA_AttributeEnum::Inverted;
 }
 
@@ -405,8 +407,8 @@
 
   for (CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); pText;
        pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"rollover")
-      return !pText->JSNode()->GetContent(false).IsEmpty();
+    if (pText->JSObject()->GetCData(XFA_Attribute::Name) == L"rollover")
+      return !pText->JSObject()->GetContent(false).IsEmpty();
   }
   return false;
 }
@@ -418,8 +420,8 @@
 
   for (CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); pText;
        pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"down")
-      return !pText->JSNode()->GetContent(false).IsEmpty();
+    if (pText->JSObject()->GetCData(XFA_Attribute::Name) == L"down")
+      return !pText->JSObject()->GetContent(false).IsEmpty();
   }
   return false;
 }
@@ -427,7 +429,7 @@
 bool CXFA_WidgetData::IsCheckButtonRound() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild)
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::Shape) ==
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::Shape) ==
            XFA_AttributeEnum::Round;
   return false;
 }
@@ -435,7 +437,7 @@
 XFA_AttributeEnum CXFA_WidgetData::GetCheckButtonMark() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild)
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::Mark);
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::Mark);
   return XFA_AttributeEnum::Default;
 }
 
@@ -447,7 +449,7 @@
 float CXFA_WidgetData::GetCheckButtonSize() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
-    return pUIChild->JSNode()
+    return pUIChild->JSObject()
         ->GetMeasure(XFA_Attribute::Size)
         .ToUnit(XFA_Unit::Pt);
   }
@@ -457,7 +459,7 @@
 bool CXFA_WidgetData::IsAllowNeutral() {
   CXFA_Node* pUIChild = GetUIChild();
   return pUIChild &&
-         pUIChild->JSNode()->GetBoolean(XFA_Attribute::AllowNeutral);
+         pUIChild->JSObject()->GetBoolean(XFA_Attribute::AllowNeutral);
 }
 
 XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() {
@@ -470,7 +472,7 @@
     int32_t i = 0;
     while (pText) {
       pdfium::Optional<WideString> wsContent =
-          pText->JSNode()->TryContent(false, true);
+          pText->JSObject()->TryContent(false, true);
       if (wsContent && *wsContent == wsValue)
         return static_cast<XFA_CHECKSTATE>(i);
 
@@ -489,7 +491,7 @@
       if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items, false)) {
         CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
         if (pText)
-          wsValue = pText->JSNode()->GetContent(false);
+          wsValue = pText->JSObject()->GetContent(false);
       }
     }
     CXFA_Node* pChild =
@@ -506,12 +508,12 @@
       if (!pItemchild)
         continue;
 
-      WideString text = pItemchild->JSNode()->GetContent(false);
+      WideString text = pItemchild->JSObject()->GetContent(false);
       WideString wsChildValue = text;
       if (wsValue != text) {
         pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling);
         if (pItemchild)
-          wsChildValue = pItemchild->JSNode()->GetContent(false);
+          wsChildValue = pItemchild->JSObject()->GetContent(false);
         else
           wsChildValue.clear();
       }
@@ -530,7 +532,7 @@
     while (pText) {
       i++;
       if (i == eCheckState) {
-        wsContent = pText->JSNode()->GetContent(false);
+        wsContent = pText->JSObject()->GetContent(false);
         break;
       }
       pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling);
@@ -595,22 +597,22 @@
     if (!pItemchild)
       continue;
 
-    WideString wsChildValue = pItemchild->JSNode()->GetContent(false);
+    WideString wsChildValue = pItemchild->JSObject()->GetContent(false);
     if (wsValue != wsChildValue) {
       pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling);
       if (pItemchild)
-        wsChildValue = pItemchild->JSNode()->GetContent(false);
+        wsChildValue = pItemchild->JSObject()->GetContent(false);
       else
         wsChildValue.clear();
     } else {
       wsExclGroup = wsValue;
     }
-    pNode->JSNode()->SetContent(wsChildValue, wsChildValue, bNotify,
-                                bScriptModify, false);
+    pNode->JSObject()->SetContent(wsChildValue, wsChildValue, bNotify,
+                                  bScriptModify, false);
   }
   if (m_pNode) {
-    m_pNode->JSNode()->SetContent(wsExclGroup, wsExclGroup, bNotify,
-                                  bScriptModify, bSyncData);
+    m_pNode->JSObject()->SetContent(wsExclGroup, wsExclGroup, bNotify,
+                                    bScriptModify, bSyncData);
   }
 }
 
@@ -645,7 +647,7 @@
 bool CXFA_WidgetData::IsChoiceListCommitOnSelect() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::CommitOn) ==
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::CommitOn) ==
            XFA_AttributeEnum::Select;
   }
   return true;
@@ -653,13 +655,13 @@
 
 bool CXFA_WidgetData::IsChoiceListAllowTextEntry() {
   CXFA_Node* pUIChild = GetUIChild();
-  return pUIChild && pUIChild->JSNode()->GetBoolean(XFA_Attribute::TextEntry);
+  return pUIChild && pUIChild->JSObject()->GetBoolean(XFA_Attribute::TextEntry);
 }
 
 bool CXFA_WidgetData::IsChoiceListMultiSelect() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::Open) ==
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::Open) ==
            XFA_AttributeEnum::MultiSelect;
   }
   return false;
@@ -670,7 +672,7 @@
   if (!pUIChild)
     return false;
 
-  XFA_AttributeEnum attr = pUIChild->JSNode()->GetEnum(XFA_Attribute::Open);
+  XFA_AttributeEnum attr = pUIChild->JSObject()->GetEnum(XFA_Attribute::Open);
   return attr == XFA_AttributeEnum::Always ||
          attr == XFA_AttributeEnum::MultiSelect;
 }
@@ -692,8 +694,10 @@
 
   CXFA_Node* pItem = pItems[0];
   if (iCount > 1) {
-    bool bItemOneHasSave = pItems[0]->JSNode()->GetBoolean(XFA_Attribute::Save);
-    bool bItemTwoHasSave = pItems[1]->JSNode()->GetBoolean(XFA_Attribute::Save);
+    bool bItemOneHasSave =
+        pItems[0]->JSObject()->GetBoolean(XFA_Attribute::Save);
+    bool bItemTwoHasSave =
+        pItems[1]->JSObject()->GetBoolean(XFA_Attribute::Save);
     if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave)
       pItem = pItems[1];
   }
@@ -721,9 +725,9 @@
   CXFA_Node* pItems = pItemsArray[0];
   if (iCount > 1) {
     bool bItemOneHasSave =
-        pItemsArray[0]->JSNode()->GetBoolean(XFA_Attribute::Save);
+        pItemsArray[0]->JSObject()->GetBoolean(XFA_Attribute::Save);
     bool bItemTwoHasSave =
-        pItemsArray[1]->JSNode()->GetBoolean(XFA_Attribute::Save);
+        pItemsArray[1]->JSObject()->GetBoolean(XFA_Attribute::Save);
     if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave)
       pItems = pItemsArray[1];
   }
@@ -732,7 +736,7 @@
 
   CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_Element::Unknown, false);
   if (pItem)
-    return {pItem->JSNode()->GetContent(false)};
+    return {pItem->JSObject()->GetContent(false)};
   return {};
 }
 
@@ -749,8 +753,10 @@
 
   CXFA_Node* pItem = items.front();
   if (items.size() > 1) {
-    bool bItemOneHasSave = items[0]->JSNode()->GetBoolean(XFA_Attribute::Save);
-    bool bItemTwoHasSave = items[1]->JSNode()->GetBoolean(XFA_Attribute::Save);
+    bool bItemOneHasSave =
+        items[0]->JSObject()->GetBoolean(XFA_Attribute::Save);
+    bool bItemTwoHasSave =
+        items[1]->JSObject()->GetBoolean(XFA_Attribute::Save);
     if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave)
       pItem = items[1];
   }
@@ -758,7 +764,7 @@
   std::vector<WideString> wsTextArray;
   for (CXFA_Node* pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
        pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    wsTextArray.emplace_back(pNode->JSNode()->GetContent(false));
+    wsTextArray.emplace_back(pNode->JSObject()->GetContent(false));
   }
   return wsTextArray;
 }
@@ -856,8 +862,8 @@
           wsValue += L"\n";
         }
         wsValue += wsSaveTextArray[nIndex];
-        m_pNode->JSNode()->SetContent(wsValue, wsValue, bNotify, bScriptModify,
-                                      bSyncData);
+        m_pNode->JSObject()->SetContent(wsValue, wsValue, bNotify,
+                                        bScriptModify, bSyncData);
       }
     } else if (iSel >= 0) {
       std::vector<int32_t> iSelArray = GetSelectedItems();
@@ -870,13 +876,13 @@
     if (bSelected) {
       if (iSel < 0) {
         WideString wsSaveText = wsSaveTextArray[nIndex];
-        m_pNode->JSNode()->SetContent(wsSaveText,
-                                      GetFormatDataValue(wsSaveText), bNotify,
-                                      bScriptModify, bSyncData);
+        m_pNode->JSObject()->SetContent(wsSaveText,
+                                        GetFormatDataValue(wsSaveText), bNotify,
+                                        bScriptModify, bSyncData);
       }
     } else if (iSel >= 0) {
-      m_pNode->JSNode()->SetContent(WideString(), WideString(), bNotify,
-                                    bScriptModify, bSyncData);
+      m_pNode->JSObject()->SetContent(WideString(), WideString(), bNotify,
+                                      bScriptModify, bSyncData);
     }
   }
 }
@@ -900,8 +906,8 @@
   if (!IsChoiceListMultiSelect())
     wsFormat = GetFormatDataValue(wsValue);
 
-  m_pNode->JSNode()->SetContent(wsValue, wsFormat, bNotify, bScriptModify,
-                                bSyncData);
+  m_pNode->JSObject()->SetContent(wsValue, wsFormat, bNotify, bScriptModify,
+                                  bSyncData);
 }
 
 void CXFA_WidgetData::ClearAllSelections() {
@@ -935,12 +941,12 @@
     InsertListTextItem(pItems, wsLabel, nIndex);
     CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_Element::Items);
     m_pNode->InsertChild(-1, pSaveItems);
-    pSaveItems->JSNode()->SetBoolean(XFA_Attribute::Save, true, false);
+    pSaveItems->JSObject()->SetBoolean(XFA_Attribute::Save, true, false);
     InsertListTextItem(pSaveItems, wsNewValue, nIndex);
   } else if (listitems.size() > 1) {
     for (int32_t i = 0; i < 2; i++) {
       CXFA_Node* pNode = listitems[i];
-      bool bHasSave = pNode->JSNode()->GetBoolean(XFA_Attribute::Save);
+      bool bHasSave = pNode->JSObject()->GetBoolean(XFA_Attribute::Save);
       if (bHasSave)
         InsertListTextItem(pNode, wsNewValue, nIndex);
       else
@@ -948,18 +954,19 @@
     }
   } else {
     CXFA_Node* pNode = listitems[0];
-    pNode->JSNode()->SetBoolean(XFA_Attribute::Save, false, false);
-    pNode->JSNode()->SetEnum(XFA_Attribute::Presence,
-                             XFA_AttributeEnum::Visible, false);
+    pNode->JSObject()->SetBoolean(XFA_Attribute::Save, false, false);
+    pNode->JSObject()->SetEnum(XFA_Attribute::Presence,
+                               XFA_AttributeEnum::Visible, false);
     CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_Element::Items);
     m_pNode->InsertChild(-1, pSaveItems);
-    pSaveItems->JSNode()->SetBoolean(XFA_Attribute::Save, true, false);
-    pSaveItems->JSNode()->SetEnum(XFA_Attribute::Presence,
-                                  XFA_AttributeEnum::Hidden, false);
+    pSaveItems->JSObject()->SetBoolean(XFA_Attribute::Save, true, false);
+    pSaveItems->JSObject()->SetEnum(XFA_Attribute::Presence,
+                                    XFA_AttributeEnum::Hidden, false);
     CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     int32_t i = 0;
     while (pListNode) {
-      InsertListTextItem(pSaveItems, pListNode->JSNode()->GetContent(false), i);
+      InsertListTextItem(pSaveItems, pListNode->JSObject()->GetContent(false),
+                         i);
       ++i;
 
       pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling);
@@ -992,7 +999,7 @@
   }
 
   CXFA_Node* pLabelItems = listitems[0];
-  bool bSave = pLabelItems->JSNode()->GetBoolean(XFA_Attribute::Save);
+  bool bSave = pLabelItems->JSObject()->GetBoolean(XFA_Attribute::Save);
   CXFA_Node* pSaveItems = nullptr;
   if (bSave) {
     pSaveItems = pLabelItems;
@@ -1006,7 +1013,7 @@
   for (CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild);
        pChildItem;
        pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pChildItem->JSNode()->GetContent(false) == wsValue) {
+    if (pChildItem->JSObject()->GetContent(false) == wsValue) {
       iSearch = iCount;
       break;
     }
@@ -1018,7 +1025,7 @@
   CXFA_Node* pText =
       pLabelItems->GetChild(iSearch, XFA_Element::Unknown, false);
   if (pText)
-    wsLabel = pText->JSNode()->GetContent(false);
+    wsLabel = pText->JSObject()->GetContent(false);
 }
 
 WideString CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel) {
@@ -1035,7 +1042,7 @@
     return WideString(wsLabel);
 
   CXFA_Node* pLabelItems = listitems[0];
-  bool bSave = pLabelItems->JSNode()->GetBoolean(XFA_Attribute::Save);
+  bool bSave = pLabelItems->JSObject()->GetBoolean(XFA_Attribute::Save);
   CXFA_Node* pSaveItems = nullptr;
   if (bSave) {
     pSaveItems = pLabelItems;
@@ -1050,7 +1057,7 @@
   CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild);
   for (; pChildItem;
        pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) {
-    if (pChildItem->JSNode()->GetContent(false) == wsLabel) {
+    if (pChildItem->JSObject()->GetContent(false) == wsLabel) {
       iSearch = iCount;
       break;
     }
@@ -1060,7 +1067,7 @@
     return L"";
 
   CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_Element::Unknown, false);
-  return pText ? pText->JSNode()->GetContent(false) : L"";
+  return pText ? pText->JSObject()->GetContent(false) : L"";
 }
 
 bool CXFA_WidgetData::DeleteItem(int32_t nIndex,
@@ -1077,7 +1084,7 @@
         pItems->RemoveChild(pNode, true);
       }
     } else {
-      if (!bSetValue && pItems->JSNode()->GetBoolean(XFA_Attribute::Save)) {
+      if (!bSetValue && pItems->JSObject()->GetBoolean(XFA_Attribute::Save)) {
         SetItemState(nIndex, false, true, bScriptModify, true);
         bSetValue = true;
       }
@@ -1101,7 +1108,7 @@
 bool CXFA_WidgetData::IsHorizontalScrollPolicyOff() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::HScrollPolicy) ==
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::HScrollPolicy) ==
            XFA_AttributeEnum::Off;
   }
   return false;
@@ -1110,7 +1117,7 @@
 bool CXFA_WidgetData::IsVerticalScrollPolicyOff() {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
-    return pUIChild->JSNode()->GetEnum(XFA_Attribute::VScrollPolicy) ==
+    return pUIChild->JSObject()->GetEnum(XFA_Attribute::VScrollPolicy) ==
            XFA_AttributeEnum::Off;
   }
   return false;
@@ -1121,21 +1128,21 @@
   if (!pUIChild)
     return {};
   if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_Element::Comb, false))
-    return {pNode->JSNode()->GetInteger(XFA_Attribute::NumberOfCells)};
+    return {pNode->JSObject()->GetInteger(XFA_Attribute::NumberOfCells)};
   return {};
 }
 
 WideString CXFA_WidgetData::GetBarcodeType() {
   CXFA_Node* pUIChild = GetUIChild();
   return pUIChild
-             ? WideString(pUIChild->JSNode()->GetCData(XFA_Attribute::Type))
+             ? WideString(pUIChild->JSObject()->GetCData(XFA_Attribute::Type))
              : WideString();
 }
 
 pdfium::Optional<BC_CHAR_ENCODING>
 CXFA_WidgetData::GetBarcodeAttribute_CharEncoding() {
   pdfium::Optional<WideString> wsCharEncoding =
-      GetUIChild()->JSNode()->TryCData(XFA_Attribute::CharEncoding, true);
+      GetUIChild()->JSObject()->TryCData(XFA_Attribute::CharEncoding, true);
   if (!wsCharEncoding)
     return {};
   if (wsCharEncoding->CompareNoCase(L"UTF-16"))
@@ -1147,7 +1154,7 @@
 
 pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_Checksum() {
   pdfium::Optional<XFA_AttributeEnum> checksum =
-      GetUIChild()->JSNode()->TryEnum(XFA_Attribute::Checksum, true);
+      GetUIChild()->JSObject()->TryEnum(XFA_Attribute::Checksum, true);
   if (!checksum)
     return {};
 
@@ -1167,7 +1174,7 @@
 
 pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_DataLength() {
   pdfium::Optional<WideString> wsDataLength =
-      GetUIChild()->JSNode()->TryCData(XFA_Attribute::DataLength, true);
+      GetUIChild()->JSObject()->TryCData(XFA_Attribute::DataLength, true);
   if (!wsDataLength)
     return {};
 
@@ -1176,7 +1183,7 @@
 
 pdfium::Optional<char> CXFA_WidgetData::GetBarcodeAttribute_StartChar() {
   pdfium::Optional<WideString> wsStartEndChar =
-      GetUIChild()->JSNode()->TryCData(XFA_Attribute::StartChar, true);
+      GetUIChild()->JSObject()->TryCData(XFA_Attribute::StartChar, true);
   if (!wsStartEndChar || wsStartEndChar->IsEmpty())
     return {};
 
@@ -1185,7 +1192,7 @@
 
 pdfium::Optional<char> CXFA_WidgetData::GetBarcodeAttribute_EndChar() {
   pdfium::Optional<WideString> wsStartEndChar =
-      GetUIChild()->JSNode()->TryCData(XFA_Attribute::EndChar, true);
+      GetUIChild()->JSObject()->TryCData(XFA_Attribute::EndChar, true);
   if (!wsStartEndChar || wsStartEndChar->IsEmpty())
     return {};
 
@@ -1193,7 +1200,7 @@
 }
 
 pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ECLevel() {
-  pdfium::Optional<WideString> wsECLevel = GetUIChild()->JSNode()->TryCData(
+  pdfium::Optional<WideString> wsECLevel = GetUIChild()->JSObject()->TryCData(
       XFA_Attribute::ErrorCorrectionLevel, true);
   if (!wsECLevel)
     return {};
@@ -1202,7 +1209,7 @@
 
 pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth() {
   pdfium::Optional<CXFA_Measurement> moduleWidthHeight =
-      GetUIChild()->JSNode()->TryMeasure(XFA_Attribute::ModuleWidth, true);
+      GetUIChild()->JSObject()->TryMeasure(XFA_Attribute::ModuleWidth, true);
   if (!moduleWidthHeight)
     return {};
 
@@ -1211,7 +1218,7 @@
 
 pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight() {
   pdfium::Optional<CXFA_Measurement> moduleWidthHeight =
-      GetUIChild()->JSNode()->TryMeasure(XFA_Attribute::ModuleHeight, true);
+      GetUIChild()->JSObject()->TryMeasure(XFA_Attribute::ModuleHeight, true);
   if (!moduleWidthHeight)
     return {};
 
@@ -1219,14 +1226,14 @@
 }
 
 pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum() {
-  return GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::PrintCheckDigit,
-                                            true);
+  return GetUIChild()->JSObject()->TryBoolean(XFA_Attribute::PrintCheckDigit,
+                                              true);
 }
 
 pdfium::Optional<BC_TEXT_LOC>
 CXFA_WidgetData::GetBarcodeAttribute_TextLocation() {
   pdfium::Optional<XFA_AttributeEnum> textLocation =
-      GetUIChild()->JSNode()->TryEnum(XFA_Attribute::TextLocation, true);
+      GetUIChild()->JSObject()->TryEnum(XFA_Attribute::TextLocation, true);
   if (!textLocation)
     return {};
 
@@ -1248,13 +1255,13 @@
 }
 
 pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_Truncate() {
-  return GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::Truncate, true);
+  return GetUIChild()->JSObject()->TryBoolean(XFA_Attribute::Truncate, true);
 }
 
 pdfium::Optional<int8_t>
 CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio() {
   pdfium::Optional<WideString> wsWideNarrowRatio =
-      GetUIChild()->JSNode()->TryCData(XFA_Attribute::WideNarrowRatio, true);
+      GetUIChild()->JSObject()->TryCData(XFA_Attribute::WideNarrowRatio, true);
   if (!wsWideNarrowRatio)
     return {};
 
@@ -1275,13 +1282,13 @@
 
 WideString CXFA_WidgetData::GetPasswordChar() {
   CXFA_Node* pUIChild = GetUIChild();
-  return pUIChild ? pUIChild->JSNode()->GetCData(XFA_Attribute::PasswordChar)
+  return pUIChild ? pUIChild->JSObject()->GetCData(XFA_Attribute::PasswordChar)
                   : L"*";
 }
 
 bool CXFA_WidgetData::IsMultiLine() {
   CXFA_Node* pUIChild = GetUIChild();
-  return pUIChild && pUIChild->JSNode()->GetBoolean(XFA_Attribute::MultiLine);
+  return pUIChild && pUIChild->JSObject()->GetBoolean(XFA_Attribute::MultiLine);
 }
 
 std::pair<XFA_Element, int32_t> CXFA_WidgetData::GetMaxChars() {
@@ -1290,9 +1297,10 @@
       switch (pChild->GetElementType()) {
         case XFA_Element::Text:
           return {XFA_Element::Text,
-                  pChild->JSNode()->GetInteger(XFA_Attribute::MaxChars)};
+                  pChild->JSObject()->GetInteger(XFA_Attribute::MaxChars)};
         case XFA_Element::ExData: {
-          int32_t iMax = pChild->JSNode()->GetInteger(XFA_Attribute::MaxLength);
+          int32_t iMax =
+              pChild->JSObject()->GetInteger(XFA_Attribute::MaxLength);
           return {XFA_Element::ExData, iMax < 0 ? 0 : iMax};
         }
         default:
@@ -1312,7 +1320,7 @@
   if (!pChild)
     return -1;
 
-  return pChild->JSNode()
+  return pChild->JSObject()
       ->TryInteger(XFA_Attribute::FracDigits, true)
       .value_or(-1);
 }
@@ -1326,7 +1334,7 @@
   if (!pChild)
     return -1;
 
-  return pChild->JSNode()
+  return pChild->JSObject()
       ->TryInteger(XFA_Attribute::LeadDigits, true)
       .value_or(-1);
 }
@@ -1390,7 +1398,7 @@
         if (CXFA_Node* pPicture =
                 pFormat->GetChild(0, XFA_Element::Picture, false)) {
           pdfium::Optional<WideString> picture =
-              pPicture->JSNode()->TryContent(false, true);
+              pPicture->JSObject()->TryContent(false, true);
           if (picture)
             return *picture;
         }
@@ -1422,7 +1430,7 @@
         if (CXFA_Node* pPicture =
                 pUI->GetChild(0, XFA_Element::Picture, false)) {
           pdfium::Optional<WideString> picture =
-              pPicture->JSNode()->TryContent(false, true);
+              pPicture->JSObject()->TryContent(false, true);
           if (picture)
             return *picture;
         }
@@ -1471,7 +1479,7 @@
 }
 
 WideString CXFA_WidgetData::GetValue(XFA_VALUEPICTURE eValueType) {
-  WideString wsValue = m_pNode->JSNode()->GetContent(false);
+  WideString wsValue = m_pNode->JSObject()->GetContent(false);
 
   if (eValueType == XFA_VALUEPICTURE_Display)
     GetItemLabel(wsValue.AsStringView(), wsValue);
@@ -1701,7 +1709,7 @@
   if (pContainerWidgetData)
     wsFormatValue = pContainerWidgetData->GetFormatDataValue(wsValue);
 
-  m_pNode->JSNode()->SetContent(wsValue, wsFormatValue, bNotify, false, true);
+  m_pNode->JSObject()->SetContent(wsValue, wsFormatValue, bNotify, false, true);
 }
 
 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems,
@@ -1709,7 +1717,7 @@
                                          int32_t nIndex) {
   CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_Element::Text);
   pItems->InsertChild(nIndex, pText);
-  pText->JSNode()->SetContent(wsText, wsText, false, false, false);
+  pText->JSObject()->SetContent(wsText, wsText, false, false, false);
 }
 
 WideString CXFA_WidgetData::NumericLimit(const WideString& wsValue,
diff --git a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
index 405bb21..66f4a2e 100644
--- a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
+++ b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
@@ -51,7 +51,7 @@
   if (!pChildNode) {
     if (iType == XFA_Element::Unknown)
       return nullptr;
-    pChildNode = pValueNode->JSNode()->GetProperty(0, iType, true);
+    pChildNode = pValueNode->JSObject()->GetProperty(0, iType, true);
   }
   return pChildNode;
 }
@@ -81,8 +81,8 @@
         XFA_Element element = XFA_Element::Sharptext;
         if (pChildNode->GetElementType() == XFA_Element::ExData) {
           pdfium::Optional<WideString> contentType =
-              pChildNode->JSNode()->TryAttribute(XFA_Attribute::ContentType,
-                                                 false);
+              pChildNode->JSObject()->TryAttribute(XFA_Attribute::ContentType,
+                                                   false);
           if (contentType) {
             if (*contentType == L"text/html")
               element = XFA_Element::SharpxHTML;
@@ -93,15 +93,15 @@
         pContentRawDataNode = pChildNode->CreateSamePacketNode(element);
         pChildNode->InsertChild(pContentRawDataNode, nullptr);
       }
-      pContentRawDataNode->JSNode()->SetCData(XFA_Attribute::Value, wsContent,
-                                              false, false);
+      pContentRawDataNode->JSObject()->SetCData(XFA_Attribute::Value, wsContent,
+                                                false, false);
       break;
     }
     case XFA_ObjectType::NodeC:
     case XFA_ObjectType::TextNode:
     case XFA_ObjectType::NodeV: {
-      pChildNode->JSNode()->SetCData(XFA_Attribute::Value, wsContent, false,
-                                     false);
+      pChildNode->JSObject()->SetCData(XFA_Attribute::Value, wsContent, false,
+                                       false);
       break;
     }
     default:
@@ -124,7 +124,7 @@
   ASSERT(pWidgetData);
   XFA_Element eUIType = pWidgetData->GetUIType();
   CXFA_ValueData defValueData(
-      pFormNode->JSNode()->GetProperty(0, XFA_Element::Value, true));
+      pFormNode->JSObject()->GetProperty(0, XFA_Element::Value, true));
   if (!bDataToForm) {
     WideString wsValue;
     switch (eUIType) {
@@ -141,10 +141,10 @@
             static_cast<CFX_XMLElement*>(pDataNode->GetXMLMappingNode());
         ASSERT(pXMLDataElement);
 
-        pDataNode->JSNode()->SetAttributeValue(
+        pDataNode->JSObject()->SetAttributeValue(
             wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
-        pDataNode->JSNode()->SetCData(XFA_Attribute::ContentType, wsContentType,
-                                      false, false);
+        pDataNode->JSObject()->SetCData(XFA_Attribute::ContentType,
+                                        wsContentType, false, false);
         if (!wsHref.IsEmpty())
           pXMLDataElement->SetString(L"href", wsHref);
 
@@ -159,12 +159,12 @@
             for (const auto& text : wsSelTextArray) {
               CXFA_Node* pValue =
                   pDataNode->CreateSamePacketNode(XFA_Element::DataValue);
-              pValue->JSNode()->SetCData(XFA_Attribute::Name, L"value", false,
-                                         false);
+              pValue->JSObject()->SetCData(XFA_Attribute::Name, L"value", false,
+                                           false);
               pValue->CreateXMLMappingNode();
               pDataNode->InsertChild(pValue, nullptr);
-              pValue->JSNode()->SetCData(XFA_Attribute::Value, text, false,
-                                         false);
+              pValue->JSObject()->SetCData(XFA_Attribute::Value, text, false,
+                                           false);
             }
           } else {
             CFX_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode();
@@ -173,7 +173,7 @@
                                                               L"dataGroup");
           }
         } else if (!wsValue.IsEmpty()) {
-          pDataNode->JSNode()->SetAttributeValue(
+          pDataNode->JSObject()->SetAttributeValue(
               wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
         }
         break;
@@ -182,7 +182,7 @@
         if (wsValue.IsEmpty())
           break;
 
-        pDataNode->JSNode()->SetAttributeValue(
+        pDataNode->JSObject()->SetAttributeValue(
             wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
         break;
       case XFA_Element::ExclGroup: {
@@ -208,13 +208,13 @@
           if (!pText)
             continue;
 
-          WideString wsContent = pText->JSNode()->GetContent(false);
+          WideString wsContent = pText->JSObject()->GetContent(false);
           if (wsContent == wsValue) {
             pChecked = pChild;
-            pDataNode->JSNode()->SetAttributeValue(wsValue, wsValue, false,
-                                                   false);
-            pFormNode->JSNode()->SetCData(XFA_Attribute::Value, wsContent,
-                                          false, false);
+            pDataNode->JSObject()->SetAttributeValue(wsValue, wsValue, false,
+                                                     false);
+            pFormNode->JSObject()->SetCData(XFA_Attribute::Value, wsContent,
+                                            false, false);
             break;
           }
         }
@@ -229,7 +229,7 @@
             continue;
 
           CXFA_Node* pValue =
-              pChild->JSNode()->GetProperty(0, XFA_Element::Value, true);
+              pChild->JSObject()->GetProperty(0, XFA_Element::Value, true);
           CXFA_Node* pItems = pChild->GetChild(0, XFA_Element::Items, false);
           CXFA_Node* pText =
               pItems ? pItems->GetNodeItem(XFA_NODEITEM_FirstChild) : nullptr;
@@ -238,7 +238,7 @@
 
           WideString wsContent;
           if (pText)
-            wsContent = pText->JSNode()->GetContent(false);
+            wsContent = pText->JSObject()->GetContent(false);
 
           FormValueNode_SetChildContent(pValue, wsContent, XFA_Element::Text);
         }
@@ -250,10 +250,10 @@
           break;
 
         wsValue = pWidgetData->NormalizeNumStr(wsValue);
-        pDataNode->JSNode()->SetAttributeValue(
+        pDataNode->JSObject()->SetAttributeValue(
             wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
         CXFA_Node* pValue =
-            pFormNode->JSNode()->GetProperty(0, XFA_Element::Value, true);
+            pFormNode->JSObject()->GetProperty(0, XFA_Element::Value, true);
         FormValueNode_SetChildContent(pValue, wsValue, XFA_Element::Float);
         break;
       }
@@ -262,18 +262,18 @@
         if (wsValue.IsEmpty())
           break;
 
-        pDataNode->JSNode()->SetAttributeValue(
+        pDataNode->JSObject()->SetAttributeValue(
             wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
         break;
     }
     return;
   }
 
-  WideString wsXMLValue = pDataNode->JSNode()->GetContent(false);
+  WideString wsXMLValue = pDataNode->JSObject()->GetContent(false);
   WideString wsNormalizeValue = pWidgetData->GetNormalizeDataValue(wsXMLValue);
 
-  pDataNode->JSNode()->SetAttributeValue(wsNormalizeValue, wsXMLValue, false,
-                                         false);
+  pDataNode->JSObject()->SetAttributeValue(wsNormalizeValue, wsXMLValue, false,
+                                           false);
   switch (eUIType) {
     case XFA_Element::ImageEdit: {
       FormValueNode_SetChildContent(defValueData.GetNode(), wsNormalizeValue,
@@ -287,8 +287,8 @@
         WideString wsContentType =
             pXMLDataElement->GetString(L"xfa:contentType");
         if (!wsContentType.IsEmpty()) {
-          pDataNode->JSNode()->SetCData(XFA_Attribute::ContentType,
-                                        wsContentType, false, false);
+          pDataNode->JSObject()->SetCData(XFA_Attribute::ContentType,
+                                          wsContentType, false, false);
           imageData.SetContentType(wsContentType);
         }
 
@@ -308,7 +308,7 @@
           wsNormalizeValue.clear();
 
           for (CXFA_Node* pNode : items) {
-            WideString wsItem = pNode->JSNode()->GetContent(false);
+            WideString wsItem = pNode->JSObject()->GetContent(false);
             if (single)
               wsItem += L"\n";
 
@@ -501,7 +501,7 @@
                                        CXFA_Node* pTemplateNode,
                                        std::vector<CXFA_Node*>* subforms) {
   WideString wsSubformName =
-      pTemplateNode->JSNode()->GetCData(XFA_Attribute::Name);
+      pTemplateNode->JSObject()->GetCData(XFA_Attribute::Name);
   WideString wsInstMgrNodeName = L"_" + wsSubformName;
   uint32_t dwInstNameHash =
       FX_HashCode_GetW(wsInstMgrNodeName.AsStringView(), false);
@@ -539,9 +539,9 @@
   CXFA_Node* pNewNode =
       pDocument->CreateNode(XFA_PacketType::Form, XFA_Element::InstanceManager);
   wsInstMgrNodeName =
-      L"_" + pTemplateNode->JSNode()->GetCData(XFA_Attribute::Name);
-  pNewNode->JSNode()->SetCData(XFA_Attribute::Name, wsInstMgrNodeName, false,
-                               false);
+      L"_" + pTemplateNode->JSObject()->GetCData(XFA_Attribute::Name);
+  pNewNode->JSObject()->SetCData(XFA_Attribute::Name, wsInstMgrNodeName, false,
+                                 false);
   pFormParent->InsertChild(pNewNode, nullptr);
   pNewNode->SetTemplateNode(pTemplateNode);
   return pNewNode;
@@ -598,7 +598,7 @@
         pCurTemplateNode->GetFirstChildByClass(XFA_Element::Bind);
     XFA_AttributeEnum eMatch =
         pTemplateNodeBind
-            ? pTemplateNodeBind->JSNode()->GetEnum(XFA_Attribute::Match)
+            ? pTemplateNodeBind->JSObject()->GetEnum(XFA_Attribute::Match)
             : XFA_AttributeEnum::Once;
     eBindMatch = eMatch;
     switch (eMatch) {
@@ -616,7 +616,7 @@
              XFA_FieldIsMultiListBox(pTemplateNodeBind))) {
           CXFA_Node* pGlobalBindNode = FindGlobalDataNode(
               pDocument,
-              pCurTemplateNode->JSNode()->GetCData(XFA_Attribute::Name),
+              pCurTemplateNode->JSObject()->GetCData(XFA_Attribute::Name),
               pDataScope, eMatchNodeType);
           if (!pGlobalBindNode) {
             pCurTemplateNode = pIterator->MoveToNext();
@@ -629,7 +629,7 @@
         bAccessedDataDOM = true;
         CXFA_Node* pOnceBindNode = FindOnceDataNode(
             pDocument,
-            pCurTemplateNode->JSNode()->GetCData(XFA_Attribute::Name),
+            pCurTemplateNode->JSObject()->GetCData(XFA_Attribute::Name),
             pDataScope, eMatchNodeType);
         if (!pOnceBindNode) {
           pCurTemplateNode = pIterator->MoveToNext();
@@ -642,7 +642,7 @@
         bAccessedDataDOM = true;
         CXFA_Node* pDataRefBindNode = FindDataRefDataNode(
             pDocument,
-            pTemplateNodeBind->JSNode()->GetCData(XFA_Attribute::Ref),
+            pTemplateNodeBind->JSObject()->GetCData(XFA_Attribute::Ref),
             pDataScope, eMatchNodeType, pTemplateNode, bForceBind, bUpLevel);
         if (pDataRefBindNode &&
             pDataRefBindNode->GetElementType() == eMatchNodeType) {
@@ -743,7 +743,7 @@
 
   XFA_AttributeEnum eRelation =
       eType == XFA_Element::SubformSet
-          ? pTemplateNode->JSNode()->GetEnum(XFA_Attribute::Relation)
+          ? pTemplateNode->JSObject()->GetEnum(XFA_Attribute::Relation)
           : XFA_AttributeEnum::Ordered;
   int32_t iCurRepeatIndex = 0;
   XFA_AttributeEnum eParentBindMatch = XFA_AttributeEnum::None;
@@ -1025,7 +1025,7 @@
   if (!pParentDDNode) {
     CXFA_Node* pDataNode =
         pDocument->CreateNode(XFA_PacketType::Datasets, eNodeType);
-    pDataNode->JSNode()->SetCData(XFA_Attribute::Name, wsName, false, false);
+    pDataNode->JSObject()->SetCData(XFA_Attribute::Name, wsName, false, false);
     pDataNode->CreateXMLMappingNode();
     pDataParent->InsertChild(pDataNode, nullptr);
     pDataNode->SetFlag(XFA_NodeFlag_Initialized, false);
@@ -1040,7 +1040,8 @@
       if (pDDGroupNode->GetElementType() != XFA_Element::DataGroup)
         continue;
 
-      pdfium::Optional<WideString> ns = pDDGroupNode->JSNode()->TryNamespace();
+      pdfium::Optional<WideString> ns =
+          pDDGroupNode->JSObject()->TryNamespace();
       if (!ns || *ns != L"http://ns.adobe.com/data-description/")
         continue;
     }
@@ -1054,13 +1055,13 @@
 
     CXFA_Node* pDataNode =
         pDocument->CreateNode(XFA_PacketType::Datasets, eNodeType);
-    pDataNode->JSNode()->SetCData(XFA_Attribute::Name, wsName, false, false);
+    pDataNode->JSObject()->SetCData(XFA_Attribute::Name, wsName, false, false);
     pDataNode->CreateXMLMappingNode();
     if (eNodeType == XFA_Element::DataValue &&
-        pDDNode->JSNode()->GetEnum(XFA_Attribute::Contains) ==
+        pDDNode->JSObject()->GetEnum(XFA_Attribute::Contains) ==
             XFA_AttributeEnum::MetaData) {
-      pDataNode->JSNode()->SetEnum(XFA_Attribute::Contains,
-                                   XFA_AttributeEnum::MetaData, false);
+      pDataNode->JSObject()->SetEnum(XFA_Attribute::Contains,
+                                     XFA_AttributeEnum::MetaData, false);
     }
     pDataParent->InsertChild(pDataNode, nullptr);
     pDataNode->SetDataDescriptionNode(pDDNode);
@@ -1086,7 +1087,7 @@
                       : nullptr;
     XFA_AttributeEnum eMatch =
         pTemplateNodeBind
-            ? pTemplateNodeBind->JSNode()->GetEnum(XFA_Attribute::Match)
+            ? pTemplateNodeBind->JSObject()->GetEnum(XFA_Attribute::Match)
             : XFA_AttributeEnum::Once;
     switch (eMatch) {
       case XFA_AttributeEnum::None:
@@ -1097,7 +1098,7 @@
         if (!bDataRef || bParentDataRef) {
           if (!pDataNode) {
             if (pFormNode->GetNameHash() != 0 &&
-                pFormNode->JSNode()->GetEnum(XFA_Attribute::Scope) !=
+                pFormNode->JSObject()->GetEnum(XFA_Attribute::Scope) !=
                     XFA_AttributeEnum::None) {
               XFA_Element eDataNodeType = (eType == XFA_Element::Subform ||
                                            XFA_FieldIsMultiListBox(pFormNode))
@@ -1106,7 +1107,7 @@
               pDataNode = MaybeCreateDataNode(
                   pDocument, pDataScope, eDataNodeType,
                   WideString(
-                      pFormNode->JSNode()->GetCData(XFA_Attribute::Name)));
+                      pFormNode->JSObject()->GetCData(XFA_Attribute::Name)));
               if (pDataNode)
                 CreateDataBinding(pFormNode, pDataNode, false);
             }
@@ -1139,7 +1140,7 @@
               pDataNode = MaybeCreateDataNode(
                   pDocument, pRecordNode, eDataNodeType,
                   WideString(
-                      pFormNode->JSNode()->GetCData(XFA_Attribute::Name)));
+                      pFormNode->JSObject()->GetCData(XFA_Attribute::Name)));
               if (pDataNode) {
                 CreateDataBinding(pFormNode, pDataNode, false);
                 RegisterGlobalBinding(pDocument, pFormNode->GetNameHash(),
@@ -1158,7 +1159,7 @@
         bParentDataRef = true;
         if (!pDataNode && bDataRef) {
           WideString wsRef =
-              pTemplateNodeBind->JSNode()->GetCData(XFA_Attribute::Ref);
+              pTemplateNodeBind->JSObject()->GetCData(XFA_Attribute::Ref);
           uint32_t dFlags =
               XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode;
           XFA_RESOLVENODE_RS rs;
@@ -1219,7 +1220,7 @@
           continue;
 
         pdfium::Optional<WideString> ns =
-            pDDGroupNode->JSNode()->TryNamespace();
+            pDDGroupNode->JSObject()->TryNamespace();
         if (!ns || *ns != L"http://ns.adobe.com/data-description/")
           continue;
       }
@@ -1379,15 +1380,15 @@
                                 L"http://www.xfa.org/schema/xfa-data/1.0/");
     pDatasetsRoot =
         CreateNode(XFA_PacketType::Datasets, XFA_Element::DataModel);
-    pDatasetsRoot->JSNode()->SetCData(XFA_Attribute::Name, L"datasets", false,
-                                      false);
+    pDatasetsRoot->JSObject()->SetCData(XFA_Attribute::Name, L"datasets", false,
+                                        false);
     m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode);
     m_pRootNode->InsertChild(pDatasetsRoot, nullptr);
     pDatasetsRoot->SetXMLMappingNode(pDatasetsXMLNode);
   }
   CXFA_Node *pDataRoot = nullptr, *pDDRoot = nullptr;
   WideString wsDatasetsURI =
-      pDatasetsRoot->JSNode()->TryNamespace().value_or(WideString());
+      pDatasetsRoot->JSObject()->TryNamespace().value_or(WideString());
   for (CXFA_Node* pChildNode =
            pDatasetsRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
        pChildNode;
@@ -1397,14 +1398,14 @@
 
     if (!pDDRoot && pChildNode->GetNameHash() == XFA_HASHCODE_DataDescription) {
       pdfium::Optional<WideString> namespaceURI =
-          pChildNode->JSNode()->TryNamespace();
+          pChildNode->JSObject()->TryNamespace();
       if (!namespaceURI)
         continue;
       if (*namespaceURI == L"http://ns.adobe.com/data-description/")
         pDDRoot = pChildNode;
     } else if (!pDataRoot && pChildNode->GetNameHash() == XFA_HASHCODE_Data) {
       pdfium::Optional<WideString> namespaceURI =
-          pChildNode->JSNode()->TryNamespace();
+          pChildNode->JSObject()->TryNamespace();
       if (!namespaceURI)
         continue;
       if (*namespaceURI == wsDatasetsURI)
@@ -1417,7 +1418,7 @@
   if (!pDataRoot) {
     CFX_XMLElement* pDataRootXMLNode = new CFX_XMLElement(L"xfa:data");
     pDataRoot = CreateNode(XFA_PacketType::Datasets, XFA_Element::DataGroup);
-    pDataRoot->JSNode()->SetCData(XFA_Attribute::Name, L"data", false, false);
+    pDataRoot->JSObject()->SetCData(XFA_Attribute::Name, L"data", false, false);
     pDataRoot->SetXMLMappingNode(pDataRootXMLNode);
     pDatasetsRoot->InsertChild(pDataRoot, nullptr);
   }
@@ -1446,7 +1447,7 @@
     bEmptyForm = true;
     pFormRoot = CreateNode(XFA_PacketType::Form, XFA_Element::Form);
     ASSERT(pFormRoot);
-    pFormRoot->JSNode()->SetCData(XFA_Attribute::Name, L"form", false, false);
+    pFormRoot->JSObject()->SetCData(XFA_Attribute::Name, L"form", false, false);
     m_pRootNode->InsertChild(pFormRoot, nullptr);
   } else {
     CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode>
@@ -1462,15 +1463,15 @@
   ASSERT(pSubformSetNode);
   if (!pDataTopLevel) {
     WideString wsFormName =
-        pSubformSetNode->JSNode()->GetCData(XFA_Attribute::Name);
+        pSubformSetNode->JSObject()->GetCData(XFA_Attribute::Name);
     WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form" : wsFormName);
     CFX_XMLElement* pDataTopLevelXMLNode =
         new CFX_XMLElement(wsDataTopLevelName);
 
     pDataTopLevel =
         CreateNode(XFA_PacketType::Datasets, XFA_Element::DataGroup);
-    pDataTopLevel->JSNode()->SetCData(XFA_Attribute::Name, wsDataTopLevelName,
-                                      false, false);
+    pDataTopLevel->JSObject()->SetCData(XFA_Attribute::Name, wsDataTopLevelName,
+                                        false, false);
     pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode);
     CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
     pDataRoot->InsertChild(pDataTopLevel, pBeforeNode);
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index 4dbed96..6706bb6 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -127,7 +127,7 @@
 
 bool ContentNodeNeedtoExport(CXFA_Node* pContentNode) {
   pdfium::Optional<WideString> wsContent =
-      pContentNode->JSNode()->TryContent(false, false);
+      pContentNode->JSObject()->TryContent(false, false);
   if (!wsContent)
     return false;
 
@@ -154,11 +154,11 @@
                    const WideString& wsName,
                    bool bProto,
                    WideString& wsOutput) {
-  if (!bProto && !pNode->JSNode()->HasAttribute(eName))
+  if (!bProto && !pNode->JSObject()->HasAttribute(eName))
     return;
 
   pdfium::Optional<WideString> value =
-      pNode->JSNode()->TryAttribute(eName, false);
+      pNode->JSObject()->TryAttribute(eName, false);
   if (!value)
     return;
 
@@ -205,7 +205,7 @@
         break;
 
       pdfium::Optional<WideString> contentType =
-          pNode->JSNode()->TryAttribute(XFA_Attribute::ContentType, false);
+          pNode->JSObject()->TryAttribute(XFA_Attribute::ContentType, false);
       if (pRawValueNode->GetElementType() == XFA_Element::SharpxHTML &&
           (contentType && *contentType == L"text/html")) {
         CFX_XMLNode* pExDataXML = pNode->GetXMLMappingNode();
@@ -228,7 +228,8 @@
       } else if (pRawValueNode->GetElementType() == XFA_Element::Sharpxml &&
                  (contentType && *contentType == L"text/xml")) {
         pdfium::Optional<WideString> rawValue =
-            pRawValueNode->JSNode()->TryAttribute(XFA_Attribute::Value, false);
+            pRawValueNode->JSObject()->TryAttribute(XFA_Attribute::Value,
+                                                    false);
         if (!rawValue || rawValue->IsEmpty())
           break;
 
@@ -251,7 +252,8 @@
             pParentNode->GetNodeItem(XFA_NODEITEM_Parent);
         ASSERT(pGrandparentNode);
         WideString bodyTagName;
-        bodyTagName = pGrandparentNode->JSNode()->GetCData(XFA_Attribute::Name);
+        bodyTagName =
+            pGrandparentNode->JSObject()->GetCData(XFA_Attribute::Name);
         if (bodyTagName.IsEmpty())
           bodyTagName = L"ListBox1";
 
@@ -271,7 +273,7 @@
         buf.Clear();
       } else {
         WideString wsValue =
-            pRawValueNode->JSNode()->GetCData(XFA_Attribute::Value);
+            pRawValueNode->JSObject()->GetCData(XFA_Attribute::Value);
         wsChildren += ExportEncodeContent(wsValue);
       }
       break;
@@ -279,7 +281,7 @@
     case XFA_ObjectType::TextNode:
     case XFA_ObjectType::NodeC:
     case XFA_ObjectType::NodeV: {
-      WideString wsValue = pNode->JSNode()->GetCData(XFA_Attribute::Value);
+      WideString wsValue = pNode->JSObject()->GetCData(XFA_Attribute::Value);
       wsChildren += ExportEncodeContent(wsValue);
       break;
     }
@@ -316,7 +318,7 @@
   }
 
   if (!wsChildren.IsEmpty() || !wsAttrs.IsEmpty() ||
-      pNode->JSNode()->HasAttribute(XFA_Attribute::Name)) {
+      pNode->JSObject()->HasAttribute(XFA_Attribute::Name)) {
     WideStringView wsElement = pNode->GetClassName();
     WideString wsName;
     SaveAttribute(pNode, XFA_Attribute::Name, L"name", true, wsName);
@@ -396,7 +398,7 @@
     return;
 
   pdfium::Optional<WideString> templateNS =
-      pTemplateRoot->JSNode()->TryNamespace();
+      pTemplateRoot->JSObject()->TryNamespace();
   if (!templateNS)
     return;
 
@@ -571,7 +573,7 @@
     CXFA_Node* pFirstChild = pUIChild->GetNodeItem(XFA_NODEITEM_FirstChild);
     if (pFirstChild &&
         pFirstChild->GetElementType() == XFA_Element::ChoiceList) {
-      bRet = pFirstChild->JSNode()->GetEnum(XFA_Attribute::Open) ==
+      bRet = pFirstChild->JSObject()->GetEnum(XFA_Attribute::Open) ==
              XFA_AttributeEnum::MultiSelect;
     }
   }