Changeset 293485 in webkit


Ignore:
Timestamp:
Apr 26, 2022 5:19:14 PM (3 months ago)
Author:
Oriol Brufau
Message:

[css-cascade] Fix cascade rollback for deferred properties
https://bugs.webkit.org/show_bug.cgi?id=238125

Reviewed by Antti Koivisto.

LayoutTests/imported/w3c:

Add a test. It still has some failures due to bug 239579, bug 239669,
and bug 239670.

  • web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt: Added.
  • web-platform-tests/css/css-cascade/all-prop-revert-layer.html: Added.

Source/WebCore:

When a deferred property was set to 'revert' or 'revert-layer', it used
to roll back to a declaration of the same exact property (or behave as
'unset' if none).

This patch lets deferred properties roll back to their related property,
e.g. '-webkit-box-shadow: revert-layer' can roll back to a 'box-shadow'
declaration in the previous layer.

This is consistent with logical and physical properties, where the
rollback happens after resolving logical properties.

Test: imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer.html

  • style/PropertyCascade.cpp:

(WebCore::Style::PropertyCascade::lastDeferredPropertyResolvingRelated const):

  • style/PropertyCascade.h:
  • style/StyleBuilder.cpp:

(WebCore::Style::Builder::applyProperty):

LayoutTests:

Add custom expectation for mac-wk1 since scroll-behavior is disabled
there, and thus not checked by the test.

  • platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt: Added.
Location:
trunk
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r293478 r293485  
     12022-04-26  Oriol Brufau  <obrufau@igalia.com>
     2
     3        [css-cascade] Fix cascade rollback for deferred properties
     4        https://bugs.webkit.org/show_bug.cgi?id=238125
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Add custom expectation for mac-wk1 since scroll-behavior is disabled
     9        there, and thus not checked by the test.
     10
     11        * platform/mac-wk1/imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt: Added.
     12
    1132022-04-26  Karl Rackler  <rackler@apple.com>
    214
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r293444 r293485  
     12022-04-26  Oriol Brufau  <obrufau@igalia.com>
     2
     3        [css-cascade] Fix cascade rollback for deferred properties
     4        https://bugs.webkit.org/show_bug.cgi?id=238125
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Add a test. It still has some failures due to bug 239579, bug 239669,
     9        and bug 239670.
     10
     11        * web-platform-tests/css/css-cascade/all-prop-revert-layer-expected.txt: Added.
     12        * web-platform-tests/css/css-cascade/all-prop-revert-layer.html: Added.
     13
    1142022-04-26  Ziran Sun  <zsun@igalia.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r293455 r293485  
     12022-04-26  Oriol Brufau  <obrufau@igalia.com>
     2
     3        [css-cascade] Fix cascade rollback for deferred properties
     4        https://bugs.webkit.org/show_bug.cgi?id=238125
     5
     6        Reviewed by Antti Koivisto.
     7
     8        When a deferred property was set to 'revert' or 'revert-layer', it used
     9        to roll back to a declaration of the same exact property (or behave as
     10        'unset' if none).
     11
     12        This patch lets deferred properties roll back to their related property,
     13        e.g. '-webkit-box-shadow: revert-layer' can roll back to a 'box-shadow'
     14        declaration in the previous layer.
     15
     16        This is consistent with logical and physical properties, where the
     17        rollback happens after resolving logical properties.
     18
     19        Test: imported/w3c/web-platform-tests/css/css-cascade/all-prop-revert-layer.html
     20
     21        * style/PropertyCascade.cpp:
     22        (WebCore::Style::PropertyCascade::lastDeferredPropertyResolvingRelated const):
     23        * style/PropertyCascade.h:
     24        * style/StyleBuilder.cpp:
     25        (WebCore::Style::Builder::applyProperty):
     26
    1272022-04-26  Elliott Williams  <emw@apple.com>
    228
  • trunk/Source/WebCore/style/PropertyCascade.cpp

    r293100 r293485  
    155155}
    156156
     157const PropertyCascade::Property* PropertyCascade::lastDeferredPropertyResolvingRelated(CSSPropertyID propertyID) const
     158{
     159    auto relatedID = getRelatedPropertyId(propertyID);
     160    if (relatedID == CSSPropertyInvalid) {
     161        ASSERT_NOT_REACHED();
     162        return hasDeferredProperty(propertyID) ? &deferredProperty(propertyID) : nullptr;
     163    }
     164    auto indexForPropertyID = deferredPropertyIndex(propertyID);
     165    auto indexForRelatedID = deferredPropertyIndex(relatedID);
     166    if (indexForPropertyID > indexForRelatedID)
     167        return &deferredProperty(propertyID);
     168    if (indexForPropertyID < indexForRelatedID)
     169        return &deferredProperty(relatedID);
     170    ASSERT(!hasDeferredProperty(propertyID));
     171    ASSERT(!hasDeferredProperty(relatedID));
     172    return nullptr;
     173}
    157174
    158175bool PropertyCascade::addMatch(const MatchedProperties& matchedProperties, CascadeLevel cascadeLevel, bool important)
  • trunk/Source/WebCore/style/PropertyCascade.h

    r293292 r293485  
    6565    bool hasDeferredProperty(CSSPropertyID) const;
    6666    const Property& deferredProperty(CSSPropertyID) const;
     67    const Property* lastDeferredPropertyResolvingRelated(CSSPropertyID) const;
    6768
    6869    bool hasCustomProperty(const AtomString&) const;
  • trunk/Source/WebCore/style/StyleBuilder.cpp

    r293100 r293485  
    323323                    return;
    324324                }
    325             } else if (rollbackCascade->hasDeferredProperty(id)) {
    326                 auto& property = rollbackCascade->deferredProperty(id);
    327                 applyRollbackCascadeProperty(property, linkMatchMask);
     325            } else if (auto* property = rollbackCascade->lastDeferredPropertyResolvingRelated(id)) {
     326                applyRollbackCascadeProperty(*property, linkMatchMask);
    328327                return;
    329328            }
Note: See TracChangeset for help on using the changeset viewer.