Changeset 286972 in webkit


Ignore:
Timestamp:
Dec 13, 2021 12:38:56 PM (7 months ago)
Author:
Antti Koivisto
Message:

[CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
https://bugs.webkit.org/show_bug.cgi?id=234158

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-cascade/layer-media-query-expected.txt:

Source/WebCore:

  • style/RuleSetBuilder.cpp:

(WebCore::Style::RuleSetBuilder::addChildRules):
(WebCore::Style::RuleSetBuilder::addRulesFromSheetContents):

@import rules can introduce new layers so need to alse be considered for reordering by media queries
(which requires static evaluation).

(WebCore::Style::RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded):

Factor into a function.

  • style/RuleSetBuilder.h:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r286952 r286972  
     12021-12-13  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
     4        https://bugs.webkit.org/show_bug.cgi?id=234158
     5
     6        Reviewed by Simon Fraser.
     7
     8        * web-platform-tests/css/css-cascade/layer-media-query-expected.txt:
     9
    1102021-12-13  Sergio Villar Senin  <svillar@igalia.com>
    211
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt

    r286647 r286972  
    88PASS C2 Reordering
    99PASS C3 Reordering
    10 FAIL C4 Reordering assert_equals: C4 Reordering expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
     10PASS C4 Reordering
    1111
  • trunk/Source/WebCore/ChangeLog

    r286971 r286972  
     12021-12-13  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
     4        https://bugs.webkit.org/show_bug.cgi?id=234158
     5
     6        Reviewed by Simon Fraser.
     7
     8        * style/RuleSetBuilder.cpp:
     9        (WebCore::Style::RuleSetBuilder::addChildRules):
     10        (WebCore::Style::RuleSetBuilder::addRulesFromSheetContents):
     11
     12        @import rules can introduce new layers so need to alse be considered for reordering by media queries
     13        (which requires static evaluation).
     14
     15        (WebCore::Style::RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded):
     16
     17        Factor into a function.
     18
     19        * style/RuleSetBuilder.h:
     20
    1212021-12-13  Chris Dumez  <cdumez@apple.com>
    222
  • trunk/Source/WebCore/style/RuleSetBuilder.cpp

    r285622 r286972  
    111111        }
    112112        if (is<StyleRuleLayer>(*rule)) {
    113             if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
    114                 requiresStaticMediaQueryEvaluation = true;
     113            disallowDynamicMediaQueryEvaluationIfNeeded();
    115114
    116115            auto& layerRule = downcast<StyleRuleLayer>(*rule);
     
    127126        }
    128127        if (is<StyleRuleFontFace>(*rule) || is<StyleRuleFontPaletteValues>(*rule) || is<StyleRuleKeyframes>(*rule)) {
    129             if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
    130                 requiresStaticMediaQueryEvaluation = true;
     128            disallowDynamicMediaQueryEvaluationIfNeeded();
    131129
    132130            if (m_resolver)
     
    152150        if (m_mediaQueryCollector.pushAndEvaluate(rule->mediaQueries())) {
    153151            auto& cascadeLayerName = rule->cascadeLayerName();
    154             if (cascadeLayerName)
     152            if (cascadeLayerName) {
     153                disallowDynamicMediaQueryEvaluationIfNeeded();
    155154                pushCascadeLayer(*cascadeLayerName);
     155            }
    156156
    157157            addRulesFromSheetContents(*rule->styleSheet());
     
    180180        ++selectorListIndex;
    181181    }
     182}
     183
     184void RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded()
     185{
     186    bool isScanningForDynamicEvaluation = !m_ruleSet;
     187    if (isScanningForDynamicEvaluation && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
     188        requiresStaticMediaQueryEvaluation = true;
    182189}
    183190
  • trunk/Source/WebCore/style/RuleSetBuilder.h

    r284859 r286972  
    4141    void addChildRules(const Vector<RefPtr<StyleRuleBase>>&);
    4242    void addStyleRule(const StyleRule&);
     43    void disallowDynamicMediaQueryEvaluationIfNeeded();
    4344
    4445    void registerLayers(const Vector<CascadeLayerName>&);
Note: See TracChangeset for help on using the changeset viewer.