Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/ContainerNode.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.cpp b/third_party/WebKit/Source/core/dom/ContainerNode.cpp |
| index 380860b6f13af335379ef04f5c2677be1af494f2..3ab098c1a54a4d70b4cff42e37bd29263adaabd8 100644 |
| --- a/third_party/WebKit/Source/core/dom/ContainerNode.cpp |
| +++ b/third_party/WebKit/Source/core/dom/ContainerNode.cpp |
| @@ -532,7 +532,7 @@ void ContainerNode::addChildNodesToDeletionQueue(Node*& head, Node*& tail, Conta |
| RefPtrWillBeRawPtr<Node> protect(n); // removedFromDocument may remove all references to this node. |
| container.document().adoptIfNeeded(*n); |
| if (n->inDocument()) |
| - container.notifyNodeRemoved(*n); |
| + container.notifyNodeRemoved(*n, next); |
| } |
| } |
| @@ -591,7 +591,7 @@ PassRefPtrWillBeRawPtr<Node> ContainerNode::removeChild(PassRefPtrWillBeRawPtr<N |
| Node* prev = child->previousSibling(); |
| Node* next = child->nextSibling(); |
| removeBetween(prev, next, *child); |
| - notifyNodeRemoved(*child); |
| + notifyNodeRemoved(*child, next); |
| childrenChanged(ChildrenChange::forRemoval(*child, prev, next, ChildrenChangeSourceAPI)); |
| } |
| dispatchSubtreeModifiedEvent(); |
| @@ -643,7 +643,7 @@ void ContainerNode::parserRemoveChild(Node& oldChild) |
| Node* next = oldChild.nextSibling(); |
| removeBetween(prev, next, oldChild); |
| - notifyNodeRemoved(oldChild); |
| + notifyNodeRemoved(oldChild, next); |
| childrenChanged(ChildrenChange::forRemoval(oldChild, prev, next, ChildrenChangeSourceParser)); |
| } |
| @@ -695,11 +695,12 @@ void ContainerNode::removeChildren(SubtreeModificationAction action) |
| removedChildren.reserveInitialCapacity(countChildren()); |
| #endif |
| while (RefPtrWillBeRawPtr<Node> child = m_firstChild) { |
| - removeBetween(0, child->nextSibling(), *child); |
| + Node* next = child->nextSibling(); |
| + removeBetween(nullptr, next, *child); |
| #if !ENABLE(OILPAN) |
| removedChildren.append(child.get()); |
| #endif |
| - notifyNodeRemoved(*child); |
| + notifyNodeRemoved(*child, next); |
| } |
| } |
| @@ -847,7 +848,7 @@ void ContainerNode::notifyNodeInsertedInternal(Node& root, NodeVector& postInser |
| } |
| } |
| -void ContainerNode::notifyNodeRemoved(Node& root) |
| +void ContainerNode::notifyNodeRemoved(Node& root, Node* next) |
| { |
| ScriptForbiddenScope forbidScript; |
| EventDispatchForbiddenScope assertNoEventDispatch; |
| @@ -858,9 +859,9 @@ void ContainerNode::notifyNodeRemoved(Node& root) |
| // call to removedFrom is not needed. |
| if (!node.isContainerNode() && !node.isInTreeScope()) |
| continue; |
| - node.removedFrom(this); |
| + node.removedFrom(this, node == root ? next : node.nextSibling()); |
|
esprehn
2015/12/14 22:49:42
Please revert this change, plumbing next through t
|
| for (ShadowRoot* shadowRoot = node.youngestShadowRoot(); shadowRoot; shadowRoot = shadowRoot->olderShadowRoot()) |
| - notifyNodeRemoved(*shadowRoot); |
| + notifyNodeRemoved(*shadowRoot, next); |
| } |
| } |