summaryrefslogtreecommitdiff
path: root/Source/WebCore/inspector/InspectorNodeFinder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/InspectorNodeFinder.cpp')
-rw-r--r--Source/WebCore/inspector/InspectorNodeFinder.cpp85
1 files changed, 41 insertions, 44 deletions
diff --git a/Source/WebCore/inspector/InspectorNodeFinder.cpp b/Source/WebCore/inspector/InspectorNodeFinder.cpp
index 34bea3723..59583a902 100644
--- a/Source/WebCore/inspector/InspectorNodeFinder.cpp
+++ b/Source/WebCore/inspector/InspectorNodeFinder.cpp
@@ -13,7 +13,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -33,17 +33,17 @@
#include "InspectorNodeFinder.h"
#include "Attr.h"
-#include "Attribute.h"
#include "Document.h"
#include "Element.h"
#include "HTMLFrameOwnerElement.h"
#include "NodeList.h"
#include "NodeTraversal.h"
+#include "XPathNSResolver.h"
#include "XPathResult.h"
namespace WebCore {
-static String stripCharacters(String string, const char startCharacter, const char endCharacter, bool& startCharFound, bool& endCharFound)
+static String stripCharacters(const String& string, const char startCharacter, const char endCharacter, bool& startCharFound, bool& endCharFound)
{
startCharFound = string.startsWith(startCharacter);
endCharFound = string.endsWith(endCharacter);
@@ -53,7 +53,7 @@ static String stripCharacters(String string, const char startCharacter, const ch
return string.substring(start, end - start);
}
-InspectorNodeFinder::InspectorNodeFinder(String whitespaceTrimmedQuery)
+InspectorNodeFinder::InspectorNodeFinder(const String& whitespaceTrimmedQuery)
: m_whitespaceTrimmedQuery(whitespaceTrimmedQuery)
{
m_tagNameQuery = stripCharacters(whitespaceTrimmedQuery, '<', '>', m_startTagFound, m_endTagFound);
@@ -65,38 +65,33 @@ InspectorNodeFinder::InspectorNodeFinder(String whitespaceTrimmedQuery)
void InspectorNodeFinder::performSearch(Node* parentNode)
{
- searchUsingXPath(parentNode);
- searchUsingCSSSelectors(parentNode);
+ if (!parentNode)
+ return;
+
+ searchUsingXPath(*parentNode);
+ searchUsingCSSSelectors(*parentNode);
// Keep the DOM tree traversal last. This way iframe content will come after their parents.
- searchUsingDOMTreeTraversal(parentNode);
+ searchUsingDOMTreeTraversal(*parentNode);
}
-void InspectorNodeFinder::searchUsingDOMTreeTraversal(Node* parentNode)
+void InspectorNodeFinder::searchUsingDOMTreeTraversal(Node& parentNode)
{
// Manual plain text search.
- for (auto node = parentNode; node; node = NodeTraversal::next(node, parentNode)) {
+ for (auto* node = &parentNode; node; node = NodeTraversal::next(*node, &parentNode)) {
switch (node->nodeType()) {
case Node::TEXT_NODE:
case Node::COMMENT_NODE:
- case Node::CDATA_SECTION_NODE: {
- if (node->nodeValue().findIgnoringCase(m_whitespaceTrimmedQuery) != notFound)
+ case Node::CDATA_SECTION_NODE:
+ if (node->nodeValue().containsIgnoringASCIICase(m_whitespaceTrimmedQuery))
m_results.add(node);
break;
- }
- case Node::ELEMENT_NODE: {
- if (matchesElement(*toElement(node)))
+ case Node::ELEMENT_NODE:
+ if (matchesElement(downcast<Element>(*node)))
m_results.add(node);
-
- // Search inside frame elements.
- if (node->isFrameOwnerElement()) {
- HTMLFrameOwnerElement* frameOwner = toHTMLFrameOwnerElement(node);
- if (Document* document = frameOwner->contentDocument())
- performSearch(document);
- }
-
+ if (is<HTMLFrameOwnerElement>(downcast<Element>(*node)))
+ performSearch(downcast<HTMLFrameOwnerElement>(*node).contentDocument());
break;
- }
default:
break;
}
@@ -105,16 +100,16 @@ void InspectorNodeFinder::searchUsingDOMTreeTraversal(Node* parentNode)
bool InspectorNodeFinder::matchesAttribute(const Attribute& attribute)
{
- if (attribute.localName().find(m_whitespaceTrimmedQuery) != notFound)
+ if (attribute.localName().string().containsIgnoringASCIICase(m_whitespaceTrimmedQuery))
return true;
- return m_exactAttributeMatch ? attribute.value() == m_attributeQuery : attribute.value().find(m_attributeQuery) != notFound;
+ return m_exactAttributeMatch ? attribute.value() == m_attributeQuery : attribute.value().string().containsIgnoringASCIICase(m_attributeQuery);
}
bool InspectorNodeFinder::matchesElement(const Element& element)
{
String nodeName = element.nodeName();
- if ((!m_startTagFound && !m_endTagFound && (nodeName.findIgnoringCase(m_tagNameQuery) != notFound))
- || (m_startTagFound && m_endTagFound && equalIgnoringCase(nodeName, m_tagNameQuery))
+ if ((!m_startTagFound && !m_endTagFound && nodeName.containsIgnoringASCIICase(m_tagNameQuery))
+ || (m_startTagFound && m_endTagFound && equalIgnoringASCIICase(nodeName, m_tagNameQuery))
|| (m_startTagFound && !m_endTagFound && nodeName.startsWith(m_tagNameQuery, false))
|| (!m_startTagFound && m_endTagFound && nodeName.endsWith(m_tagNameQuery, false)))
return true;
@@ -130,41 +125,43 @@ bool InspectorNodeFinder::matchesElement(const Element& element)
return false;
}
-void InspectorNodeFinder::searchUsingXPath(Node* parentNode)
+void InspectorNodeFinder::searchUsingXPath(Node& parentNode)
{
- ExceptionCode ec = 0;
- RefPtr<XPathResult> result = parentNode->document().evaluate(m_whitespaceTrimmedQuery, parentNode, nullptr, XPathResult::ORDERED_NODE_SNAPSHOT_TYPE, nullptr, ec);
- if (ec || !result)
+ auto evaluateResult = parentNode.document().evaluate(m_whitespaceTrimmedQuery, &parentNode, nullptr, XPathResult::ORDERED_NODE_SNAPSHOT_TYPE, nullptr);
+ if (evaluateResult.hasException())
return;
+ auto result = evaluateResult.releaseReturnValue();
- unsigned long size = result->snapshotLength(ec);
- if (ec)
+ auto snapshotLengthResult = result->snapshotLength();
+ if (snapshotLengthResult.hasException())
return;
+ unsigned size = snapshotLengthResult.releaseReturnValue();
- for (unsigned long i = 0; i < size; ++i) {
- Node* node = result->snapshotItem(i, ec);
- if (ec)
+ for (unsigned i = 0; i < size; ++i) {
+ auto snapshotItemResult = result->snapshotItem(i);
+ if (snapshotItemResult.hasException())
return;
+ Node* node = snapshotItemResult.releaseReturnValue();
- if (node->isAttributeNode())
- node = toAttr(node)->ownerElement();
+ if (is<Attr>(*node))
+ node = downcast<Attr>(*node).ownerElement();
// XPath can get out of the context node that we pass as the starting point to evaluate, so we need to filter for just the nodes we care about.
- if (node == parentNode || node->isDescendantOf(parentNode))
+ if (parentNode.contains(node))
m_results.add(node);
}
}
-void InspectorNodeFinder::searchUsingCSSSelectors(Node* parentNode)
+void InspectorNodeFinder::searchUsingCSSSelectors(Node& parentNode)
{
- if (!parentNode->isContainerNode())
+ if (!is<ContainerNode>(parentNode))
return;
- ExceptionCode ec = 0;
- RefPtr<NodeList> nodeList = toContainerNode(parentNode)->querySelectorAll(m_whitespaceTrimmedQuery, ec);
- if (ec || !nodeList)
+ auto queryResult = downcast<ContainerNode>(parentNode).querySelectorAll(m_whitespaceTrimmedQuery);
+ if (queryResult.hasException())
return;
+ auto nodeList = queryResult.releaseReturnValue();
unsigned size = nodeList->length();
for (unsigned i = 0; i < size; ++i)
m_results.add(nodeList->item(i));