#include "config.h"
#include "TagNodeList.h"
#include "Element.h"
#include <wtf/Assertions.h>
namespace WebCore {
TagNodeList::TagNodeList(PassRefPtr<Node> rootNode, const AtomicString& namespaceURI, const AtomicString& localName)
: DynamicSubtreeNodeList(rootNode)
, m_namespaceURI(namespaceURI)
, m_localName(localName)
{
ASSERT(m_namespaceURI.isNull() || !m_namespaceURI.isEmpty());
}
TagNodeList::~TagNodeList()
{
if (m_namespaceURI == starAtom)
rootNode()->removeCachedTagNodeList(this, m_localName);
else
rootNode()->removeCachedTagNodeList(this, QualifiedName(nullAtom, m_localName, m_namespaceURI));
}
bool TagNodeList::nodeMatches(Element* testNode) const
{
if (m_localName != starAtom && m_localName != testNode->localName())
return false;
return m_namespaceURI == starAtom || m_namespaceURI == testNode->namespaceURI();
}
HTMLTagNodeList::HTMLTagNodeList(PassRefPtr<Node> rootNode, const AtomicString& namespaceURI, const AtomicString& localName)
: TagNodeList(rootNode, namespaceURI, localName)
, m_loweredLocalName(localName.lower())
{
}
bool HTMLTagNodeList::nodeMatches(Element* testNode) const
{
if (m_localName != starAtom) {
const AtomicString& localName = testNode->isHTMLElement() ? m_loweredLocalName : m_localName;
if (localName != testNode->localName())
return false;
}
return m_namespaceURI == starAtom || m_namespaceURI == testNode->namespaceURI();
}
}