Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / TreeWalker.cpp
index fa09981..e85017a 100644 (file)
 #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());
@@ -71,18 +71,18 @@ Node* TreeWalker::parentNode(ScriptState* state)
     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;
                 }
@@ -104,11 +104,11 @@ Node* TreeWalker::firstChild(ScriptState* state)
     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:
@@ -137,15 +137,15 @@ Node* TreeWalker::lastChild(ScriptState* state)
     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:
@@ -166,30 +166,30 @@ Node* TreeWalker::previousSibling(ScriptState* state)
         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;
@@ -203,29 +203,29 @@ Node* TreeWalker::nextSibling(ScriptState* state)
         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;
@@ -241,8 +241,8 @@ Node* TreeWalker::previousNode(ScriptState* state)
         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());
@@ -250,14 +250,14 @@ Node* TreeWalker::previousNode(ScriptState* state)
     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());
@@ -266,8 +266,8 @@ Children:
     }
     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());
@@ -277,4 +277,10 @@ Children:
     return 0;
 }
 
-} // namespace WebCore
+void TreeWalker::trace(Visitor* visitor)
+{
+    visitor->trace(m_current);
+    NodeIteratorBase::trace(visitor);
+}
+
+} // namespace blink