Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / NodeIterator.h
index 1f06a57..01bcfe5 100644 (file)
 #ifndef NodeIterator_h
 #define NodeIterator_h
 
-#include "bindings/v8/ScriptWrappable.h"
+#include "bindings/core/v8/ScriptWrappable.h"
 #include "core/dom/NodeFilter.h"
-#include "core/dom/Traversal.h"
+#include "core/dom/NodeIteratorBase.h"
+#include "platform/heap/Handle.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 
-namespace WebCore {
+namespace blink {
 
 class ExceptionState;
 
-class NodeIterator : public ScriptWrappable, public RefCounted<NodeIterator>, public Traversal {
+class NodeIterator FINAL : public RefCountedWillBeGarbageCollected<NodeIterator>, public ScriptWrappable, public NodeIteratorBase {
+    DEFINE_WRAPPERTYPEINFO();
+    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(NodeIterator);
 public:
-    static PassRefPtr<NodeIterator> create(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter)
+    static PassRefPtrWillBeRawPtr<NodeIterator> create(PassRefPtrWillBeRawPtr<Node> rootNode, unsigned whatToShow, PassRefPtrWillBeRawPtr<NodeFilter> filter)
     {
-        return adoptRef(new NodeIterator(rootNode, whatToShow, filter));
+        return adoptRefWillBeNoop(new NodeIterator(rootNode, whatToShow, filter));
     }
+
+#if !ENABLE(OILPAN)
     ~NodeIterator();
+#endif
 
-    PassRefPtr<Node> nextNode(ScriptState*, ExceptionState&);
-    PassRefPtr<Node> previousNode(ScriptState*, ExceptionState&);
+    PassRefPtrWillBeRawPtr<Node> nextNode(ExceptionState&);
+    PassRefPtrWillBeRawPtr<Node> previousNode(ExceptionState&);
     void detach();
 
     Node* referenceNode() const { return m_referenceNode.node.get(); }
@@ -53,26 +59,36 @@ public:
     // This function is called before any node is removed from the document tree.
     void nodeWillBeRemoved(Node&);
 
+    virtual void trace(Visitor*) OVERRIDE;
+
 private:
-    NodeIterator(PassRefPtr<Node>, unsigned whatToShow, PassRefPtr<NodeFilter>);
+    NodeIterator(PassRefPtrWillBeRawPtr<Node>, unsigned whatToShow, PassRefPtrWillBeRawPtr<NodeFilter>);
 
-    struct NodePointer {
-        RefPtr<Node> node;
-        bool isPointerBeforeNode;
+    class NodePointer {
+        DISALLOW_ALLOCATION();
+    public:
         NodePointer();
-        NodePointer(PassRefPtr<Node>, bool);
+        NodePointer(PassRefPtrWillBeRawPtr<Node>, bool);
+
         void clear();
         bool moveToNext(Node* root);
         bool moveToPrevious(Node* root);
+
+        RefPtrWillBeMember<Node> node;
+        bool isPointerBeforeNode;
+
+        void trace(Visitor* visitor)
+        {
+            visitor->trace(node);
+        }
     };
 
     void updateForNodeRemoval(Node& nodeToBeRemoved, NodePointer&) const;
 
     NodePointer m_referenceNode;
     NodePointer m_candidateNode;
-    bool m_detached;
 };
 
-} // namespace WebCore
+} // namespace blink
 
 #endif // NodeIterator_h