Index: trunk/Source/core/dom/Node.cpp |
=================================================================== |
--- trunk/Source/core/dom/Node.cpp (revision 151673) |
+++ trunk/Source/core/dom/Node.cpp (working copy) |
@@ -864,19 +864,15 @@ |
markAncestorsWithChildNeedsStyleRecalc(); |
} |
-void Node::lazyAttach() |
+void Node::lazyAttach(ShouldSetAttached shouldSetAttached) |
{ |
- // It's safe to synchronously attach here because we're in the middle of style recalc |
- // while it's not safe to mark nodes as needing style recalc except in the loop in |
- // Element::recalcStyle because we may mark an ancestor as not needing recalc and |
- // then the node would never get updated. One place this currently happens is |
- // HTMLObjectElement::renderFallbackContent which may call lazyAttach from inside |
- // attach which was triggered by a recalcStyle. |
- if (document()->inStyleRecalc()) { |
- attach(); |
- return; |
+ for (Node* n = this; n; n = NodeTraversal::next(n, this)) { |
+ if (n->hasChildNodes()) |
+ n->setChildNeedsStyleRecalc(); |
+ n->setStyleChange(FullStyleChange); |
+ if (shouldSetAttached == SetAttached) |
+ n->setAttached(); |
} |
- setStyleChange(FullStyleChange); |
markAncestorsWithChildNeedsStyleRecalc(); |
} |