Changeset 284859 in webkit


Ignore:
Timestamp:
Oct 26, 2021 1:30:46 AM (9 months ago)
Author:
Antti Koivisto
Message:

[CSS Cascade Layers] Media queries should be able to affect layer order
https://bugs.webkit.org/show_bug.cgi?id=232238

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

Also import some additional @layer WPTs.

  • web-platform-tests/css/css-cascade/layer-media-query-expected.txt: Added.
  • web-platform-tests/css/css-cascade/layer-media-query.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-001-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-001.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-002-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-002.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-003-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-003.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-004-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-004.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-005-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-005.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-006-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-006.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-007-expected.xht: Added.
  • web-platform-tests/css/css-cascade/revert-layer-007.html: Added.
  • web-platform-tests/css/css-cascade/revert-layer-008-expected.txt: Added.
  • web-platform-tests/css/css-cascade/revert-layer-008.html: Added.
  • web-platform-tests/css/css-cascade/w3c-import.log:

Source/WebCore:

Cases like

@media (min-width: 500px) { @layer a, b; }
@media (min-width: 200px) { @layer b, a; }

should work as expected.

Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

  • style/RuleSetBuilder.cpp:

(WebCore::Style::RuleSetBuilder::addRulesFromSheet):
(WebCore::Style::RuleSetBuilder::addChildRules):

Disable dynamic media query evaluation for now when we see a @layer rule within a media query.

  • style/RuleSetBuilder.h:

Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

  • style/RuleSetBuilder.cpp:

(WebCore::Style::RuleSetBuilder::addRulesFromSheet):
(WebCore::Style::RuleSetBuilder::addChildRules):

  • style/RuleSetBuilder.h:

LayoutTests:

Location:
trunk
Files:
18 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r284855 r284859  
     12021-10-26  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Cascade Layers] Media queries should be able to affect layer order
     4        https://bugs.webkit.org/show_bug.cgi?id=232238
     5
     6        Reviewed by Simon Fraser.
     7
     8        * TestExpectations:
     9
    1102021-10-25  Ryan Haddad  <ryanhaddad@apple.com>
    211
  • trunk/LayoutTests/TestExpectations

    r284818 r284859  
    21222122imported/w3c/web-platform-tests/css/css-cascade/important-prop.html [ ImageOnlyFailure ]
    21232123webkit.org/b/187093 [ Debug ] imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.html [ Skip ]
     2124webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html [ ImageOnlyFailure ]
     2125webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html [ ImageOnlyFailure ]
     2126webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html [ ImageOnlyFailure ]
     2127webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html [ ImageOnlyFailure ]
     2128webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html [ ImageOnlyFailure ]
     2129webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html [ ImageOnlyFailure ]
     2130webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html [ ImageOnlyFailure ]
    21242131
    21252132webkit.org/b/148801 imported/w3c/web-platform-tests/css/css-color/t422-rgba-onscreen-b.xht [ ImageOnlyFailure ]
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r284853 r284859  
     12021-10-26  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Cascade Layers] Media queries should be able to affect layer order
     4        https://bugs.webkit.org/show_bug.cgi?id=232238
     5
     6        Reviewed by Simon Fraser.
     7
     8        Also import some additional @layer WPTs.
     9
     10        * web-platform-tests/css/css-cascade/layer-media-query-expected.txt: Added.
     11        * web-platform-tests/css/css-cascade/layer-media-query.html: Added.
     12        * web-platform-tests/css/css-cascade/revert-layer-001-expected.xht: Added.
     13        * web-platform-tests/css/css-cascade/revert-layer-001.html: Added.
     14        * web-platform-tests/css/css-cascade/revert-layer-002-expected.xht: Added.
     15        * web-platform-tests/css/css-cascade/revert-layer-002.html: Added.
     16        * web-platform-tests/css/css-cascade/revert-layer-003-expected.xht: Added.
     17        * web-platform-tests/css/css-cascade/revert-layer-003.html: Added.
     18        * web-platform-tests/css/css-cascade/revert-layer-004-expected.xht: Added.
     19        * web-platform-tests/css/css-cascade/revert-layer-004.html: Added.
     20        * web-platform-tests/css/css-cascade/revert-layer-005-expected.xht: Added.
     21        * web-platform-tests/css/css-cascade/revert-layer-005.html: Added.
     22        * web-platform-tests/css/css-cascade/revert-layer-006-expected.xht: Added.
     23        * web-platform-tests/css/css-cascade/revert-layer-006.html: Added.
     24        * web-platform-tests/css/css-cascade/revert-layer-007-expected.xht: Added.
     25        * web-platform-tests/css/css-cascade/revert-layer-007.html: Added.
     26        * web-platform-tests/css/css-cascade/revert-layer-008-expected.txt: Added.
     27        * web-platform-tests/css/css-cascade/revert-layer-008.html: Added.
     28        * web-platform-tests/css/css-cascade/w3c-import.log:
     29
    1302021-10-25  Nikolaos Mouchtaris  <nmouchtaris@apple.com>
    231
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/w3c-import.log

    r283162 r284859  
    4949/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html
    5050/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html
     51/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
    5152/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html
    5253/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html
     
    5556/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-vs-inline-style.html
    5657/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html
     58/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001-expected.xht
     59/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html
     60/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002-expected.xht
     61/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html
     62/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003-expected.xht
     63/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html
     64/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004-expected.xht
     65/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html
     66/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005-expected.xht
     67/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html
     68/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006-expected.xht
     69/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html
     70/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007-expected.xht
     71/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html
     72/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008.html
    5773/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-val-001-expected.xht
    5874/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-val-001.html
  • trunk/Source/WebCore/ChangeLog

    r284858 r284859  
     12021-10-26  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Cascade Layers] Media queries should be able to affect layer order
     4        https://bugs.webkit.org/show_bug.cgi?id=232238
     5
     6        Reviewed by Simon Fraser.
     7
     8        Cases like
     9
     10        @media (min-width: 500px) { @layer a, b; }
     11        @media (min-width: 200px) { @layer b, a; }
     12
     13        should work as expected.
     14
     15        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
     16
     17        * style/RuleSetBuilder.cpp:
     18        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
     19        (WebCore::Style::RuleSetBuilder::addChildRules):
     20
     21        Disable dynamic media query evaluation for now when we see a @layer rule within a media query.
     22
     23        * style/RuleSetBuilder.h:
     24
     25        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
     26
     27        * style/RuleSetBuilder.cpp:
     28        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
     29        (WebCore::Style::RuleSetBuilder::addChildRules):
     30        * style/RuleSetBuilder.h:
     31
    1322021-10-26  Adrian Perez de Castro  <aperez@igalia.com>
    233
  • trunk/Source/WebCore/style/RuleSetBuilder.cpp

    r284182 r284859  
    6868void RuleSetBuilder::addRulesFromSheet(const StyleSheetContents& sheet, const MediaQuerySet* sheetQuery)
    6969{
    70     auto canUseDynamicMediaQueryResolution = [&] {
     70    auto canUseDynamicMediaQueryEvaluation = [&] {
    7171        if (!m_resolver)
    7272            return false;
    7373
    74         RuleSetBuilder mutationScanner(m_mediaQueryCollector.evaluator);
    75         if (mutationScanner.m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
    76             mutationScanner.addRulesFromSheetContents(sheet);
    77         mutationScanner.m_mediaQueryCollector.pop(sheetQuery);
    78 
    79         return !mutationScanner.didSeeResolverMutationWithinDynamicMediaQuery;
     74        RuleSetBuilder dynamicEvaluationScanner(m_mediaQueryCollector.evaluator);
     75        if (dynamicEvaluationScanner.m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
     76            dynamicEvaluationScanner.addRulesFromSheetContents(sheet);
     77        dynamicEvaluationScanner.m_mediaQueryCollector.pop(sheetQuery);
     78
     79        return !dynamicEvaluationScanner.requiresStaticMediaQueryEvaluation;
    8080    };
    8181
    82     m_mediaQueryCollector.collectDynamic = canUseDynamicMediaQueryResolution();
     82    m_mediaQueryCollector.collectDynamic = canUseDynamicMediaQueryEvaluation();
    8383
    8484    if (m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
     
    9090{
    9191    for (auto& rule : rules) {
    92         if (didSeeResolverMutationWithinDynamicMediaQuery)
     92        if (requiresStaticMediaQueryEvaluation)
    9393            return;
    9494
     
    111111        }
    112112        if (is<StyleRuleLayer>(*rule)) {
     113            if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
     114                requiresStaticMediaQueryEvaluation = true;
     115
    113116            auto& layerRule = downcast<StyleRuleLayer>(*rule);
    114117            if (layerRule.isStatement()) {
     
    125128        if (is<StyleRuleFontFace>(*rule) || is<StyleRuleFontPaletteValues>(*rule) || is<StyleRuleKeyframes>(*rule)) {
    126129            if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
    127                 didSeeResolverMutationWithinDynamicMediaQuery = true;
     130                requiresStaticMediaQueryEvaluation = true;
    128131
    129132            if (m_resolver)
  • trunk/Source/WebCore/style/RuleSetBuilder.h

    r284182 r284859  
    8080
    8181    Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules;
    82     bool didSeeResolverMutationWithinDynamicMediaQuery { false };
     82    bool requiresStaticMediaQueryEvaluation { false };
    8383};
    8484
Note: See TracChangeset for help on using the changeset viewer.