| Index: Source/core/dom/ContainerNodeAlgorithms.h
|
| diff --git a/Source/core/dom/ContainerNodeAlgorithms.h b/Source/core/dom/ContainerNodeAlgorithms.h
|
| index a6683fd2e0a12c3b83c3bf236c687c41b8620eea..9224393aa1cd987931b2578dc771b805d022bc9f 100644
|
| --- a/Source/core/dom/ContainerNodeAlgorithms.h
|
| +++ b/Source/core/dom/ContainerNodeAlgorithms.h
|
| @@ -31,52 +31,52 @@ namespace WebCore {
|
|
|
| class ChildNodeInsertionNotifier {
|
| public:
|
| - explicit ChildNodeInsertionNotifier(ContainerNode* insertionPoint)
|
| + explicit ChildNodeInsertionNotifier(ContainerNode& insertionPoint)
|
| : m_insertionPoint(insertionPoint)
|
| {
|
| }
|
|
|
| - void notify(Node*);
|
| + void notify(Node&);
|
|
|
| private:
|
| - void notifyDescendantInsertedIntoDocument(ContainerNode*);
|
| - void notifyDescendantInsertedIntoTree(ContainerNode*);
|
| - void notifyNodeInsertedIntoDocument(Node*);
|
| - void notifyNodeInsertedIntoTree(ContainerNode*);
|
| + void notifyDescendantInsertedIntoDocument(ContainerNode&);
|
| + void notifyDescendantInsertedIntoTree(ContainerNode&);
|
| + void notifyNodeInsertedIntoDocument(Node&);
|
| + void notifyNodeInsertedIntoTree(ContainerNode&);
|
|
|
| - ContainerNode* m_insertionPoint;
|
| + ContainerNode& m_insertionPoint;
|
| Vector< RefPtr<Node> > m_postInsertionNotificationTargets;
|
| };
|
|
|
| class ChildNodeRemovalNotifier {
|
| public:
|
| - explicit ChildNodeRemovalNotifier(ContainerNode* insertionPoint)
|
| + explicit ChildNodeRemovalNotifier(ContainerNode& insertionPoint)
|
| : m_insertionPoint(insertionPoint)
|
| {
|
| }
|
|
|
| - void notify(Node*);
|
| + void notify(Node&);
|
|
|
| private:
|
| - void notifyDescendantRemovedFromDocument(ContainerNode*);
|
| - void notifyDescendantRemovedFromTree(ContainerNode*);
|
| - void notifyNodeRemovedFromDocument(Node*);
|
| - void notifyNodeRemovedFromTree(ContainerNode*);
|
| + void notifyDescendantRemovedFromDocument(ContainerNode&);
|
| + void notifyDescendantRemovedFromTree(ContainerNode&);
|
| + void notifyNodeRemovedFromDocument(Node&);
|
| + void notifyNodeRemovedFromTree(ContainerNode&);
|
|
|
| - ContainerNode* m_insertionPoint;
|
| + ContainerNode& m_insertionPoint;
|
| };
|
|
|
| namespace Private {
|
|
|
| template<class GenericNode, class GenericNodeContainer>
|
| - void addChildNodesToDeletionQueue(GenericNode*& head, GenericNode*& tail, GenericNodeContainer*);
|
| + void addChildNodesToDeletionQueue(GenericNode*& head, GenericNode*& tail, GenericNodeContainer&);
|
|
|
| }
|
|
|
| // Helper functions for TreeShared-derived classes, which have a 'Node' style interface
|
| // This applies to 'ContainerNode' and 'SVGElementInstance'
|
| template<class GenericNode, class GenericNodeContainer>
|
| -inline void removeDetachedChildrenInContainer(GenericNodeContainer* container)
|
| +inline void removeDetachedChildrenInContainer(GenericNodeContainer& container)
|
| {
|
| // List of nodes to be deleted.
|
| GenericNode* head = 0;
|
| @@ -97,25 +97,26 @@ inline void removeDetachedChildrenInContainer(GenericNodeContainer* container)
|
| tail = 0;
|
|
|
| if (n->hasChildNodes())
|
| - Private::addChildNodesToDeletionQueue<GenericNode, GenericNodeContainer>(head, tail, static_cast<GenericNodeContainer*>(n));
|
| + Private::addChildNodesToDeletionQueue<GenericNode, GenericNodeContainer>(head, tail, static_cast<GenericNodeContainer&>(*n));
|
|
|
| delete n;
|
| }
|
| }
|
|
|
| template<class GenericNode, class GenericNodeContainer>
|
| -inline void appendChildToContainer(GenericNode* child, GenericNodeContainer* container)
|
| +inline void appendChildToContainer(GenericNode& child, GenericNodeContainer& container)
|
| {
|
| - child->setParentOrShadowHostNode(container);
|
| + child.setParentOrShadowHostNode(&container);
|
|
|
| - GenericNode* lastChild = container->lastChild();
|
| + GenericNode* lastChild = container.lastChild();
|
| if (lastChild) {
|
| - child->setPreviousSibling(lastChild);
|
| - lastChild->setNextSibling(child);
|
| - } else
|
| - container->setFirstChild(child);
|
| + child.setPreviousSibling(lastChild);
|
| + lastChild->setNextSibling(&child);
|
| + } else {
|
| + container.setFirstChild(&child);
|
| + }
|
|
|
| - container->setLastChild(child);
|
| + container.setLastChild(&child);
|
| }
|
|
|
| // Helper methods for removeDetachedChildrenInContainer, hidden from WebCore namespace
|
| @@ -123,7 +124,7 @@ namespace Private {
|
|
|
| template<class GenericNode, class GenericNodeContainer, bool dispatchRemovalNotification>
|
| struct NodeRemovalDispatcher {
|
| - static void dispatch(GenericNode*, GenericNodeContainer*)
|
| + static void dispatch(GenericNode&, GenericNodeContainer&)
|
| {
|
| // no-op, by default
|
| }
|
| @@ -131,12 +132,12 @@ namespace Private {
|
|
|
| template<class GenericNode, class GenericNodeContainer>
|
| struct NodeRemovalDispatcher<GenericNode, GenericNodeContainer, true> {
|
| - static void dispatch(GenericNode* node, GenericNodeContainer* container)
|
| + static void dispatch(GenericNode& node, GenericNodeContainer& container)
|
| {
|
| // Clean up any TreeScope to a removed tree.
|
| - if (Document* containerDocument = container->ownerDocument())
|
| - containerDocument->adoptIfNeeded(node);
|
| - if (node->inDocument())
|
| + if (Document* containerDocument = container.ownerDocument())
|
| + containerDocument->adoptIfNeeded(&node);
|
| + if (node.inDocument())
|
| ChildNodeRemovalNotifier(container).notify(node);
|
| }
|
| };
|
| @@ -152,17 +153,17 @@ namespace Private {
|
| };
|
|
|
| template<class GenericNode, class GenericNodeContainer>
|
| - void addChildNodesToDeletionQueue(GenericNode*& head, GenericNode*& tail, GenericNodeContainer* container)
|
| + void addChildNodesToDeletionQueue(GenericNode*& head, GenericNode*& tail, GenericNodeContainer& container)
|
| {
|
| // We have to tell all children that their parent has died.
|
| GenericNode* next = 0;
|
| - for (GenericNode* n = container->firstChild(); n != 0; n = next) {
|
| + for (GenericNode* n = container.firstChild(); n; n = next) {
|
| ASSERT_WITH_SECURITY_IMPLICATION(!n->m_deletionHasBegun);
|
|
|
| next = n->nextSibling();
|
| n->setNextSibling(0);
|
| n->setParentOrShadowHostNode(0);
|
| - container->setFirstChild(next);
|
| + container.setFirstChild(next);
|
| if (next)
|
| next->setPreviousSibling(0);
|
|
|
| @@ -180,47 +181,47 @@ namespace Private {
|
| tail = n;
|
| } else {
|
| RefPtr<GenericNode> protect(n); // removedFromDocument may remove remove all references to this node.
|
| - NodeRemovalDispatcher<GenericNode, GenericNodeContainer, ShouldDispatchRemovalNotification<GenericNode>::value>::dispatch(n, container);
|
| + NodeRemovalDispatcher<GenericNode, GenericNodeContainer, ShouldDispatchRemovalNotification<GenericNode>::value>::dispatch(*n, container);
|
| }
|
| }
|
|
|
| - container->setLastChild(0);
|
| + container.setLastChild(0);
|
| }
|
|
|
| } // namespace Private
|
|
|
| -inline void ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument(Node* node)
|
| +inline void ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument(Node& node)
|
| {
|
| - ASSERT(m_insertionPoint->inDocument());
|
| + ASSERT(m_insertionPoint.inDocument());
|
| RefPtr<Node> protect(node);
|
| - if (Node::InsertionShouldCallDidNotifySubtreeInsertions == node->insertedInto(m_insertionPoint))
|
| - m_postInsertionNotificationTargets.append(node);
|
| - if (node->isContainerNode())
|
| + if (Node::InsertionShouldCallDidNotifySubtreeInsertions == node.insertedInto(&m_insertionPoint))
|
| + m_postInsertionNotificationTargets.append(&node);
|
| + if (node.isContainerNode())
|
| notifyDescendantInsertedIntoDocument(toContainerNode(node));
|
| }
|
|
|
| -inline void ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree(ContainerNode* node)
|
| +inline void ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree(ContainerNode& node)
|
| {
|
| NoEventDispatchAssertion assertNoEventDispatch;
|
| - ASSERT(!m_insertionPoint->inDocument());
|
| + ASSERT(!m_insertionPoint.inDocument());
|
|
|
| - if (Node::InsertionShouldCallDidNotifySubtreeInsertions == node->insertedInto(m_insertionPoint))
|
| - m_postInsertionNotificationTargets.append(node);
|
| + if (Node::InsertionShouldCallDidNotifySubtreeInsertions == node.insertedInto(&m_insertionPoint))
|
| + m_postInsertionNotificationTargets.append(&node);
|
| notifyDescendantInsertedIntoTree(node);
|
| }
|
|
|
| -inline void ChildNodeInsertionNotifier::notify(Node* node)
|
| +inline void ChildNodeInsertionNotifier::notify(Node& node)
|
| {
|
| ASSERT(!NoEventDispatchAssertion::isEventDispatchForbidden());
|
|
|
| - InspectorInstrumentation::didInsertDOMNode(node);
|
| + InspectorInstrumentation::didInsertDOMNode(&node);
|
|
|
| - RefPtr<Document> protectDocument(node->document());
|
| + RefPtr<Document> protectDocument(node.document());
|
| RefPtr<Node> protectNode(node);
|
|
|
| - if (m_insertionPoint->inDocument())
|
| + if (m_insertionPoint.inDocument())
|
| notifyNodeInsertedIntoDocument(node);
|
| - else if (node->isContainerNode())
|
| + else if (node.isContainerNode())
|
| notifyNodeInsertedIntoTree(toContainerNode(node));
|
|
|
| // Script runs in didNotifySubtreeInsertions so we should lazy attach before
|
| @@ -228,40 +229,40 @@ inline void ChildNodeInsertionNotifier::notify(Node* node)
|
| // were inserted.
|
| // FIXME: We should merge the lazy attach logic into the tree traversal in
|
| // notifyNodeInsertedIntoDocument.
|
| - if (!node->confusingAndOftenMisusedAttached() && node->parentNode() && node->parentNode()->confusingAndOftenMisusedAttached())
|
| - node->lazyAttach();
|
| + if (!node.confusingAndOftenMisusedAttached() && node.parentNode() && node.parentNode()->confusingAndOftenMisusedAttached())
|
| + node.lazyAttach();
|
|
|
| for (size_t i = 0; i < m_postInsertionNotificationTargets.size(); ++i) {
|
| - Node* node = m_postInsertionNotificationTargets[i].get();
|
| - if (node->inDocument())
|
| - node->didNotifySubtreeInsertionsToDocument();
|
| + Node* targetNode = m_postInsertionNotificationTargets[i].get();
|
| + if (targetNode->inDocument())
|
| + targetNode->didNotifySubtreeInsertionsToDocument();
|
| }
|
| }
|
|
|
| -inline void ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument(Node* node)
|
| +inline void ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument(Node& node)
|
| {
|
| - ASSERT(m_insertionPoint->inDocument());
|
| - node->removedFrom(m_insertionPoint);
|
| + ASSERT(m_insertionPoint.inDocument());
|
| + node.removedFrom(&m_insertionPoint);
|
|
|
| - if (node->isContainerNode())
|
| + if (node.isContainerNode())
|
| notifyDescendantRemovedFromDocument(toContainerNode(node));
|
| }
|
|
|
| -inline void ChildNodeRemovalNotifier::notifyNodeRemovedFromTree(ContainerNode* node)
|
| +inline void ChildNodeRemovalNotifier::notifyNodeRemovedFromTree(ContainerNode& node)
|
| {
|
| NoEventDispatchAssertion assertNoEventDispatch;
|
| - ASSERT(!m_insertionPoint->inDocument());
|
| + ASSERT(!m_insertionPoint.inDocument());
|
|
|
| - node->removedFrom(m_insertionPoint);
|
| + node.removedFrom(&m_insertionPoint);
|
| notifyDescendantRemovedFromTree(node);
|
| }
|
|
|
| -inline void ChildNodeRemovalNotifier::notify(Node* node)
|
| +inline void ChildNodeRemovalNotifier::notify(Node& node)
|
| {
|
| - if (node->inDocument()) {
|
| + if (node.inDocument()) {
|
| notifyNodeRemovedFromDocument(node);
|
| - node->document().notifyRemovePendingSheetIfNeeded();
|
| - } else if (node->isContainerNode())
|
| + node.document().notifyRemovePendingSheetIfNeeded();
|
| + } else if (node.isContainerNode())
|
| notifyNodeRemovedFromTree(toContainerNode(node));
|
| }
|
|
|
|
|