Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights |
| 6 * reserved. | 6 * reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 84 void ContainerNode::parserTakeAllChildrenFrom(ContainerNode& oldParent) { | 84 void ContainerNode::parserTakeAllChildrenFrom(ContainerNode& oldParent) { |
| 85 while (Node* child = oldParent.firstChild()) { | 85 while (Node* child = oldParent.firstChild()) { |
| 86 // Explicitly remove since appending can fail, but this loop shouldn't be | 86 // Explicitly remove since appending can fail, but this loop shouldn't be |
| 87 // infinite. | 87 // infinite. |
| 88 oldParent.parserRemoveChild(*child); | 88 oldParent.parserRemoveChild(*child); |
| 89 parserAppendChild(child); | 89 parserAppendChild(child); |
| 90 } | 90 } |
| 91 } | 91 } |
| 92 | 92 |
| 93 ContainerNode::~ContainerNode() { | 93 ContainerNode::~ContainerNode() { |
| 94 DCHECK(needsAttach()); | |
|
nainar
2016/11/29 06:13:39
This is unnecessary - maybe replace this with a ch
rune
2016/12/05 10:05:16
Wouldn't this correspond with needsReattachLayoutT
esprehn
2016/12/05 22:31:33
Leave this ASSERT alone, it's making sure by the t
| |
| 95 } | 94 } |
| 96 | 95 |
| 97 DISABLE_CFI_PERF | 96 DISABLE_CFI_PERF |
| 98 bool ContainerNode::isChildTypeAllowed(const Node& child) const { | 97 bool ContainerNode::isChildTypeAllowed(const Node& child) const { |
| 99 if (!child.isDocumentFragment()) | 98 if (!child.isDocumentFragment()) |
| 100 return childTypeAllowed(child.getNodeType()); | 99 return childTypeAllowed(child.getNodeType()); |
| 101 | 100 |
| 102 for (Node* node = toDocumentFragment(child).firstChild(); node; | 101 for (Node* node = toDocumentFragment(child).firstChild(); node; |
| 103 node = node->nextSibling()) { | 102 node = node->nextSibling()) { |
| 104 if (!childTypeAllowed(node->getNodeType())) | 103 if (!childTypeAllowed(node->getNodeType())) |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 542 | 541 |
| 543 void ContainerNode::removeBetween(Node* previousChild, | 542 void ContainerNode::removeBetween(Node* previousChild, |
| 544 Node* nextChild, | 543 Node* nextChild, |
| 545 Node& oldChild) { | 544 Node& oldChild) { |
| 546 EventDispatchForbiddenScope assertNoEventDispatch; | 545 EventDispatchForbiddenScope assertNoEventDispatch; |
| 547 | 546 |
| 548 DCHECK_EQ(oldChild.parentNode(), this); | 547 DCHECK_EQ(oldChild.parentNode(), this); |
| 549 | 548 |
| 550 AttachContext context; | 549 AttachContext context; |
| 551 context.clearInvalidation = true; | 550 context.clearInvalidation = true; |
| 552 if (!oldChild.needsAttach()) | 551 if (oldChild.needsReattachLayoutTree()) |
|
nainar
2016/11/29 06:13:39
This statemement is no longer true since we are no
rune
2016/12/05 10:05:16
Shouldn't this be !needsReattachLayoutTree()?
esprehn
2016/12/05 22:31:33
Leave this alone.
| |
| 553 oldChild.detachLayoutTree(context); | 552 oldChild.detachLayoutTree(context); |
| 554 | 553 |
| 555 if (nextChild) | 554 if (nextChild) |
| 556 nextChild->setPreviousSibling(previousChild); | 555 nextChild->setPreviousSibling(previousChild); |
| 557 if (previousChild) | 556 if (previousChild) |
| 558 previousChild->setNextSibling(nextChild); | 557 previousChild->setNextSibling(nextChild); |
| 559 if (m_firstChild == &oldChild) | 558 if (m_firstChild == &oldChild) |
| 560 setFirstChild(nextChild); | 559 setFirstChild(nextChild); |
| 561 if (m_lastChild == &oldChild) | 560 if (m_lastChild == &oldChild) |
| 562 setLastChild(previousChild); | 561 setLastChild(previousChild); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 752 } | 751 } |
| 753 } | 752 } |
| 754 | 753 |
| 755 DISABLE_CFI_PERF | 754 DISABLE_CFI_PERF |
| 756 void ContainerNode::attachLayoutTree(const AttachContext& context) { | 755 void ContainerNode::attachLayoutTree(const AttachContext& context) { |
| 757 AttachContext childrenContext(context); | 756 AttachContext childrenContext(context); |
| 758 childrenContext.resolvedStyle = nullptr; | 757 childrenContext.resolvedStyle = nullptr; |
| 759 | 758 |
| 760 for (Node* child = firstChild(); child; child = child->nextSibling()) { | 759 for (Node* child = firstChild(); child; child = child->nextSibling()) { |
| 761 #if DCHECK_IS_ON() | 760 #if DCHECK_IS_ON() |
| 762 DCHECK(child->needsAttach() || | 761 DCHECK(child->needsReattachLayoutTree() || |
| 763 childAttachedAllowedWhenAttachingChildren(this)); | 762 childAttachedAllowedWhenAttachingChildren(this)); |
| 764 #endif | 763 #endif |
| 765 if (child->needsAttach()) | 764 if (child->needsReattachLayoutTree()) |
| 766 child->attachLayoutTree(childrenContext); | 765 child->attachLayoutTree(childrenContext); |
| 767 } | 766 } |
| 768 | 767 |
| 769 clearChildNeedsStyleRecalc(); | 768 clearChildNeedsStyleRecalc(); |
| 770 clearChildNeedsReattachLayoutTree(); | 769 clearChildNeedsReattachLayoutTree(); |
| 771 Node::attachLayoutTree(context); | 770 Node::attachLayoutTree(context); |
| 772 } | 771 } |
| 773 | 772 |
| 774 void ContainerNode::detachLayoutTree(const AttachContext& context) { | 773 void ContainerNode::detachLayoutTree(const AttachContext& context) { |
| 775 AttachContext childrenContext(context); | 774 AttachContext childrenContext(context); |
| 776 childrenContext.resolvedStyle = nullptr; | 775 childrenContext.resolvedStyle = nullptr; |
| 777 childrenContext.clearInvalidation = true; | 776 childrenContext.clearInvalidation = true; |
| 778 | 777 |
| 779 for (Node* child = firstChild(); child; child = child->nextSibling()) | 778 for (Node* child = firstChild(); child; child = child->nextSibling()) |
| 780 child->detachLayoutTree(childrenContext); | 779 child->detachLayoutTree(childrenContext); |
| 781 | |
| 782 setChildNeedsStyleRecalc(); | |
| 783 Node::detachLayoutTree(context); | 780 Node::detachLayoutTree(context); |
| 784 } | 781 } |
| 785 | 782 |
| 786 void ContainerNode::childrenChanged(const ChildrenChange& change) { | 783 void ContainerNode::childrenChanged(const ChildrenChange& change) { |
| 787 document().incDOMTreeVersion(); | 784 document().incDOMTreeVersion(); |
| 788 invalidateNodeListCachesInAncestors(); | 785 invalidateNodeListCachesInAncestors(); |
| 789 if (change.isChildInsertion() && !childNeedsStyleRecalc()) { | 786 if (change.isChildInsertion() && !childNeedsStyleRecalc()) { |
| 790 setChildNeedsStyleRecalc(); | 787 setChildNeedsStyleRecalc(); |
| 791 markAncestorsWithChildNeedsStyleRecalc(); | 788 markAncestorsWithChildNeedsStyleRecalc(); |
| 792 } | 789 } |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1287 } else if (child->isElementNode()) { | 1284 } else if (child->isElementNode()) { |
| 1288 Element* element = toElement(child); | 1285 Element* element = toElement(child); |
| 1289 if (element->shouldCallRecalcStyle(change)) | 1286 if (element->shouldCallRecalcStyle(change)) |
| 1290 element->recalcStyle(change, lastTextNode); | 1287 element->recalcStyle(change, lastTextNode); |
| 1291 else if (element->supportsStyleSharing()) | 1288 else if (element->supportsStyleSharing()) |
| 1292 styleResolver.addToStyleSharingList(*element); | 1289 styleResolver.addToStyleSharingList(*element); |
| 1293 if (element->layoutObject()) | 1290 if (element->layoutObject()) |
| 1294 lastTextNode = nullptr; | 1291 lastTextNode = nullptr; |
| 1295 } | 1292 } |
| 1296 } | 1293 } |
| 1294 clearChildNeedsStyleRecalc(); | |
| 1295 } | |
| 1296 | |
| 1297 void ContainerNode::rebuildDescendantLayoutTree() { | |
| 1298 DCHECK(!needsStyleRecalc()); | |
| 1299 DCHECK(!childNeedsStyleRecalc()); | |
| 1300 DCHECK(!needsReattachLayoutTree()); | |
| 1301 | |
| 1302 for (Node* child = firstChild(); child; child = child->nextSibling()) { | |
| 1303 if (child->needsReattachLayoutTree() || | |
| 1304 child->childNeedsReattachLayoutTree()) { | |
| 1305 if (child->isTextNode()) | |
| 1306 toText(child)->rebuildTextLayoutTree(); | |
| 1307 else if (child->isElementNode()) | |
| 1308 toElement(child)->rebuildLayoutTree(); | |
| 1309 } | |
| 1310 } | |
| 1311 clearChildNeedsStyleRecalc(); | |
| 1312 clearChildNeedsReattachLayoutTree(); | |
| 1297 } | 1313 } |
| 1298 | 1314 |
| 1299 void ContainerNode::checkForSiblingStyleChanges(SiblingCheckType changeType, | 1315 void ContainerNode::checkForSiblingStyleChanges(SiblingCheckType changeType, |
| 1300 Element* changedElement, | 1316 Element* changedElement, |
| 1301 Node* nodeBeforeChange, | 1317 Node* nodeBeforeChange, |
| 1302 Node* nodeAfterChange) { | 1318 Node* nodeAfterChange) { |
| 1303 if (!inActiveDocument() || document().hasPendingForcedStyleRecalc() || | 1319 if (!inActiveDocument() || document().hasPendingForcedStyleRecalc() || |
| 1304 getStyleChangeType() >= SubtreeStyleChange) | 1320 getStyleChangeType() >= SubtreeStyleChange) |
| 1305 return; | 1321 return; |
| 1306 | 1322 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1468 return true; | 1484 return true; |
| 1469 | 1485 |
| 1470 if (node->isElementNode() && toElement(node)->shadow()) | 1486 if (node->isElementNode() && toElement(node)->shadow()) |
| 1471 return true; | 1487 return true; |
| 1472 | 1488 |
| 1473 return false; | 1489 return false; |
| 1474 } | 1490 } |
| 1475 #endif | 1491 #endif |
| 1476 | 1492 |
| 1477 } // namespace blink | 1493 } // namespace blink |
| OLD | NEW |