Index: Source/core/dom/ContainerNode.cpp |
diff --git a/Source/core/dom/ContainerNode.cpp b/Source/core/dom/ContainerNode.cpp |
index 0aaf7f30638d419ebf76602cd5bf886a1e3dda10..ec54110855bb8b357427fec5d6b02ad8fc2bcf31 100644 |
--- a/Source/core/dom/ContainerNode.cpp |
+++ b/Source/core/dom/ContainerNode.cpp |
@@ -2,7 +2,7 @@ |
* Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
* (C) 1999 Antti Koivisto (koivisto@kde.org) |
* (C) 2001 Dirk Mueller (mueller@kde.org) |
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. 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 |
@@ -304,7 +304,8 @@ void ContainerNode::parserInsertBefore(PassRefPtrWillBeRawPtr<Node> newChild, No |
ChildListMutationScope(*this).childAdded(*newChild); |
- childrenChanged(true, newChild->previousSibling(), &nextChild, 1); |
+ ChildrenChange change = {ChildInserted, newChild->previousSibling(), &nextChild, ChildrenChangeSourceParser}; |
+ childrenChanged(change); |
notifyNodeInserted(*newChild); |
} |
@@ -483,7 +484,8 @@ void ContainerNode::removeChild(Node* oldChild, ExceptionState& exceptionState) |
Node* prev = child->previousSibling(); |
Node* next = child->nextSibling(); |
removeBetween(prev, next, *child); |
- childrenChanged(false, prev, next, -1); |
+ ChildrenChange change = {ChildRemoved, prev, next, ChildrenChangeSourceAPI}; |
+ childrenChanged(change); |
notifyNodeRemoved(*child); |
} |
dispatchSubtreeModifiedEvent(); |
@@ -529,7 +531,8 @@ void ContainerNode::parserRemoveChild(Node& oldChild) |
removeBetween(prev, next, oldChild); |
- childrenChanged(true, prev, next, -1); |
+ ChildrenChange change = {ChildRemoved, prev, next, ChildrenChangeSourceParser}; |
+ childrenChanged(change); |
notifyNodeRemoved(oldChild); |
} |
@@ -578,7 +581,8 @@ void ContainerNode::removeChildren() |
} |
} |
- childrenChanged(false, 0, 0, -static_cast<int>(removedChildren.size())); |
+ ChildrenChange change = {AllChildrenRemoved, nullptr, nullptr, ChildrenChangeSourceAPI}; |
+ childrenChanged(change); |
for (size_t i = 0; i < removedChildren.size(); ++i) |
notifyNodeRemoved(*removedChildren[i]); |
@@ -667,7 +671,8 @@ void ContainerNode::parserAppendChild(PassRefPtrWillBeRawPtr<Node> newChild) |
ChildListMutationScope(*this).childAdded(*newChild); |
} |
- childrenChanged(true, last, 0, 1); |
+ ChildrenChange change = {ChildInserted, last, nullptr, ChildrenChangeSourceParser}; |
+ childrenChanged(change); |
notifyNodeInserted(*newChild); |
} |
@@ -741,13 +746,13 @@ void ContainerNode::detach(const AttachContext& context) |
Node::detach(context); |
} |
-void ContainerNode::childrenChanged(bool changedByParser, Node*, Node*, int childCountDelta) |
+void ContainerNode::childrenChanged(const ChildrenChange& change) |
{ |
document().incDOMTreeVersion(); |
- if (!changedByParser && childCountDelta) |
+ if (!change.byParser && change.type != TextChanged) |
document().updateRangesAfterChildrenChanged(this); |
invalidateNodeListCachesInAncestors(); |
- if (childCountDelta > 0 && !childNeedsStyleRecalc()) { |
+ if (change.type == ChildInserted && !childNeedsStyleRecalc()) { |
setChildNeedsStyleRecalc(); |
markAncestorsWithChildNeedsStyleRecalc(); |
} |
@@ -1094,7 +1099,8 @@ void ContainerNode::updateTreeAfterInsertion(Node& child) |
ChildListMutationScope(*this).childAdded(child); |
- childrenChanged(false, child.previousSibling(), child.nextSibling(), 1); |
+ ChildrenChange change = {ChildInserted, child.previousSibling(), child.nextSibling(), ChildrenChangeSourceAPI}; |
+ childrenChanged(change); |
notifyNodeInserted(child); |
@@ -1144,7 +1150,7 @@ void ContainerNode::checkForChildrenAdjacentRuleChanges() |
} |
} |
-void ContainerNode::checkForSiblingStyleChanges(bool finishedParsingCallback, Node* beforeChange, Node* afterChange, int childCountDelta) |
+void ContainerNode::checkForSiblingStyleChanges(SiblingCheckType changeType, Node* beforeChange, Node* afterChange) |
{ |
if (!inActiveDocument() || document().hasPendingForcedStyleRecalc() || styleChangeType() >= SubtreeStyleChange) |
return; |
@@ -1183,7 +1189,7 @@ void ContainerNode::checkForSiblingStyleChanges(bool finishedParsingCallback, No |
firstElementAfterInsertion->setNeedsStyleRecalc(SubtreeStyleChange); |
// We also have to handle node removal. |
- if (childCountDelta < 0 && newFirstChild == firstElementAfterInsertion && newFirstChild && (!newFirstChildStyle || !newFirstChildStyle->firstChildState())) |
+ if (changeType == SiblingRemoved && newFirstChild == firstElementAfterInsertion && newFirstChild && (!newFirstChildStyle || !newFirstChildStyle->firstChildState())) |
newFirstChild->setNeedsStyleRecalc(SubtreeStyleChange); |
} |
@@ -1203,7 +1209,7 @@ void ContainerNode::checkForSiblingStyleChanges(bool finishedParsingCallback, No |
// We also have to handle node removal. The parser callback case is similar to node removal as well in that we need to change the last child |
// to match now. |
- if ((childCountDelta < 0 || finishedParsingCallback) && newLastChild == lastElementBeforeInsertion && newLastChild && (!newLastChildStyle || !newLastChildStyle->lastChildState())) |
+ if ((changeType == SiblingRemoved || changeType == FinishedParsingChildren) && newLastChild == lastElementBeforeInsertion && newLastChild && (!newLastChildStyle || !newLastChildStyle->lastChildState())) |
newLastChild->setNeedsStyleRecalc(SubtreeStyleChange); |
} |