Changeset 292045 in webkit


Ignore:
Timestamp:
Mar 29, 2022 11:19:56 AM (4 months ago)
Author:
Antti Koivisto
Message:

[CSS Container Queries] Support CSSOM
https://bugs.webkit.org/show_bug.cgi?id=238500

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-contain/container-queries/at-container-serialization-expected.txt:
  • web-platform-tests/css/css-contain/container-queries/idlharness-expected.txt:

Source/WebCore:

Add CSSContainerRule interface.

https://drafts.csswg.org/css-contain-3/#the-csscontainerrule-interface

  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSCSSRuleCustom.cpp:

(WebCore::toJSNewlyCreated):

  • css/CSSContainerRule.cpp: Added.

(WebCore::CSSContainerRule::CSSContainerRule):
(WebCore::CSSContainerRule::create):
(WebCore::CSSContainerRule::styleRuleContainer const):
(WebCore::CSSContainerRule::cssText const):
(WebCore::CSSContainerRule::conditionText const):

Implementation, the only real functionality is serialization.

  • css/CSSContainerRule.h: Added.
  • css/CSSContainerRule.idl: Added.

Interface.

  • css/ContainerQuery.cpp:

(WebCore::CQ::serialize):
(WebCore::serialize):

Query syntax serialization support.

  • css/ContainerQuery.h:
  • css/ContainerQueryParser.cpp:

(WebCore::ContainerQueryParser::consumeContainerQuery):

Remember the text of unknown queries.

  • css/StyleRule.cpp:

(WebCore::StyleRuleBase::createCSSOMWrapper const):

LayoutTests:

Location:
trunk
Files:
4 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r292033 r292045  
     12022-03-29  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Container Queries] Support CSSOM
     4        https://bugs.webkit.org/show_bug.cgi?id=238500
     5
     6        Reviewed by Simon Fraser.
     7
     8        * TestExpectations:
     9
    1102022-03-29  Sam Sneddon  <gsnedders@apple.com>
    211
  • trunk/LayoutTests/TestExpectations

    r292033 r292045  
    47074707webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/pseudo-elements-002.html [ ImageOnlyFailure ]
    47084708webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/svg-foreignobject-no-size-container.html [ Skip ]
    4709 webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/at-container-serialization.html [ Skip ]
    4710 webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/idlharness.html [ Skip ]
    47114709
    47124710# Flaky css-contain test
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r292033 r292045  
     12022-03-29  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Container Queries] Support CSSOM
     4        https://bugs.webkit.org/show_bug.cgi?id=238500
     5
     6        Reviewed by Simon Fraser.
     7
     8        * web-platform-tests/css/css-contain/container-queries/at-container-serialization-expected.txt:
     9        * web-platform-tests/css/css-contain/container-queries/idlharness-expected.txt:
     10
    1112022-03-29  Sam Sneddon  <gsnedders@apple.com>
    212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/at-container-serialization-expected.txt

    r291993 r292045  
    11
    2 FAIL Serialization of conditionText null is not an object (evaluating 'rules[0].cssRules')
    3 FAIL Serialization of inner @container rule null is not an object (evaluating 'rules[0].cssRules')
    4 FAIL Serialization of nested @container rule null is not an object (evaluating 'rules[0].cssText')
     2PASS Serialization of conditionText
     3PASS Serialization of inner @container rule
     4PASS Serialization of nested @container rule
    55
  • trunk/Source/WebCore/CMakeLists.txt

    r291867 r292045  
    764764
    765765    css/CSSConditionRule.idl
     766    css/CSSContainerRule.idl
    766767    css/CSSCounterStyleRule.idl
    767768    css/CSSFontFaceRule.idl
  • trunk/Source/WebCore/ChangeLog

    r292043 r292045  
     12022-03-29  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Container Queries] Support CSSOM
     4        https://bugs.webkit.org/show_bug.cgi?id=238500
     5
     6        Reviewed by Simon Fraser.
     7
     8        Add CSSContainerRule interface.
     9
     10        https://drafts.csswg.org/css-contain-3/#the-csscontainerrule-interface
     11
     12        * DerivedSources-input.xcfilelist:
     13        * DerivedSources-output.xcfilelist:
     14        * DerivedSources.make:
     15        * Sources.txt:
     16        * WebCore.xcodeproj/project.pbxproj:
     17        * bindings/js/JSCSSRuleCustom.cpp:
     18        (WebCore::toJSNewlyCreated):
     19        * css/CSSContainerRule.cpp: Added.
     20        (WebCore::CSSContainerRule::CSSContainerRule):
     21        (WebCore::CSSContainerRule::create):
     22        (WebCore::CSSContainerRule::styleRuleContainer const):
     23        (WebCore::CSSContainerRule::cssText const):
     24        (WebCore::CSSContainerRule::conditionText const):
     25
     26        Implementation, the only real functionality is serialization.
     27
     28        * css/CSSContainerRule.h: Added.
     29        * css/CSSContainerRule.idl: Added.
     30
     31        Interface.
     32
     33        * css/ContainerQuery.cpp:
     34        (WebCore::CQ::serialize):
     35        (WebCore::serialize):
     36
     37        Query syntax serialization support.
     38
     39        * css/ContainerQuery.h:
     40        * css/ContainerQueryParser.cpp:
     41        (WebCore::ContainerQueryParser::consumeContainerQuery):
     42
     43        Remember the text of unknown queries.
     44
     45        * css/StyleRule.cpp:
     46        (WebCore::StyleRuleBase::createCSSOMWrapper const):
     47
    1482022-03-29  Alan Bujtas  <zalan@apple.com>
    249
  • trunk/Source/WebCore/DerivedSources-input.xcfilelist

    r291867 r292045  
    893893$(PROJECT_DIR)/crypto/parameters/RsaPssParams.idl
    894894$(PROJECT_DIR)/css/CSSConditionRule.idl
     895$(PROJECT_DIR)/css/CSSContainerRule.idl
    895896$(PROJECT_DIR)/css/CSSCounterStyleRule.idl
    896897$(PROJECT_DIR)/css/CSSFontFaceRule.idl
  • trunk/Source/WebCore/DerivedSources-output.xcfilelist

    r291893 r292045  
    300300$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.cpp
    301301$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.h
     302$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSContainerRule.cpp
     303$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSContainerRule.h
    302304$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.cpp
    303305$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.h
  • trunk/Source/WebCore/DerivedSources.make

    r291867 r292045  
    772772    $(WebCore)/crypto/parameters/RsaPssParams.idl \
    773773    $(WebCore)/css/CSSConditionRule.idl \
     774    $(WebCore)/css/CSSContainerRule.idl \
    774775    $(WebCore)/css/CSSCounterStyleRule.idl \
    775776    $(WebCore)/css/CSSFontFaceRule.idl \
  • trunk/Source/WebCore/Sources.txt

    r291867 r292045  
    716716css/CSSComputedStyleDeclaration.cpp
    717717css/CSSConditionRule.cpp
     718css/CSSContainerRule.cpp
    718719css/CSSContentDistributionValue.cpp
    719720css/CSSCounterStyleRule.cpp
     
    29482949JSCSSAnimation.cpp
    29492950JSCSSConditionRule.cpp
     2951JSCSSContainerRule.cpp
    29502952JSCSSCounterStyleRule.cpp
    29512953JSCSSFontFaceRule.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r291889 r292045  
    53835383                E46C794B1F13E82B00F371E1 /* StyleInvalidationFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A1822F1F13BE5800FEF698 /* StyleInvalidationFunctions.h */; };
    53845384                E47127CB163438AE00ED6F5A /* StyleInvalidator.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A97CF163059FC005DCD99 /* StyleInvalidator.h */; };
     5385                E476EF4A27E07A410056AC6E /* CSSContainerRule.h in Headers */ = {isa = PBXBuildFile; fileRef = E476EF4827E07A1A0056AC6E /* CSSContainerRule.h */; };
    53855386                E4778B80115A581A00B5D372 /* JSCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E4778B7E115A581A00B5D372 /* JSCustomEvent.h */; };
    53865387                E47A3AC61C5EAC9D00CCBFA7 /* StyleSharingResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A3AC41C5EAC7900CCBFA7 /* StyleSharingResolver.h */; };
     
    1753817539                E46A2B1D17CA76B1000DBCD8 /* ElementChildIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementChildIterator.h; sourceTree = "<group>"; };
    1753917540                E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDisallowedScope.h; sourceTree = "<group>"; };
     17541                E476EF4727E07A020056AC6E /* CSSContainerRule.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = CSSContainerRule.idl; sourceTree = "<group>"; };
     17542                E476EF4827E07A1A0056AC6E /* CSSContainerRule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSSContainerRule.h; sourceTree = "<group>"; };
     17543                E476EF4927E07A280056AC6E /* CSSContainerRule.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CSSContainerRule.cpp; sourceTree = "<group>"; };
    1754017544                E4778B7D115A581A00B5D372 /* JSCustomEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomEvent.cpp; sourceTree = "<group>"; };
    1754117545                E4778B7E115A581A00B5D372 /* JSCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomEvent.h; sourceTree = "<group>"; };
     
    3178531789                                930AAC98250EB8170013DA9F /* CSSConditionRule.h */,
    3178631790                                930AAC99250EB8180013DA9F /* CSSConditionRule.idl */,
     31791                                E476EF4927E07A280056AC6E /* CSSContainerRule.cpp */,
     31792                                E476EF4827E07A1A0056AC6E /* CSSContainerRule.h */,
     31793                                E476EF4727E07A020056AC6E /* CSSContainerRule.idl */,
    3178731794                                9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */,
    3178831795                                9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */,
     
    3420034207                                BCEA4790097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h in Headers */,
    3420134208                                930AAC9A250EB8490013DA9F /* CSSConditionRule.h in Headers */,
     34209                                E476EF4A27E07A410056AC6E /* CSSContainerRule.h in Headers */,
    3420234210                                9DAC7C551AF2CAA200437C44 /* CSSContentDistributionValue.h in Headers */,
    3420334211                                98F9D66925FDE02200BD842D /* CSSCounterStyleRule.h in Headers */,
  • trunk/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp

    r288200 r292045  
    2727#include "JSCSSRule.h"
    2828
     29#include "CSSContainerRule.h"
    2930#include "CSSCounterStyleRule.h"
    3031#include "CSSFontFaceRule.h"
     
    4041#include "CSSStyleRule.h"
    4142#include "CSSSupportsRule.h"
     43#include "JSCSSContainerRule.h"
    4244#include "JSCSSCounterStyleRule.h"
    4345#include "JSCSSFontFaceRule.h"
     
    98100        return createWrapper<CSSLayerStatementRule>(globalObject, WTFMove(rule));
    99101    case StyleRuleType::Container:
     102        return createWrapper<CSSContainerRule>(globalObject, WTFMove(rule));
    100103    case StyleRuleType::Unknown:
    101104    case StyleRuleType::Charset:
  • trunk/Source/WebCore/css/ContainerQuery.cpp

    r291098 r292045  
    2626#include "ContainerQuery.h"
    2727
     28#include "CSSMarkup.h"
    2829#include <wtf/NeverDestroyed.h>
     30#include <wtf/text/StringBuilder.h>
    2931
    30 namespace WebCore::CQ {
    31 
     32namespace WebCore {
     33namespace CQ {
    3234namespace FeatureNames {
    3335
     
    8587}
    8688
     89void serialize(StringBuilder&, const SizeQuery&);
     90void serialize(StringBuilder&, const SizeFeature&);
     91template<typename ConditionType> void serialize(StringBuilder&, const ConditionType&);
     92
     93static void serialize(StringBuilder& builder, const ContainerQuery& containerQuery)
     94{
     95    WTF::switchOn(containerQuery, [&](auto& node) {
     96        builder.append('(');
     97        serialize(builder, node);
     98        builder.append(')');
     99    }, [&](const CQ::UnknownQuery& unknownQuery) {
     100        builder.append(unknownQuery.name);
     101        builder.append('(');
     102        builder.append(unknownQuery.text);
     103        builder.append(')');
     104    });
    87105}
    88106
     107void serialize(StringBuilder& builder, const SizeQuery& sizeQuery)
     108{
     109    WTF::switchOn(sizeQuery, [&](auto& node) {
     110        serialize(builder, node);
     111    });
     112}
     113
     114void serialize(StringBuilder& builder, const SizeFeature& sizeFeature)
     115{
     116    auto serializeComparisonOperator = [&](ComparisonOperator op) {
     117        builder.append(' ');
     118        switch (op) {
     119        case ComparisonOperator::LessThan:
     120            builder.append('<');
     121            break;
     122        case ComparisonOperator::LessThanOrEqual:
     123            builder.append("<=");
     124            break;
     125        case ComparisonOperator::Equal:
     126            builder.append('=');
     127            break;
     128        case ComparisonOperator::GreaterThan:
     129            builder.append('>');
     130            break;
     131        case ComparisonOperator::GreaterThanOrEqual:
     132            builder.append(">=");
     133            break;
     134        }
     135        builder.append(' ');
     136    };
     137
     138    if (sizeFeature.leftComparison) {
     139        builder.append(sizeFeature.leftComparison->value->cssText());
     140        serializeComparisonOperator(sizeFeature.leftComparison->op);
     141    }
     142
     143    serializeIdentifier(sizeFeature.name, builder);
     144
     145    if (sizeFeature.rightComparison) {
     146        serializeComparisonOperator(sizeFeature.rightComparison->op);
     147        builder.append(sizeFeature.rightComparison->value->cssText());
     148    }
     149}
     150
     151template<typename ConditionType>
     152void serialize(StringBuilder& builder, const ConditionType& condition)
     153{
     154    if (condition.queries.size() == 1 && condition.logicalOperator == LogicalOperator::Not) {
     155        builder.append("not ");
     156        serialize(builder, condition.queries.first());
     157        return;
     158    }
     159
     160    for (auto& query : condition.queries) {
     161        if (&query != &condition.queries.first())
     162            builder.append(condition.logicalOperator == LogicalOperator::And ? " and " : " or ");
     163        serialize(builder, query);
     164    }
     165}
     166
     167}
     168
     169void serialize(StringBuilder& builder, const ContainerQuery& query)
     170{
     171    CQ::serialize(builder, query);
     172}
     173
     174}
     175
  • trunk/Source/WebCore/css/ContainerQuery.h

    r291474 r292045  
    4040struct SizeFeature;
    4141
    42 struct UnknownQuery { };
     42struct UnknownQuery {
     43    String name;
     44    String text;
     45};
    4346
    4447using SizeQuery = std::variant<SizeCondition, SizeFeature>;
     
    98101using CachedQueryContainers = Vector<Ref<const Element>>;
    99102
     103void serialize(StringBuilder&, const ContainerQuery&);
     104
    100105}
  • trunk/Source/WebCore/css/ContainerQueryParser.cpp

    r291098 r292045  
    6262{
    6363    if (range.peek().type() == FunctionToken) {
    64         range.consumeBlock();
     64        auto name = range.peek().value();
     65        auto functionRange = range.consumeBlock();
    6566        // This is where we would support style() queries.
    66         return CQ::UnknownQuery { };
     67        return CQ::UnknownQuery { name.toString(), functionRange.serialize() };
    6768    }
    6869
  • trunk/Source/WebCore/css/StyleRule.cpp

    r291946 r292045  
    2323#include "StyleRule.h"
    2424
     25#include "CSSContainerRule.h"
    2526#include "CSSCounterStyleRule.h"
    2627#include "CSSDeferredParser.h"
     
    195196        break;
    196197    case StyleRuleType::Container:
    197         // FIXME: Implement CSSOM.
     198        rule = CSSContainerRule::create(downcast<StyleRuleContainer>(self), parentSheet);
    198199        break;
    199200    case StyleRuleType::Unknown:
Note: See TracChangeset for help on using the changeset viewer.