Changeset 189836 in webkit


Ignore:
Timestamp:
Sep 15, 2015 6:31:50 PM (9 years ago)
Author:
benjamin@webkit.org
Message:

Style invalidation affecting siblings does not work with inline-style changes
https://bugs.webkit.org/show_bug.cgi?id=149189

Patch by Benjamin Poulain <bpoulain@apple.com> on 2015-09-15
Reviewed by Antti Koivisto.

Source/WebCore:

Style::resolveTree() made the assumption that inline style changes only affect
descendants and should not participate in "StyleRecalcAffectsNextSiblingElementStyle".
That was wrong. If the inline style change through CSSOM, it can cause the creation
of a style attribute, which is observable through "StyleRecalcAffectsNextSiblingElementStyle".

This patch removes the incorrect assumption. Style invalidation is always propagated now.

Tests: fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html

fast/css/style-attribute-invalidation-propagates-to-direct-siblings.html
fast/css/style-attribute-invalidation-propagates-to-indirect-siblings.html

  • css/PropertySetCSSStyleDeclaration.cpp:

(WebCore::InlineCSSStyleDeclaration::didMutate): Deleted.

  • dom/StyledElement.cpp:

(WebCore::StyledElement::inlineStyleChanged):

  • dom/StyledElement.h:

(WebCore::StyledElement::invalidateStyleAttribute):
Clean up inline-style invalidation a tiny bit.

  • style/StyleResolveTree.cpp:

(WebCore::Style::resolveTree):
Fix the bug.

LayoutTests:

  • fast/css/style-attribute-invalidation-propagates-to-counted-siblings-expected.txt: Added.
  • fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html: Added.
  • fast/css/style-attribute-invalidation-propagates-to-direct-siblings-expected.txt: Added.
  • fast/css/style-attribute-invalidation-propagates-to-direct-siblings.html: Added.
  • fast/css/style-attribute-invalidation-propagates-to-indirect-siblings-expected.txt: Added.
  • fast/css/style-attribute-invalidation-propagates-to-indirect-siblings.html: Added.
Location:
trunk
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r189832 r189836  
     12015-09-15  Benjamin Poulain  <bpoulain@apple.com>
     2
     3        Style invalidation affecting siblings does not work with inline-style changes
     4        https://bugs.webkit.org/show_bug.cgi?id=149189
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * fast/css/style-attribute-invalidation-propagates-to-counted-siblings-expected.txt: Added.
     9        * fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html: Added.
     10        * fast/css/style-attribute-invalidation-propagates-to-direct-siblings-expected.txt: Added.
     11        * fast/css/style-attribute-invalidation-propagates-to-direct-siblings.html: Added.
     12        * fast/css/style-attribute-invalidation-propagates-to-indirect-siblings-expected.txt: Added.
     13        * fast/css/style-attribute-invalidation-propagates-to-indirect-siblings.html: Added.
     14
    1152015-09-15  Myles C. Maxfield  <mmaxfield@apple.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r189834 r189836  
     12015-09-15  Benjamin Poulain  <bpoulain@apple.com>
     2
     3        Style invalidation affecting siblings does not work with inline-style changes
     4        https://bugs.webkit.org/show_bug.cgi?id=149189
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Style::resolveTree() made the assumption that inline style changes only affect
     9        descendants and should not participate in "StyleRecalcAffectsNextSiblingElementStyle".
     10        That was wrong. If the inline style change through CSSOM, it can cause the creation
     11        of a style attribute, which is observable through "StyleRecalcAffectsNextSiblingElementStyle".
     12
     13        This patch removes the incorrect assumption. Style invalidation is always propagated now.
     14
     15        Tests: fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html
     16               fast/css/style-attribute-invalidation-propagates-to-direct-siblings.html
     17               fast/css/style-attribute-invalidation-propagates-to-indirect-siblings.html
     18
     19        * css/PropertySetCSSStyleDeclaration.cpp:
     20        (WebCore::InlineCSSStyleDeclaration::didMutate): Deleted.
     21        * dom/StyledElement.cpp:
     22        (WebCore::StyledElement::inlineStyleChanged):
     23        * dom/StyledElement.h:
     24        (WebCore::StyledElement::invalidateStyleAttribute):
     25        Clean up inline-style invalidation a tiny bit.
     26
     27        * style/StyleResolveTree.cpp:
     28        (WebCore::Style::resolveTree):
     29        Fix the bug.
     30
    1312015-09-15  Joseph Pecoraro  <pecoraro@apple.com>
    232
  • trunk/Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp

    r188315 r189836  
    366366        return;
    367367
    368     m_parentElement->setNeedsStyleRecalc(InlineStyleChange);
    369368    m_parentElement->invalidateStyleAttribute();
    370369    StyleAttributeMutationScope(this).didInvalidateStyleAttr();
  • trunk/Source/WebCore/dom/StyledElement.cpp

    r188619 r189836  
    215215void StyledElement::inlineStyleChanged()
    216216{
    217     setNeedsStyleRecalc(InlineStyleChange);
    218     ASSERT(elementData());
    219     elementData()->setStyleAttributeIsDirty(true);
     217    invalidateStyleAttribute();
    220218    InspectorInstrumentation::didInvalidateStyleAttr(document(), *this);
    221219}
  • trunk/Source/WebCore/dom/StyledElement.h

    r185591 r189836  
    9898    ASSERT(elementData());
    9999    elementData()->setStyleAttributeIsDirty(true);
     100    setNeedsStyleRecalc(InlineStyleChange);
    100101}
    101102
  • trunk/Source/WebCore/style/StyleResolveTree.cpp

    r189239 r189836  
    821821                    childElement.setNeedsStyleRecalc();
    822822                elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle();
    823             } else if (childElement.styleChangeType() >= FullStyleChange)
     823            } else if (childElement.needsStyleRecalc())
    824824                elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle();
    825825            if (change >= Inherit || childElement.childNeedsStyleRecalc() || childElement.needsStyleRecalc()) {
Note: See TracChangeset for help on using the changeset viewer.