#include "config.h"
#include "core/dom/TreeWalker.h"
-#include "bindings/v8/ExceptionState.h"
-#include "bindings/v8/ScriptState.h"
+#include "bindings/core/v8/ExceptionMessages.h"
+#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/ContainerNode.h"
#include "core/dom/ExceptionCode.h"
#include "core/dom/NodeTraversal.h"
-namespace WebCore {
+namespace blink {
-TreeWalker::TreeWalker(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter)
- : Traversal(rootNode, whatToShow, filter)
+TreeWalker::TreeWalker(PassRefPtrWillBeRawPtr<Node> rootNode, unsigned whatToShow, PassRefPtrWillBeRawPtr<NodeFilter> filter)
+ : NodeIteratorBase(rootNode, whatToShow, filter)
, m_current(root())
{
ScriptWrappable::init(this);
}
-void TreeWalker::setCurrentNode(PassRefPtr<Node> node, ExceptionState& exceptionState)
+void TreeWalker::setCurrentNode(PassRefPtrWillBeRawPtr<Node> node, ExceptionState& exceptionState)
{
if (!node) {
- exceptionState.throwDOMException(NotSupportedError, "The Node provided is invalid.");
+ exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::argumentNullOrIncorrectType(1, "Node"));
return;
}
m_current = node;
}
-inline Node* TreeWalker::setCurrent(PassRefPtr<Node> node)
+inline Node* TreeWalker::setCurrent(PassRefPtrWillBeRawPtr<Node> node)
{
m_current = node;
return m_current.get();
}
-Node* TreeWalker::parentNode(ScriptState* state)
+Node* TreeWalker::parentNode(ExceptionState& exceptionState)
{
- RefPtr<Node> node = m_current;
+ RefPtrWillBeRawPtr<Node> node = m_current;
while (node != root()) {
node = node->parentNode();
if (!node)
return 0;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return setCurrent(node.release());
return 0;
}
-Node* TreeWalker::firstChild(ScriptState* state)
+Node* TreeWalker::firstChild(ExceptionState& exceptionState)
{
- for (RefPtr<Node> node = m_current->firstChild(); node; ) {
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ for (RefPtrWillBeRawPtr<Node> node = m_current->firstChild(); node; ) {
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
switch (acceptNodeResult) {
case NodeFilter::FILTER_ACCEPT:
m_current = node.release();
return m_current.get();
case NodeFilter::FILTER_SKIP:
- if (node->firstChild()) {
+ if (node->hasChildren()) {
node = node->firstChild();
continue;
}
return 0;
}
-Node* TreeWalker::lastChild(ScriptState* state)
+Node* TreeWalker::lastChild(ExceptionState& exceptionState)
{
- for (RefPtr<Node> node = m_current->lastChild(); node; ) {
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ for (RefPtrWillBeRawPtr<Node> node = m_current->lastChild(); node; ) {
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
switch (acceptNodeResult) {
case NodeFilter::FILTER_ACCEPT:
return 0;
}
-Node* TreeWalker::previousSibling(ScriptState* state)
+Node* TreeWalker::previousSibling(ExceptionState& exceptionState)
{
- RefPtr<Node> node = m_current;
+ RefPtrWillBeRawPtr<Node> node = m_current;
if (node == root())
return 0;
while (1) {
- for (RefPtr<Node> sibling = node->previousSibling(); sibling; ) {
- short acceptNodeResult = acceptNode(state, sibling.get());
- if (state && state->hadException())
+ for (RefPtrWillBeRawPtr<Node> sibling = node->previousSibling(); sibling; ) {
+ short acceptNodeResult = acceptNode(sibling.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
switch (acceptNodeResult) {
case NodeFilter::FILTER_ACCEPT:
node = node->parentNode();
if (!node || node == root())
return 0;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return 0;
}
}
-Node* TreeWalker::nextSibling(ScriptState* state)
+Node* TreeWalker::nextSibling(ExceptionState& exceptionState)
{
- RefPtr<Node> node = m_current;
+ RefPtrWillBeRawPtr<Node> node = m_current;
if (node == root())
return 0;
while (1) {
- for (RefPtr<Node> sibling = node->nextSibling(); sibling; ) {
- short acceptNodeResult = acceptNode(state, sibling.get());
- if (state && state->hadException())
+ for (RefPtrWillBeRawPtr<Node> sibling = node->nextSibling(); sibling; ) {
+ short acceptNodeResult = acceptNode(sibling.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
switch (acceptNodeResult) {
case NodeFilter::FILTER_ACCEPT:
m_current = sibling.release();
return m_current.get();
case NodeFilter::FILTER_SKIP:
- if (sibling->firstChild()) {
+ if (sibling->hasChildren()) {
sibling = sibling->firstChild();
node = sibling;
continue;
node = node->parentNode();
if (!node || node == root())
return 0;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return 0;
}
}
-Node* TreeWalker::previousNode(ScriptState* state)
+Node* TreeWalker::previousNode(ExceptionState& exceptionState)
{
- RefPtr<Node> node = m_current;
+ RefPtrWillBeRawPtr<Node> node = m_current;
while (node != root()) {
while (Node* previousSibling = node->previousSibling()) {
node = previousSibling;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_REJECT)
continue;
while (Node* lastChild = node->lastChild()) {
node = lastChild;
- acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_REJECT)
break;
if (!parent)
return 0;
node = parent;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return setCurrent(node.release());
return 0;
}
-Node* TreeWalker::nextNode(ScriptState* state)
+Node* TreeWalker::nextNode(ExceptionState& exceptionState)
{
- RefPtr<Node> node = m_current;
+ RefPtrWillBeRawPtr<Node> node = m_current;
Children:
while (Node* firstChild = node->firstChild()) {
node = firstChild;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return setCurrent(node.release());
}
while (Node* nextSibling = NodeTraversal::nextSkippingChildren(*node, root())) {
node = nextSibling;
- short acceptNodeResult = acceptNode(state, node.get());
- if (state && state->hadException())
+ short acceptNodeResult = acceptNode(node.get(), exceptionState);
+ if (exceptionState.hadException())
return 0;
if (acceptNodeResult == NodeFilter::FILTER_ACCEPT)
return setCurrent(node.release());
return 0;
}
-} // namespace WebCore
+void TreeWalker::trace(Visitor* visitor)
+{
+ visitor->trace(m_current);
+ NodeIteratorBase::trace(visitor);
+}
+
+} // namespace blink