Make CXFA_NodeHelper::GetOneChildNamed() a member of CXFA_Node.

Do the same for GetOneChildOfClass().

Change-Id: Ia7e2081b147add750145b17bd6391c668e2d1c5c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52372
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index 92de697..0426d5a 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -119,23 +119,22 @@
 }
 
 bool CFXJSE_ResolveProcessor::ResolveAnyChild(CFXJSE_ResolveNodeData& rnd) {
+  CXFA_Node* pParent = ToNode(rnd.m_CurObject.Get());
+  if (!pParent)
+    return false;
+
   WideStringView wsName = rnd.m_wsName.AsStringView();
   WideString wsCondition = rnd.m_wsCondition;
-  CXFA_Node* findNode = nullptr;
-  bool bClassName = false;
-  if (wsName.GetLength() && wsName[0] == '#') {
-    bClassName = true;
-    findNode = CXFA_NodeHelper::GetOneChildOfClass(
-        ToNode(rnd.m_CurObject.Get()), wsName.Right(wsName.GetLength() - 1));
-  } else {
-    findNode = CXFA_NodeHelper::GetOneChildNamed(ToNode(rnd.m_CurObject.Get()),
-                                                 wsName);
-  }
-  if (!findNode)
+  const bool bClassName = !wsName.IsEmpty() && wsName[0] == '#';
+  CXFA_Node* pChild =
+      bClassName
+          ? pParent->GetOneChildOfClass(wsName.Right(wsName.GetLength() - 1))
+          : pParent->GetOneChildNamed(wsName);
+  if (!pChild)
     return false;
 
   if (wsCondition.IsEmpty()) {
-    rnd.m_Objects.emplace_back(findNode);
+    rnd.m_Objects.emplace_back(pChild);
     return true;
   }
 
@@ -144,7 +143,7 @@
     nodes.push_back(pObject->AsNode());
 
   std::vector<CXFA_Node*> siblings =
-      CXFA_NodeHelper::GetSiblings(findNode, XFA_LOGIC_Transparent, bClassName);
+      CXFA_NodeHelper::GetSiblings(pChild, XFA_LOGIC_Transparent, bClassName);
   nodes.insert(nodes.end(), siblings.begin(), siblings.end());
   rnd.m_Objects =
       std::vector<UnownedPtr<CXFA_Object>>(nodes.begin(), nodes.end());
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 4c0d7d0..851532a 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -695,6 +695,61 @@
   return wsOutput;
 }
 
+CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
+                                       uint32_t dwNameHash,
+                                       uint32_t dwFilter);
+CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
+                                         XFA_Element element,
+                                         uint32_t dwFilter);
+
+CXFA_Node* FindFirstSiblingNamed(CXFA_Node* parent, uint32_t dwNameHash) {
+  CXFA_Node* result = FindFirstSiblingNamedInList(parent, dwNameHash,
+                                                  XFA_NODEFILTER_Properties);
+  if (result)
+    return result;
+
+  return FindFirstSiblingNamedInList(parent, dwNameHash,
+                                     XFA_NODEFILTER_Children);
+}
+
+CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
+                                       uint32_t dwNameHash,
+                                       uint32_t dwFilter) {
+  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
+    if (child->GetNameHash() == dwNameHash)
+      return child;
+
+    CXFA_Node* result = FindFirstSiblingNamed(child, dwNameHash);
+    if (result)
+      return result;
+  }
+  return nullptr;
+}
+
+CXFA_Node* FindFirstSiblingOfClass(CXFA_Node* parent, XFA_Element element) {
+  CXFA_Node* result =
+      FindFirstSiblingOfClassInList(parent, element, XFA_NODEFILTER_Properties);
+  if (result)
+    return result;
+
+  return FindFirstSiblingOfClassInList(parent, element,
+                                       XFA_NODEFILTER_Children);
+}
+
+CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
+                                         XFA_Element element,
+                                         uint32_t dwFilter) {
+  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
+    if (child->GetElementType() == element)
+      return child;
+
+    CXFA_Node* result = FindFirstSiblingOfClass(child, element);
+    if (result)
+      return result;
+  }
+  return nullptr;
+}
+
 }  // namespace
 
 class CXFA_WidgetLayoutData {
@@ -1562,6 +1617,18 @@
   return nullptr;
 }
 
+CXFA_Node* CXFA_Node::GetOneChildNamed(WideStringView wsName) {
+  return FindFirstSiblingNamed(this, FX_HashCode_GetW(wsName, false));
+}
+
+CXFA_Node* CXFA_Node::GetOneChildOfClass(WideStringView wsClass) {
+  XFA_Element element = XFA_GetElementByName(wsClass);
+  if (element == XFA_Element::Unknown)
+    return nullptr;
+
+  return FindFirstSiblingOfClass(this, element);
+}
+
 CXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() {
   CXFA_Node* pInstanceMgr = nullptr;
   if (m_ePacket == XFA_PacketType::Form) {
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index d886d9f..e7767af 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -214,6 +214,9 @@
     return static_cast<T*>(GetNextSameClassSiblingInternal(eType));
   }
 
+  CXFA_Node* GetOneChildNamed(WideStringView wsName);
+  CXFA_Node* GetOneChildOfClass(WideStringView wsClass);
+
   CXFA_Node* GetInstanceMgrOfSubform();
 
   Optional<bool> GetDefaultBoolean(XFA_Attribute attr) const;
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index 8f72acf..b99e3f6 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -20,61 +20,6 @@
 
 namespace {
 
-CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
-                                       uint32_t dwNameHash,
-                                       uint32_t dwFilter);
-CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
-                                         XFA_Element element,
-                                         uint32_t dwFilter);
-
-CXFA_Node* FindFirstSiblingNamed(CXFA_Node* parent, uint32_t dwNameHash) {
-  CXFA_Node* result = FindFirstSiblingNamedInList(parent, dwNameHash,
-                                                  XFA_NODEFILTER_Properties);
-  if (result)
-    return result;
-
-  return FindFirstSiblingNamedInList(parent, dwNameHash,
-                                     XFA_NODEFILTER_Children);
-}
-
-CXFA_Node* FindFirstSiblingNamedInList(CXFA_Node* parent,
-                                       uint32_t dwNameHash,
-                                       uint32_t dwFilter) {
-  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
-    if (child->GetNameHash() == dwNameHash)
-      return child;
-
-    CXFA_Node* result = FindFirstSiblingNamed(child, dwNameHash);
-    if (result)
-      return result;
-  }
-  return nullptr;
-}
-
-CXFA_Node* FindFirstSiblingOfClass(CXFA_Node* parent, XFA_Element element) {
-  CXFA_Node* result =
-      FindFirstSiblingOfClassInList(parent, element, XFA_NODEFILTER_Properties);
-  if (result)
-    return result;
-
-  return FindFirstSiblingOfClassInList(parent, element,
-                                       XFA_NODEFILTER_Children);
-}
-
-CXFA_Node* FindFirstSiblingOfClassInList(CXFA_Node* parent,
-                                         XFA_Element element,
-                                         uint32_t dwFilter) {
-  for (CXFA_Node* child : parent->GetNodeList(dwFilter, XFA_Element::Unknown)) {
-    if (child->GetElementType() == element)
-      return child;
-
-    CXFA_Node* result = FindFirstSiblingOfClass(child, element);
-    if (result)
-      return result;
-  }
-  return nullptr;
-}
-
 void TraverseSiblings(CXFA_Node* parent,
                       uint32_t dwNameHash,
                       std::vector<CXFA_Node*>* pSiblings,
@@ -171,27 +116,6 @@
 CXFA_NodeHelper::~CXFA_NodeHelper() = default;
 
 // static
-CXFA_Node* CXFA_NodeHelper::GetOneChildNamed(CXFA_Node* parent,
-                                             WideStringView wsName) {
-  if (!parent)
-    return nullptr;
-  return FindFirstSiblingNamed(parent, FX_HashCode_GetW(wsName, false));
-}
-
-// static
-CXFA_Node* CXFA_NodeHelper::GetOneChildOfClass(CXFA_Node* parent,
-                                               WideStringView wsClass) {
-  if (!parent)
-    return nullptr;
-
-  XFA_Element element = XFA_GetElementByName(wsClass);
-  if (element == XFA_Element::Unknown)
-    return nullptr;
-
-  return FindFirstSiblingOfClass(parent, element);
-}
-
-// static
 std::vector<CXFA_Node*> CXFA_NodeHelper::GetSiblings(CXFA_Node* pNode,
                                                      XFA_LOGIC_TYPE eLogicType,
                                                      bool bIsClassName) {
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.h b/xfa/fxfa/parser/cxfa_nodehelper.h
index c04178c..d4f973e 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.h
+++ b/xfa/fxfa/parser/cxfa_nodehelper.h
@@ -26,10 +26,6 @@
   CXFA_NodeHelper();
   ~CXFA_NodeHelper();
 
-  static CXFA_Node* GetOneChildNamed(CXFA_Node* parent, WideStringView wsName);
-  static CXFA_Node* GetOneChildOfClass(CXFA_Node* parent,
-                                       WideStringView wsClass);
-
   static std::vector<CXFA_Node*> GetSiblings(CXFA_Node* pNode,
                                              XFA_LOGIC_TYPE eLogicType,
                                              bool bIsClassName);