| Differences between
and this patch
- a/Source/WebCore/ChangeLog +47 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2022-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 NOBODY (OOPS!).
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
1
2022-03-28  Alan Bujtas  <zalan@apple.com>
48
2022-03-28  Alan Bujtas  <zalan@apple.com>
2
49
3
        [ macOS & Win ] fast/repaint/list-item-equal-style-change-no-repaint.html is a flaky failure
50
        [ macOS & Win ] fast/repaint/list-item-equal-style-change-no-repaint.html is a flaky failure
- a/Source/WebCore/DerivedSources-input.xcfilelist +1 lines
Lines 892-897 $(PROJECT_DIR)/crypto/parameters/RsaKeyGenParams.idl a/Source/WebCore/DerivedSources-input.xcfilelist_sec1
892
$(PROJECT_DIR)/crypto/parameters/RsaOaepParams.idl
892
$(PROJECT_DIR)/crypto/parameters/RsaOaepParams.idl
893
$(PROJECT_DIR)/crypto/parameters/RsaPssParams.idl
893
$(PROJECT_DIR)/crypto/parameters/RsaPssParams.idl
894
$(PROJECT_DIR)/css/CSSConditionRule.idl
894
$(PROJECT_DIR)/css/CSSConditionRule.idl
895
$(PROJECT_DIR)/css/CSSContainerRule.idl
895
$(PROJECT_DIR)/css/CSSCounterStyleRule.idl
896
$(PROJECT_DIR)/css/CSSCounterStyleRule.idl
896
$(PROJECT_DIR)/css/CSSFontFaceRule.idl
897
$(PROJECT_DIR)/css/CSSFontFaceRule.idl
897
$(PROJECT_DIR)/css/CSSFontPaletteValuesRule.idl
898
$(PROJECT_DIR)/css/CSSFontPaletteValuesRule.idl
- a/Source/WebCore/DerivedSources-output.xcfilelist +2 lines
Lines 299-304 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSColorValue.cpp a/Source/WebCore/DerivedSources-output.xcfilelist_sec1
299
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSColorValue.h
299
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSColorValue.h
300
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.cpp
300
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.cpp
301
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.h
301
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSConditionRule.h
302
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSContainerRule.cpp
303
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSContainerRule.h
302
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.cpp
304
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.cpp
303
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.h
305
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSCounterStyleRule.h
304
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSFontFaceRule.cpp
306
$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSFontFaceRule.cpp
- a/Source/WebCore/DerivedSources.make +1 lines
Lines 771-776 JS_BINDING_IDLS := \ a/Source/WebCore/DerivedSources.make_sec1
771
    $(WebCore)/crypto/parameters/RsaOaepParams.idl \
771
    $(WebCore)/crypto/parameters/RsaOaepParams.idl \
772
    $(WebCore)/crypto/parameters/RsaPssParams.idl \
772
    $(WebCore)/crypto/parameters/RsaPssParams.idl \
773
    $(WebCore)/css/CSSConditionRule.idl \
773
    $(WebCore)/css/CSSConditionRule.idl \
774
    $(WebCore)/css/CSSContainerRule.idl \
774
    $(WebCore)/css/CSSCounterStyleRule.idl \
775
    $(WebCore)/css/CSSCounterStyleRule.idl \
775
    $(WebCore)/css/CSSFontFaceRule.idl \
776
    $(WebCore)/css/CSSFontFaceRule.idl \
776
    $(WebCore)/css/CSSFontPaletteValuesRule.idl \
777
    $(WebCore)/css/CSSFontPaletteValuesRule.idl \
- a/Source/WebCore/Sources.txt +2 lines
Lines 715-720 css/CSSBorderImageSliceValue.cpp a/Source/WebCore/Sources.txt_sec1
715
css/CSSCanvasValue.cpp
715
css/CSSCanvasValue.cpp
716
css/CSSComputedStyleDeclaration.cpp
716
css/CSSComputedStyleDeclaration.cpp
717
css/CSSConditionRule.cpp
717
css/CSSConditionRule.cpp
718
css/CSSContainerRule.cpp
718
css/CSSContentDistributionValue.cpp
719
css/CSSContentDistributionValue.cpp
719
css/CSSCounterStyleRule.cpp
720
css/CSSCounterStyleRule.cpp
720
css/CSSCrossfadeValue.cpp
721
css/CSSCrossfadeValue.cpp
Lines 2947-2952 JSByteLengthQueuingStrategy.cpp a/Source/WebCore/Sources.txt_sec2
2947
JSCDATASection.cpp
2948
JSCDATASection.cpp
2948
JSCSSAnimation.cpp
2949
JSCSSAnimation.cpp
2949
JSCSSConditionRule.cpp
2950
JSCSSConditionRule.cpp
2951
JSCSSContainerRule.cpp
2950
JSCSSCounterStyleRule.cpp
2952
JSCSSCounterStyleRule.cpp
2951
JSCSSFontFaceRule.cpp
2953
JSCSSFontFaceRule.cpp
2952
JSCSSFontPaletteValuesRule.cpp
2954
JSCSSFontPaletteValuesRule.cpp
- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj +8 lines
Lines 5382-5387 a/Source/WebCore/WebCore.xcodeproj/project.pbxproj_sec1
5382
		E46B41F91CB24E70008F11DE /* ScriptDisallowedScope.h in Headers */ = {isa = PBXBuildFile; fileRef = E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
5382
		E46B41F91CB24E70008F11DE /* ScriptDisallowedScope.h in Headers */ = {isa = PBXBuildFile; fileRef = E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
5383
		E46C794B1F13E82B00F371E1 /* StyleInvalidationFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A1822F1F13BE5800FEF698 /* StyleInvalidationFunctions.h */; };
5383
		E46C794B1F13E82B00F371E1 /* StyleInvalidationFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A1822F1F13BE5800FEF698 /* StyleInvalidationFunctions.h */; };
5384
		E47127CB163438AE00ED6F5A /* StyleInvalidator.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A97CF163059FC005DCD99 /* StyleInvalidator.h */; };
5384
		E47127CB163438AE00ED6F5A /* StyleInvalidator.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A97CF163059FC005DCD99 /* StyleInvalidator.h */; };
5385
		E476EF4A27E07A410056AC6E /* CSSContainerRule.h in Headers */ = {isa = PBXBuildFile; fileRef = E476EF4827E07A1A0056AC6E /* CSSContainerRule.h */; };
5385
		E4778B80115A581A00B5D372 /* JSCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E4778B7E115A581A00B5D372 /* JSCustomEvent.h */; };
5386
		E4778B80115A581A00B5D372 /* JSCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E4778B7E115A581A00B5D372 /* JSCustomEvent.h */; };
5386
		E47A3AC61C5EAC9D00CCBFA7 /* StyleSharingResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A3AC41C5EAC7900CCBFA7 /* StyleSharingResolver.h */; };
5387
		E47A3AC61C5EAC9D00CCBFA7 /* StyleSharingResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A3AC41C5EAC7900CCBFA7 /* StyleSharingResolver.h */; };
5387
		E47B4BE80E71241600038854 /* CachedResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = E47B4BE60E71241600038854 /* CachedResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
5388
		E47B4BE80E71241600038854 /* CachedResourceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = E47B4BE60E71241600038854 /* CachedResourceHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
Lines 17537-17542 a/Source/WebCore/WebCore.xcodeproj/project.pbxproj_sec2
17537
		E46A2B1B17CA65B9000DBCD8 /* TypedElementDescendantIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedElementDescendantIterator.h; sourceTree = "<group>"; };
17538
		E46A2B1B17CA65B9000DBCD8 /* TypedElementDescendantIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TypedElementDescendantIterator.h; sourceTree = "<group>"; };
17538
		E46A2B1D17CA76B1000DBCD8 /* ElementChildIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementChildIterator.h; sourceTree = "<group>"; };
17539
		E46A2B1D17CA76B1000DBCD8 /* ElementChildIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementChildIterator.h; sourceTree = "<group>"; };
17539
		E46B41F81CB24E70008F11DE /* ScriptDisallowedScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDisallowedScope.h; sourceTree = "<group>"; };
17540
		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>"; };
17540
		E4778B7D115A581A00B5D372 /* JSCustomEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomEvent.cpp; sourceTree = "<group>"; };
17544
		E4778B7D115A581A00B5D372 /* JSCustomEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomEvent.cpp; sourceTree = "<group>"; };
17541
		E4778B7E115A581A00B5D372 /* JSCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomEvent.h; sourceTree = "<group>"; };
17545
		E4778B7E115A581A00B5D372 /* JSCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomEvent.h; sourceTree = "<group>"; };
17542
		E47A3AC21C5EABBE00CCBFA7 /* StyleSharingResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleSharingResolver.cpp; sourceTree = "<group>"; };
17546
		E47A3AC21C5EABBE00CCBFA7 /* StyleSharingResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleSharingResolver.cpp; sourceTree = "<group>"; };
Lines 31784-31789 a/Source/WebCore/WebCore.xcodeproj/project.pbxproj_sec3
31784
				930AAC96250EB8170013DA9F /* CSSConditionRule.cpp */,
31788
				930AAC96250EB8170013DA9F /* CSSConditionRule.cpp */,
31785
				930AAC98250EB8170013DA9F /* CSSConditionRule.h */,
31789
				930AAC98250EB8170013DA9F /* CSSConditionRule.h */,
31786
				930AAC99250EB8180013DA9F /* CSSConditionRule.idl */,
31790
				930AAC99250EB8180013DA9F /* CSSConditionRule.idl */,
31791
				E476EF4927E07A280056AC6E /* CSSContainerRule.cpp */,
31792
				E476EF4827E07A1A0056AC6E /* CSSContainerRule.h */,
31793
				E476EF4727E07A020056AC6E /* CSSContainerRule.idl */,
31787
				9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */,
31794
				9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */,
31788
				9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */,
31795
				9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */,
31789
				98F9D66525FDDFE700BD842D /* CSSCounterStyleRule.cpp */,
31796
				98F9D66525FDDFE700BD842D /* CSSCounterStyleRule.cpp */,
Lines 34199-34204 a/Source/WebCore/WebCore.xcodeproj/project.pbxproj_sec4
34199
				BC6049CC0DB560C200204739 /* CSSCanvasValue.h in Headers */,
34206
				BC6049CC0DB560C200204739 /* CSSCanvasValue.h in Headers */,
34200
				BCEA4790097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h in Headers */,
34207
				BCEA4790097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h in Headers */,
34201
				930AAC9A250EB8490013DA9F /* CSSConditionRule.h in Headers */,
34208
				930AAC9A250EB8490013DA9F /* CSSConditionRule.h in Headers */,
34209
				E476EF4A27E07A410056AC6E /* CSSContainerRule.h in Headers */,
34202
				9DAC7C551AF2CAA200437C44 /* CSSContentDistributionValue.h in Headers */,
34210
				9DAC7C551AF2CAA200437C44 /* CSSContentDistributionValue.h in Headers */,
34203
				98F9D66925FDE02200BD842D /* CSSCounterStyleRule.h in Headers */,
34211
				98F9D66925FDE02200BD842D /* CSSCounterStyleRule.h in Headers */,
34204
				2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */,
34212
				2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */,
- a/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp +3 lines
Lines 26-31 a/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp_sec1
26
#include "config.h"
26
#include "config.h"
27
#include "JSCSSRule.h"
27
#include "JSCSSRule.h"
28
28
29
#include "CSSContainerRule.h"
29
#include "CSSCounterStyleRule.h"
30
#include "CSSCounterStyleRule.h"
30
#include "CSSFontFaceRule.h"
31
#include "CSSFontFaceRule.h"
31
#include "CSSFontPaletteValuesRule.h"
32
#include "CSSFontPaletteValuesRule.h"
Lines 39-44 a/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp_sec2
39
#include "CSSPageRule.h"
40
#include "CSSPageRule.h"
40
#include "CSSStyleRule.h"
41
#include "CSSStyleRule.h"
41
#include "CSSSupportsRule.h"
42
#include "CSSSupportsRule.h"
43
#include "JSCSSContainerRule.h"
42
#include "JSCSSCounterStyleRule.h"
44
#include "JSCSSCounterStyleRule.h"
43
#include "JSCSSFontFaceRule.h"
45
#include "JSCSSFontFaceRule.h"
44
#include "JSCSSFontPaletteValuesRule.h"
46
#include "JSCSSFontPaletteValuesRule.h"
Lines 97-102 JSValue toJSNewlyCreated(JSGlobalObject*, JSDOMGlobalObject* globalObject, Ref<C a/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp_sec3
97
    case StyleRuleType::LayerStatement:
99
    case StyleRuleType::LayerStatement:
98
        return createWrapper<CSSLayerStatementRule>(globalObject, WTFMove(rule));
100
        return createWrapper<CSSLayerStatementRule>(globalObject, WTFMove(rule));
99
    case StyleRuleType::Container:
101
    case StyleRuleType::Container:
102
        return createWrapper<CSSContainerRule>(globalObject, WTFMove(rule));
100
    case StyleRuleType::Unknown:
103
    case StyleRuleType::Unknown:
101
    case StyleRuleType::Charset:
104
    case StyleRuleType::Charset:
102
    case StyleRuleType::Margin:
105
    case StyleRuleType::Margin:
- a/Source/WebCore/css/CSSContainerRule.cpp +80 lines
Line 0 a/Source/WebCore/css/CSSContainerRule.cpp_sec1
1
/*
2
 * Copyright (C) 2022 Apple Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
#include "config.h"
27
#include "CSSContainerRule.h"
28
29
#include "CSSMarkup.h"
30
#include "CSSStyleSheet.h"
31
#include "StyleRule.h"
32
#include <wtf/text/StringBuilder.h>
33
34
namespace WebCore {
35
36
CSSContainerRule::CSSContainerRule(StyleRuleContainer& rule, CSSStyleSheet* parent)
37
    : CSSConditionRule(rule, parent)
38
{
39
}
40
41
Ref<CSSContainerRule> CSSContainerRule::create(StyleRuleContainer& rule, CSSStyleSheet* parent)
42
{
43
    return adoptRef(*new CSSContainerRule(rule, parent));
44
}
45
46
const StyleRuleContainer& CSSContainerRule::styleRuleContainer() const
47
{
48
    return downcast<StyleRuleContainer>(groupRule());
49
}
50
51
String CSSContainerRule::cssText() const
52
{
53
    StringBuilder builder;
54
55
    builder.append("@container ");
56
57
    auto name = styleRuleContainer().filteredQuery().nameFilter;
58
    if (!name.isEmpty()) {
59
        serializeIdentifier(name, builder);
60
        builder.append(' ');
61
    }
62
63
    serialize(builder, styleRuleContainer().filteredQuery().query);
64
65
    builder.append(" {\n");
66
    appendCSSTextForItems(builder);
67
    builder.append('}');
68
69
    return builder.toString();
70
}
71
72
String CSSContainerRule::conditionText() const
73
{
74
    StringBuilder builder;
75
    serialize(builder, styleRuleContainer().filteredQuery().query);
76
    return builder.toString();
77
}
78
79
} // namespace WebCore
80
- a/Source/WebCore/css/CSSContainerRule.h +50 lines
Line 0 a/Source/WebCore/css/CSSContainerRule.h_sec1
1
/*
2
 * Copyright (C) 2022 Apple Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
#pragma once
27
28
#include "CSSConditionRule.h"
29
30
namespace WebCore {
31
32
class StyleRuleContainer;
33
34
class CSSContainerRule final : public CSSConditionRule {
35
public:
36
    static Ref<CSSContainerRule> create(StyleRuleContainer&, CSSStyleSheet* parent);
37
38
    String cssText() const final;
39
    String conditionText() const final;
40
41
private:
42
    const StyleRuleContainer& styleRuleContainer() const;
43
44
    CSSContainerRule(StyleRuleContainer&, CSSStyleSheet*);
45
    StyleRuleType styleRuleType() const final { return StyleRuleType::Container; }
46
};
47
48
} // namespace WebCore
49
50
SPECIALIZE_TYPE_TRAITS_CSS_RULE(CSSContainerRule, StyleRuleType::Container)
- a/Source/WebCore/css/CSSContainerRule.idl +30 lines
Line 0 a/Source/WebCore/css/CSSContainerRule.idl_sec1
1
/*
2
 * Copyright (C) 2022 Apple Inc. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or without
5
 * modification, are permitted provided that the following conditions
6
 * are met:
7
 * 1. Redistributions of source code must retain the above copyright
8
 *    notice, this list of conditions and the following disclaimer.
9
 * 2. Redistributions in binary form must reproduce the above copyright
10
 *    notice, this list of conditions and the following disclaimer in the
11
 *    documentation and/or other materials provided with the distribution.
12
 *
13
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
 * THE POSSIBILITY OF SUCH DAMAGE.
24
 */
25
26
[
27
    Exposed=Window
28
] interface CSSContainerRule : CSSConditionRule {
29
};
30
- a/Source/WebCore/css/ContainerQuery.cpp -2 / +89 lines
Lines 25-34 a/Source/WebCore/css/ContainerQuery.cpp_sec1
25
#include "config.h"
25
#include "config.h"
26
#include "ContainerQuery.h"
26
#include "ContainerQuery.h"
27
27
28
#include "CSSMarkup.h"
28
#include <wtf/NeverDestroyed.h>
29
#include <wtf/NeverDestroyed.h>
30
#include <wtf/text/StringBuilder.h>
29
31
30
namespace WebCore::CQ {
32
namespace WebCore {
31
33
namespace CQ {
32
namespace FeatureNames {
34
namespace FeatureNames {
33
35
34
const AtomString& width()
36
const AtomString& width()
Lines 84-88 OptionSet<Axis> requiredAxesForFeature(const AtomString& featureName) a/Source/WebCore/css/ContainerQuery.cpp_sec2
84
    return { };
86
    return { };
85
}
87
}
86
88
89
void serialize(StringBuilder&, const SizeQuery&);
90
void serialize(StringBuilder&, const SizeFeature&);
91
template<typename ConditionType> void serialize(StringBuilder&, const ConditionType&);
92
93
static 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
    });
105
}
106
107
void serialize(StringBuilder& builder, const SizeQuery& sizeQuery)
108
{
109
    WTF::switchOn(sizeQuery, [&](auto& node) {
110
        serialize(builder, node);
111
    });
112
}
113
114
void 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
151
template<typename ConditionType>
152
void 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
169
void serialize(StringBuilder& builder, const ContainerQuery& query)
170
{
171
    CQ::serialize(builder, query);
172
}
173
87
}
174
}
88
175
- a/Source/WebCore/css/ContainerQuery.h -1 / +6 lines
Lines 39-45 struct ContainerCondition; a/Source/WebCore/css/ContainerQuery.h_sec1
39
struct SizeCondition;
39
struct SizeCondition;
40
struct SizeFeature;
40
struct SizeFeature;
41
41
42
struct UnknownQuery { };
42
struct UnknownQuery {
43
    String name;
44
    String text;
45
};
43
46
44
using SizeQuery = std::variant<SizeCondition, SizeFeature>;
47
using SizeQuery = std::variant<SizeCondition, SizeFeature>;
45
using ContainerQuery = std::variant<ContainerCondition, SizeQuery, UnknownQuery>;
48
using ContainerQuery = std::variant<ContainerCondition, SizeQuery, UnknownQuery>;
Lines 97-100 struct FilteredContainerQuery { a/Source/WebCore/css/ContainerQuery.h_sec2
97
100
98
using CachedQueryContainers = Vector<Ref<const Element>>;
101
using CachedQueryContainers = Vector<Ref<const Element>>;
99
102
103
void serialize(StringBuilder&, const ContainerQuery&);
104
100
}
105
}
- a/Source/WebCore/css/ContainerQueryParser.cpp -2 / +3 lines
Lines 61-69 std::optional<FilteredContainerQuery> ContainerQueryParser::consumeFilteredConta a/Source/WebCore/css/ContainerQueryParser.cpp_sec1
61
std::optional<CQ::ContainerQuery> ContainerQueryParser::consumeContainerQuery(CSSParserTokenRange& range)
61
std::optional<CQ::ContainerQuery> ContainerQueryParser::consumeContainerQuery(CSSParserTokenRange& range)
62
{
62
{
63
    if (range.peek().type() == FunctionToken) {
63
    if (range.peek().type() == FunctionToken) {
64
        range.consumeBlock();
64
        auto name = range.peek().value();
65
        auto functionRange = range.consumeBlock();
65
        // This is where we would support style() queries.
66
        // This is where we would support style() queries.
66
        return CQ::UnknownQuery { };
67
        return CQ::UnknownQuery { name.toString(), functionRange.serialize() };
67
    }
68
    }
68
69
69
    if (range.peek().type() == LeftParenthesisToken) {
70
    if (range.peek().type() == LeftParenthesisToken) {
- a/Source/WebCore/css/StyleRule.cpp -1 / +2 lines
Lines 22-27 a/Source/WebCore/css/StyleRule.cpp_sec1
22
#include "config.h"
22
#include "config.h"
23
#include "StyleRule.h"
23
#include "StyleRule.h"
24
24
25
#include "CSSContainerRule.h"
25
#include "CSSCounterStyleRule.h"
26
#include "CSSCounterStyleRule.h"
26
#include "CSSDeferredParser.h"
27
#include "CSSDeferredParser.h"
27
#include "CSSFontFaceRule.h"
28
#include "CSSFontFaceRule.h"
Lines 194-200 Ref<CSSRule> StyleRuleBase::createCSSOMWrapper(CSSStyleSheet* parentSheet, CSSRu a/Source/WebCore/css/StyleRule.cpp_sec2
194
        rule = CSSLayerStatementRule::create(downcast<StyleRuleLayer>(self), parentSheet);
195
        rule = CSSLayerStatementRule::create(downcast<StyleRuleLayer>(self), parentSheet);
195
        break;
196
        break;
196
    case StyleRuleType::Container:
197
    case StyleRuleType::Container:
197
        // FIXME: Implement CSSOM.
198
        rule = CSSContainerRule::create(downcast<StyleRuleContainer>(self), parentSheet);
198
        break;
199
        break;
199
    case StyleRuleType::Unknown:
200
    case StyleRuleType::Unknown:
200
    case StyleRuleType::Charset:
201
    case StyleRuleType::Charset:
- a/LayoutTests/ChangeLog +9 lines
Lines 1-3 a/LayoutTests/ChangeLog_sec1
1
2022-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 NOBODY (OOPS!).
7
8
        * TestExpectations:
9
1
2022-03-28  Alan Bujtas  <zalan@apple.com>
10
2022-03-28  Alan Bujtas  <zalan@apple.com>
2
11
3
        [ macOS & Win ] fast/repaint/list-item-equal-style-change-no-repaint.html is a flaky failure
12
        [ macOS & Win ] fast/repaint/list-item-equal-style-change-no-repaint.html is a flaky failure
- a/LayoutTests/imported/w3c/ChangeLog +10 lines
Lines 1-3 a/LayoutTests/imported/w3c/ChangeLog_sec1
1
2022-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 NOBODY (OOPS!).
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
1
2022-03-28  Nikolaos Mouchtaris  <nmouchtaris@apple.com>
11
2022-03-28  Nikolaos Mouchtaris  <nmouchtaris@apple.com>
2
12
3
        Clamp degenerate calc() values for <angle>
13
        Clamp degenerate calc() values for <angle>
- a/LayoutTests/TestExpectations -2 lines
Lines 4698-4705 imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-004.html [ a/LayoutTests/TestExpectations_sec1
4698
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/custom-layout-container-001.https.html [ ImageOnlyFailure ]
4698
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/custom-layout-container-001.https.html [ ImageOnlyFailure ]
4699
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/pseudo-elements-002.html [ ImageOnlyFailure ]
4699
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/pseudo-elements-002.html [ ImageOnlyFailure ]
4700
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/svg-foreignobject-no-size-container.html [ Skip ]
4700
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/svg-foreignobject-no-size-container.html [ Skip ]
4701
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/at-container-serialization.html [ Skip ]
4702
webkit.org/b/229659 imported/w3c/web-platform-tests/css/css-contain/container-queries/idlharness.html [ Skip ]
4703
4701
4704
# Flaky css-contain test
4702
# Flaky css-contain test
4705
imported/w3c/web-platform-tests/css/css-contain/content-visibility/animation-display-lock.html [ Failure Pass ]
4703
imported/w3c/web-platform-tests/css/css-contain/content-visibility/animation-display-lock.html [ Failure Pass ]
- a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/at-container-serialization-expected.txt -3 / +3 lines
Lines 1-5 a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/at-container-serialization-expected.txt_sec1
1
1
2
FAIL Serialization of conditionText null is not an object (evaluating 'rules[0].cssRules')
2
PASS Serialization of conditionText
3
FAIL Serialization of inner @container rule null is not an object (evaluating 'rules[0].cssRules')
3
PASS Serialization of inner @container rule
4
FAIL Serialization of nested @container rule null is not an object (evaluating 'rules[0].cssText')
4
PASS Serialization of nested @container rule
5
5
- a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/idlharness-expected.txt +14 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/idlharness-expected.txt_sec1
1
2
PASS idl_test setup
3
PASS idl_test validation
4
PASS CSSContainerRule interface: existence and properties of interface object
5
PASS CSSContainerRule interface object length
6
PASS CSSContainerRule interface object name
7
PASS CSSContainerRule interface: existence and properties of interface prototype object
8
PASS CSSContainerRule interface: existence and properties of interface prototype object's "constructor" property
9
PASS CSSContainerRule interface: existence and properties of interface prototype object's @@unscopables property
10
PASS CSSContainerRule must be primary interface of sheet.cssRules[0]
11
PASS Stringification of sheet.cssRules[0]
12
PASS CSSContainerRule must be primary interface of sheet.cssRules[0].cssRules[0]
13
PASS Stringification of sheet.cssRules[0].cssRules[0]
14

Return to Bug 238500