From bec39347bb3bb5bf1187ccaf471d26247f28b585 Mon Sep 17 00:00:00 2001 From: Kristian Monsen Date: Thu, 30 Sep 2010 15:42:16 +0100 Subject: Merge WebKit at r68651 : Initial merge by git. Change-Id: I3d6bff59f17eedd6722723354f386fec9be8ad12 --- WebCore/dom/NodeIterator.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'WebCore/dom/NodeIterator.cpp') 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 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 NodeIterator::nextNode(ScriptState* state, ExceptionCode& ec) @@ -144,7 +148,8 @@ PassRefPtr 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. -- cgit v1.1