diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h b/chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h index 46f5beab4b1..d3a871246cd 100644 --- a/chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h +++ b/chromium/third_party/WebKit/Source/core/dom/ChildNodeList.h @@ -3,6 +3,7 @@ * (C) 1999 Antti Koivisto (koivisto@kde.org) * (C) 2001 Dirk Mueller (mueller@kde.org) * Copyright (C) 2004, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2014 Samsung Electronics. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -24,26 +25,52 @@ #ifndef ChildNodeList_h #define ChildNodeList_h -#include "core/dom/LiveNodeList.h" +#include "core/dom/NodeList.h" +#include "core/html/CollectionIndexCache.h" #include "wtf/PassRefPtr.h" namespace WebCore { -class ChildNodeList FINAL : public LiveNodeList { +class ChildNodeList FINAL : public NodeList { public: - static PassRefPtr<ChildNodeList> create(PassRefPtr<Node> rootNode) + static PassRefPtrWillBeRawPtr<ChildNodeList> create(ContainerNode& rootNode) { - return adoptRef(new ChildNodeList(rootNode)); + return adoptRefWillBeNoop(new ChildNodeList(rootNode)); } virtual ~ChildNodeList(); -protected: - explicit ChildNodeList(PassRefPtr<Node> rootNode); + // DOM API. + virtual unsigned length() const OVERRIDE { return m_collectionIndexCache.nodeCount(*this); } + virtual Node* item(unsigned index) const OVERRIDE { return m_collectionIndexCache.nodeAt(*this, index); } - virtual bool nodeMatches(Element*) const OVERRIDE; + // Non-DOM API. + void invalidateCache() { m_collectionIndexCache.invalidate(); } + ContainerNode& ownerNode() const { return *m_parent; } + + ContainerNode& rootNode() const { return ownerNode(); } + + // CollectionIndexCache API. + bool canTraverseBackward() const { return true; } + Node* traverseToFirstElement() const { return rootNode().firstChild(); } + Node* traverseToLastElement() const { return rootNode().lastChild(); } + Node* traverseForwardToOffset(unsigned offset, Node& currentNode, unsigned& currentOffset) const; + Node* traverseBackwardToOffset(unsigned offset, Node& currentNode, unsigned& currentOffset) const; + + virtual void trace(Visitor*) OVERRIDE; + +private: + explicit ChildNodeList(ContainerNode& rootNode); + + virtual bool isChildNodeList() const OVERRIDE { return true; } + virtual Node* virtualOwnerNode() const OVERRIDE; + + RefPtrWillBeMember<ContainerNode> m_parent; + mutable CollectionIndexCache<ChildNodeList, Node> m_collectionIndexCache; }; +DEFINE_TYPE_CASTS(ChildNodeList, NodeList, nodeList, nodeList->isChildNodeList(), nodeList.isChildNodeList()); + } // namespace WebCore #endif // ChildNodeList_h |