diff options
author | Kristian Monsen <kristianm@google.com> | 2010-09-30 15:42:16 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-10-07 10:59:29 +0100 |
commit | bec39347bb3bb5bf1187ccaf471d26247f28b585 (patch) | |
tree | 56bdc4c2978fbfd3d79d0d36d5d6c640ecc09cc8 /WebCore/dom/NodeIterator.cpp | |
parent | 90b7966e7815b262cd19ac25f03aaad9b21fdc06 (diff) | |
download | external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.zip external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.tar.gz external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.tar.bz2 |
Merge WebKit at r68651 : Initial merge by git.
Change-Id: I3d6bff59f17eedd6722723354f386fec9be8ad12
Diffstat (limited to 'WebCore/dom/NodeIterator.cpp')
-rw-r--r-- | WebCore/dom/NodeIterator.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/WebCore/dom/NodeIterator.cpp b/WebCore/dom/NodeIterator.cpp index af07f42..ce3103c 100644 --- a/WebCore/dom/NodeIterator.cpp +++ b/WebCore/dom/NodeIterator.cpp @@ -76,12 +76,16 @@ NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned whatToShow, PassR , m_referenceNode(root(), true) , m_detached(false) { - root()->document()->attachNodeIterator(this); + // Document type nodes may have a null document. But since they can't have children, there is no need to listen for modifications to these. + ASSERT(root()->document() || root()->nodeType() == Node::DOCUMENT_TYPE_NODE); + if (Document* ownerDocument = root()->document()) + ownerDocument->attachNodeIterator(this); } NodeIterator::~NodeIterator() { - root()->document()->detachNodeIterator(this); + if (Document* ownerDocument = root()->document()) + ownerDocument->detachNodeIterator(this); } PassRefPtr<Node> NodeIterator::nextNode(ScriptState* state, ExceptionCode& ec) @@ -144,7 +148,8 @@ PassRefPtr<Node> NodeIterator::previousNode(ScriptState* state, ExceptionCode& e void NodeIterator::detach() { - root()->document()->detachNodeIterator(this); + if (Document* ownerDocument = root()->document()) + ownerDocument->detachNodeIterator(this); m_detached = true; m_referenceNode.node.clear(); } @@ -159,6 +164,7 @@ void NodeIterator::updateForNodeRemoval(Node* removedNode, NodePointer& referenc { ASSERT(!m_detached); ASSERT(removedNode); + ASSERT(root()->document()); ASSERT(root()->document() == removedNode->document()); // Iterator is not affected if the removed node is the reference node and is the root. |