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 Peter Kelly (pmk@post.com) | 4 * (C) 2001 Peter Kelly (pmk@post.com) |
| 5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 6 * (C) 2007 David Smith (catfish.man@gmail.com) | 6 * (C) 2007 David Smith (catfish.man@gmail.com) |
| 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. | 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. |
| 8 * (C) 2007 Eric Seidel (eric@webkit.org) | 8 * (C) 2007 Eric Seidel (eric@webkit.org) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 1489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1500 | 1500 |
| 1501 return originalStyleForRenderer(); | 1501 return originalStyleForRenderer(); |
| 1502 } | 1502 } |
| 1503 | 1503 |
| 1504 PassRefPtr<RenderStyle> Element::originalStyleForRenderer() | 1504 PassRefPtr<RenderStyle> Element::originalStyleForRenderer() |
| 1505 { | 1505 { |
| 1506 ASSERT(document().inStyleRecalc()); | 1506 ASSERT(document().inStyleRecalc()); |
| 1507 return document().ensureStyleResolver().styleForElement(this); | 1507 return document().ensureStyleResolver().styleForElement(this); |
| 1508 } | 1508 } |
| 1509 | 1509 |
| 1510 void Element::recalcStyle(StyleRecalcChange change, Text* nextTextSibling) | 1510 void Element::recalcStyle(StyleRecalcChange change, Text* nextTextSibling, Inser tionPoint* shadowInsertionPoint) |
| 1511 { | 1511 { |
| 1512 ASSERT(document().inStyleRecalc()); | 1512 ASSERT(document().inStyleRecalc()); |
| 1513 ASSERT(!parentOrShadowHostNode()->needsStyleRecalc()); | 1513 ASSERT(!parentOrShadowHostNode()->needsStyleRecalc()); |
| 1514 | 1514 |
| 1515 if (hasCustomStyleCallbacks()) | 1515 if (hasCustomStyleCallbacks()) |
| 1516 willRecalcStyle(change); | 1516 willRecalcStyle(change); |
| 1517 | 1517 |
| 1518 if (change >= Inherit || needsStyleRecalc()) { | 1518 if (change >= Inherit || needsStyleRecalc()) { |
| 1519 if (hasRareData()) { | 1519 if (hasRareData()) { |
| 1520 ElementRareData* data = elementRareData(); | 1520 ElementRareData* data = elementRareData(); |
| 1521 data->resetStyleState(); | 1521 data->resetStyleState(); |
| 1522 data->clearComputedStyle(); | 1522 data->clearComputedStyle(); |
| 1523 } | 1523 } |
| 1524 if (parentRenderStyle()) | 1524 if (parentRenderStyle()) |
| 1525 change = recalcOwnStyle(change); | 1525 change = recalcOwnStyle(change); |
| 1526 clearNeedsStyleRecalc(); | 1526 clearNeedsStyleRecalc(); |
| 1527 } | 1527 } |
| 1528 | 1528 |
| 1529 // If we reattached we don't need to recalc the style of our descendants any more. | 1529 if (this != shadowInsertionPoint) { |
| 1530 if ((change >= Inherit && change < Reattach) || childNeedsStyleRecalc()) | 1530 // If we reattached we don't need to recalc the style of our descendants anymore. |
| 1531 recalcChildStyle(change); | 1531 if ((change >= Inherit && change < Reattach) || childNeedsStyleRecalc()) |
| 1532 clearChildNeedsStyleRecalc(); | 1532 recalcChildStyle(change, shadowInsertionPoint); |
| 1533 clearChildNeedsStyleRecalc(); | |
| 1534 } | |
| 1533 | 1535 |
| 1534 if (hasCustomStyleCallbacks()) | 1536 if (hasCustomStyleCallbacks()) |
| 1535 didRecalcStyle(change); | 1537 didRecalcStyle(change); |
| 1536 | 1538 |
| 1537 if (change == Reattach) | 1539 if (change == Reattach) |
| 1538 reattachWhitespaceSiblings(nextTextSibling); | 1540 reattachWhitespaceSiblings(nextTextSibling); |
| 1539 } | 1541 } |
| 1540 | 1542 |
| 1541 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change) | 1543 StyleRecalcChange Element::recalcOwnStyle(StyleRecalcChange change) |
| 1542 { | 1544 { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1588 document().ensureStyleResolver().invalidateMatchedPropertiesCache(); | 1590 document().ensureStyleResolver().invalidateMatchedPropertiesCache(); |
| 1589 return Force; | 1591 return Force; |
| 1590 } | 1592 } |
| 1591 | 1593 |
| 1592 if (styleChangeType() >= SubtreeStyleChange) | 1594 if (styleChangeType() >= SubtreeStyleChange) |
| 1593 return Force; | 1595 return Force; |
| 1594 | 1596 |
| 1595 return max(localChange, change); | 1597 return max(localChange, change); |
| 1596 } | 1598 } |
| 1597 | 1599 |
| 1598 void Element::recalcChildStyle(StyleRecalcChange change) | 1600 void Element::recalcChildStyle(StyleRecalcChange change, InsertionPoint* shadowI nsertionPoint) |
| 1599 { | 1601 { |
| 1600 ASSERT(document().inStyleRecalc()); | 1602 ASSERT(document().inStyleRecalc()); |
| 1601 ASSERT(change >= Inherit || childNeedsStyleRecalc()); | 1603 ASSERT(change >= Inherit || childNeedsStyleRecalc()); |
| 1602 ASSERT(!needsStyleRecalc()); | 1604 ASSERT(!needsStyleRecalc()); |
| 1603 | 1605 |
| 1604 StyleResolverParentPusher parentPusher(*this); | 1606 StyleResolverParentPusher parentPusher(*this); |
| 1605 | 1607 |
| 1606 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow Root()) { | 1608 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow Root()) { |
| 1607 if (shouldRecalcStyle(change, root)) { | 1609 if (shouldRecalcStyle(change, root)) { |
| 1608 parentPusher.push(); | 1610 parentPusher.push(); |
| 1609 root->recalcStyle(change); | 1611 root->recalcStyle(change); |
| 1610 } | 1612 } |
| 1611 } | 1613 } |
| 1612 | 1614 |
| 1615 for (ShadowRoot* root = oldestShadowRoot(); root; root = root->youngerShadow Root()) { | |
| 1616 if (InsertionPoint* insertionPoint = root->shadowInsertionPoint()) { | |
| 1617 if ((change >= Inherit && change < Reattach) || insertionPoint->chil dNeedsStyleRecalc()) | |
|
esprehn
2013/12/11 09:53:27
if (shouldRecalcStyle(change, insertionPoint))
We
| |
| 1618 insertionPoint->recalcChildStyle(change, 0); | |
|
esprehn
2013/12/11 09:53:27
This doesn't work, the bloom filter is wrong at th
| |
| 1619 insertionPoint->clearChildNeedsStyleRecalc(); | |
|
esprehn
2013/12/11 09:53:27
If you make the above change this goes away.
| |
| 1620 } | |
| 1621 } | |
| 1622 | |
| 1613 if (shouldRecalcStyle(change, this)) | 1623 if (shouldRecalcStyle(change, this)) |
| 1614 updatePseudoElement(BEFORE, change); | 1624 updatePseudoElement(BEFORE, change); |
| 1615 | 1625 |
| 1616 if (change < Force && hasRareData() && childNeedsStyleRecalc()) | 1626 if (change < Force && hasRareData() && childNeedsStyleRecalc()) |
| 1617 checkForChildrenAdjacentRuleChanges(); | 1627 checkForChildrenAdjacentRuleChanges(); |
| 1618 | 1628 |
| 1619 // This loop is deliberately backwards because we use insertBefore in the re ndering tree, and want to avoid | 1629 // This loop is deliberately backwards because we use insertBefore in the re ndering tree, and want to avoid |
| 1620 // a potentially n^2 loop to find the insertion point while resolving style. Having us start from the last | 1630 // a potentially n^2 loop to find the insertion point while resolving style. Having us start from the last |
| 1621 // child and work our way back means in the common case, we'll find the inse rtion point in O(1) time. | 1631 // child and work our way back means in the common case, we'll find the inse rtion point in O(1) time. |
| 1622 // See crbug.com/288225 | 1632 // See crbug.com/288225 |
| 1623 StyleResolver& styleResolver = document().ensureStyleResolver(); | 1633 StyleResolver& styleResolver = document().ensureStyleResolver(); |
| 1624 Text* lastTextNode = 0; | 1634 Text* lastTextNode = 0; |
| 1625 for (Node* child = lastChild(); child; child = child->previousSibling()) { | 1635 for (Node* child = lastChild(); child; child = child->previousSibling()) { |
| 1626 if (child->isTextNode()) { | 1636 if (child->isTextNode()) { |
| 1627 toText(child)->recalcTextStyle(change, lastTextNode); | 1637 toText(child)->recalcTextStyle(change, lastTextNode); |
| 1628 lastTextNode = toText(child); | 1638 lastTextNode = toText(child); |
| 1629 } else if (child->isElementNode()) { | 1639 } else if (child->isElementNode()) { |
| 1630 Element* element = toElement(child); | 1640 Element* element = toElement(child); |
| 1631 if (shouldRecalcStyle(change, element)) { | 1641 if (shouldRecalcStyle(change, element)) { |
| 1632 parentPusher.push(); | 1642 parentPusher.push(); |
| 1633 element->recalcStyle(change, lastTextNode); | 1643 element->recalcStyle(change, lastTextNode, shadowInsertionPoint) ; |
| 1634 } else if (element->supportsStyleSharing()) { | 1644 } else if (element->supportsStyleSharing()) { |
| 1635 styleResolver.addToStyleSharingList(*element); | 1645 styleResolver.addToStyleSharingList(*element); |
| 1636 } | 1646 } |
| 1637 if (element->renderer()) | 1647 if (element->renderer()) |
| 1638 lastTextNode = 0; | 1648 lastTextNode = 0; |
| 1639 } | 1649 } |
| 1640 } | 1650 } |
| 1641 | 1651 |
| 1642 if (shouldRecalcStyle(change, this)) { | 1652 if (shouldRecalcStyle(change, this)) { |
| 1643 updatePseudoElement(AFTER, change); | 1653 updatePseudoElement(AFTER, change); |
| (...skipping 1892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3536 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems | 3546 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi stItems |
| 3537 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405 | 3547 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg i?id=88405 |
| 3538 if (hasTagName(optionTag) || hasTagName(optgroupTag)) | 3548 if (hasTagName(optionTag) || hasTagName(optgroupTag)) |
| 3539 return false; | 3549 return false; |
| 3540 if (FullscreenElementStack::isActiveFullScreenElement(this)) | 3550 if (FullscreenElementStack::isActiveFullScreenElement(this)) |
| 3541 return false; | 3551 return false; |
| 3542 return true; | 3552 return true; |
| 3543 } | 3553 } |
| 3544 | 3554 |
| 3545 } // namespace WebCore | 3555 } // namespace WebCore |
| OLD | NEW |