Changeset 286845 in webkit
- Timestamp:
- Dec 10, 2021, 5:28:28 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 13 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/Scripts/Preferences/WebPreferencesExperimental.yaml (modified) (1 diff)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/css/StyleRule.cpp (modified) (5 diffs)
-
WebCore/css/StyleRule.h (modified) (4 diffs)
-
WebCore/css/StyleRuleType.h (modified) (1 diff)
-
WebCore/css/StyleSheetContents.cpp (modified) (2 diffs)
-
WebCore/css/parser/CSSAtRuleID.cpp (modified) (1 diff)
-
WebCore/css/parser/CSSAtRuleID.h (modified) (1 diff)
-
WebCore/css/parser/CSSParserContext.cpp (modified) (3 diffs)
-
WebCore/css/parser/CSSParserContext.h (modified) (1 diff)
-
WebCore/css/parser/CSSParserImpl.cpp (modified) (2 diffs)
-
WebCore/css/parser/CSSParserImpl.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r286828 r286845 1 2021-12-10 Antti Koivisto <antti@apple.com> 2 3 [CSS Container Queries] Basic @container at-rule parsing support 4 https://bugs.webkit.org/show_bug.cgi?id=234135 5 6 Reviewed by Antoine Quint. 7 8 * Scripts/Preferences/WebPreferencesExperimental.yaml: 9 10 Add preference for container queries, disabled by default. 11 1 12 2021-12-09 Alan Bujtas <zalan@apple.com> 2 13 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml
r286828 r286845 225 225 default: false 226 226 227 CSSContainerQueriesEnabled: 228 type: bool 229 humanReadableName: "CSS Container Queries" 230 humanReadableDescription: "Enable CSS Container Queries" 231 defaultValue: 232 WebKitLegacy: 233 default: false 234 WebKit: 235 default: false 236 WebCore: 237 default: false 238 227 239 CSSContainmentEnabled: 228 240 type: bool -
trunk/Source/WebCore/ChangeLog
r286843 r286845 1 2021-12-10 Antti Koivisto <antti@apple.com> 2 3 [CSS Container Queries] Basic @container at-rule parsing support 4 https://bugs.webkit.org/show_bug.cgi?id=234135 5 6 Reviewed by Antoine Quint. 7 8 Implement basic support for parsing @container at-rules. 9 This patch doesn't yet parse the queries themselves. 10 11 Disabled by default. 12 13 * css/StyleRule.cpp: 14 (WebCore::StyleRuleBase::destroy): 15 (WebCore::StyleRuleBase::copy const): 16 (WebCore::StyleRuleBase::createCSSOMWrapper const): 17 (WebCore::StyleRuleContainer::StyleRuleContainer): 18 (WebCore::StyleRuleContainer::create): 19 * css/StyleRule.h: 20 (WebCore::StyleRuleBase::isContainerRule const): 21 (isType): 22 * css/StyleRuleType.h: 23 * css/StyleSheetContents.cpp: 24 (WebCore::traverseRulesInVector): 25 (WebCore::StyleSheetContents::traverseSubresources const): 26 * css/parser/CSSAtRuleID.cpp: 27 (WebCore::cssAtRuleID): 28 * css/parser/CSSAtRuleID.h: 29 * css/parser/CSSParserContext.cpp: 30 (WebCore::operator==): 31 (WebCore::add): 32 * css/parser/CSSParserContext.h: 33 * css/parser/CSSParserImpl.cpp: 34 (WebCore::CSSParserImpl::consumeAtRule): 35 (WebCore::CSSParserImpl::consumeContainerRule): 36 * css/parser/CSSParserImpl.h: 37 1 38 2021-12-10 Nikolas Zimmermann <nzimmermann@igalia.com> 2 39 -
trunk/Source/WebCore/css/StyleRule.cpp
r286657 r286845 105 105 delete downcast<StyleRuleLayer>(this); 106 106 return; 107 case StyleRuleType::Container: 108 delete downcast<StyleRuleContainer>(this); 109 return; 107 110 case StyleRuleType::Unknown: 108 111 ASSERT_NOT_REACHED(); … … 134 137 case StyleRuleType::LayerStatement: 135 138 return downcast<StyleRuleLayer>(*this).copy(); 139 case StyleRuleType::Container: 140 return downcast<StyleRuleContainer>(*this).copy(); 136 141 case StyleRuleType::Import: 137 142 case StyleRuleType::Namespace: … … 186 191 case StyleRuleType::LayerStatement: 187 192 rule = CSSLayerStatementRule::create(downcast<StyleRuleLayer>(self), parentSheet); 193 break; 194 case StyleRuleType::Container: 195 // FIXME: Implement CSSOM. 188 196 break; 189 197 case StyleRuleType::Unknown: … … 363 371 } 364 372 373 DeferredStyleGroupRuleList::~DeferredStyleGroupRuleList() = default; 374 365 375 void DeferredStyleGroupRuleList::parseDeferredRules(Vector<RefPtr<StyleRuleBase>>& childRules) 366 376 { … … 524 534 } 525 535 536 StyleRuleContainer::StyleRuleContainer(ContainerQuery&& query, Vector<RefPtr<StyleRuleBase>>&& rules) 537 : StyleRuleGroup(StyleRuleType::Container, WTFMove(rules)) 538 , m_query(WTFMove(query)) 539 { 540 } 541 542 StyleRuleContainer::StyleRuleContainer(ContainerQuery&& query, std::unique_ptr<DeferredStyleGroupRuleList>&& rules) 543 : StyleRuleGroup(StyleRuleType::Container, WTFMove(rules)) 544 , m_query(WTFMove(query)) 545 { 546 } 547 548 StyleRuleContainer::StyleRuleContainer(const StyleRuleContainer& other) 549 : StyleRuleGroup(other) 550 , m_query(other.m_query) 551 { 552 } 553 554 Ref<StyleRuleContainer> StyleRuleContainer::create(ContainerQuery&& query, Vector<RefPtr<StyleRuleBase>>&& rules) 555 { 556 return adoptRef(*new StyleRuleContainer(WTFMove(query), WTFMove(rules))); 557 } 558 559 Ref<StyleRuleContainer> StyleRuleContainer::create(ContainerQuery&& query, std::unique_ptr<DeferredStyleGroupRuleList>&& rules) 560 { 561 return adoptRef(*new StyleRuleContainer(WTFMove(query), WTFMove(rules))); 562 } 563 526 564 StyleRuleCharset::StyleRuleCharset() 527 565 : StyleRuleBase(StyleRuleType::Charset) -
trunk/Source/WebCore/css/StyleRule.h
r286657 r286845 61 61 bool isPageRule() const { return type() == StyleRuleType::Page; } 62 62 bool isStyleRule() const { return type() == StyleRuleType::Style; } 63 bool isGroupRule() const { return type() == StyleRuleType::Media || type() == StyleRuleType::Supports || type() == StyleRuleType::LayerBlock ; }63 bool isGroupRule() const { return type() == StyleRuleType::Media || type() == StyleRuleType::Supports || type() == StyleRuleType::LayerBlock || type() == StyleRuleType::Container; } 64 64 bool isSupportsRule() const { return type() == StyleRuleType::Supports; } 65 65 bool isImportRule() const { return type() == StyleRuleType::Import; } 66 66 bool isLayerRule() const { return type() == StyleRuleType::LayerBlock || type() == StyleRuleType::LayerStatement; } 67 bool isContainerRule() const { return type() == StyleRuleType::Container; } 67 68 68 69 Ref<StyleRuleBase> copy() const; … … 229 230 public: 230 231 DeferredStyleGroupRuleList(const CSSParserTokenRange&, CSSDeferredParser&); 232 ~DeferredStyleGroupRuleList(); 231 233 232 234 void parseDeferredRules(Vector<RefPtr<StyleRuleBase>>&); … … 313 315 }; 314 316 317 struct ContainerQuery { }; 318 319 class StyleRuleContainer final : public StyleRuleGroup { 320 public: 321 static Ref<StyleRuleContainer> create(ContainerQuery&&, Vector<RefPtr<StyleRuleBase>>&&); 322 static Ref<StyleRuleContainer> create(ContainerQuery&&, std::unique_ptr<DeferredStyleGroupRuleList>&&); 323 Ref<StyleRuleContainer> copy() const { return adoptRef(*new StyleRuleContainer(*this)); } 324 325 const ContainerQuery& query() const { return m_query; } 326 327 private: 328 StyleRuleContainer(ContainerQuery&&, Vector<RefPtr<StyleRuleBase>>&&); 329 StyleRuleContainer(ContainerQuery&&, std::unique_ptr<DeferredStyleGroupRuleList>&&); 330 StyleRuleContainer(const StyleRuleContainer&); 331 332 ContainerQuery m_query; 333 }; 334 315 335 // This is only used by the CSS parser. 316 336 class StyleRuleCharset final : public StyleRuleBase { … … 436 456 static bool isType(const WebCore::StyleRuleBase& rule) { return rule.isLayerRule(); } 437 457 SPECIALIZE_TYPE_TRAITS_END() 458 459 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::StyleRuleContainer) 460 static bool isType(const WebCore::StyleRuleBase& rule) { return rule.isContainerRule(); } 461 SPECIALIZE_TYPE_TRAITS_END() -
trunk/Source/WebCore/css/StyleRuleType.h
r286657 r286845 43 43 LayerBlock = 16, 44 44 LayerStatement = 17, 45 Container = 18, 45 46 FontPaletteValues = 19, 46 47 }; -
trunk/Source/WebCore/css/StyleSheetContents.cpp
r286657 r286845 459 459 case StyleRuleType::Media: 460 460 case StyleRuleType::Supports: 461 case StyleRuleType::LayerBlock: { 461 case StyleRuleType::LayerBlock: 462 case StyleRuleType::Container: { 462 463 auto* childRules = downcast<StyleRuleGroup>(*rule).childRulesWithoutDeferredParsing(); 463 464 if (childRules && traverseRulesInVector(*childRules, handler)) … … 523 524 case StyleRuleType::LayerBlock: 524 525 case StyleRuleType::LayerStatement: 526 case StyleRuleType::Container: 525 527 case StyleRuleType::FontPaletteValues: 526 528 return false; -
trunk/Source/WebCore/css/parser/CSSAtRuleID.cpp
r282806 r286845 57 57 if (equalIgnoringASCIICase(name, "-webkit-keyframes")) 58 58 return CSSAtRuleWebkitKeyframes; 59 if (equalIgnoringASCIICase(name, "apply"))60 return CSSAtRuleApply;61 59 if (equalIgnoringASCIICase(name, "counter-style")) 62 60 return CSSAtRuleCounterStyle; 63 61 if (equalIgnoringASCIICase(name, "layer")) 64 62 return CSSAtRuleLayer; 63 if (equalIgnoringASCIICase(name, "container")) 64 return CSSAtRuleContainer; 65 65 return CSSAtRuleInvalid; 66 66 } -
trunk/Source/WebCore/css/parser/CSSAtRuleID.h
r282806 r286845 36 36 CSSAtRuleInvalid = 0, 37 37 38 CSSAtRuleCharset = 1,39 CSSAtRuleFontFace = 2,40 CSSAtRuleImport = 3,41 CSSAtRuleKeyframes = 4,42 CSSAtRuleMedia = 5,43 CSSAtRuleNamespace = 6,44 CSSAtRulePage = 7,45 CSSAtRuleSupports = 8,46 CSSAtRuleViewport = 9,38 CSSAtRuleCharset, 39 CSSAtRuleFontFace, 40 CSSAtRuleImport, 41 CSSAtRuleKeyframes, 42 CSSAtRuleMedia, 43 CSSAtRuleNamespace, 44 CSSAtRulePage, 45 CSSAtRuleSupports, 46 CSSAtRuleViewport, 47 47 48 CSSAtRuleWebkitKeyframes = 10,49 CSSAtRule Apply = 11,50 CSSAtRule CounterStyle = 12,51 CSSAtRule Layer = 13,48 CSSAtRuleWebkitKeyframes, 49 CSSAtRuleCounterStyle, 50 CSSAtRuleLayer, 51 CSSAtRuleContainer, 52 52 53 CSSAtRuleFontPaletteValues = 14,53 CSSAtRuleFontPaletteValues, 54 54 }; 55 55 -
trunk/Source/WebCore/css/parser/CSSParserContext.cpp
r286775 r286845 106 106 , hasPseudoClassEnabled { document.settings().hasPseudoClassEnabled() } 107 107 , cascadeLayersEnabled { document.settings().cssCascadeLayersEnabled() } 108 , containerQueriesEnabled { document.settings().cssContainerQueriesEnabled() } 108 109 #if ENABLE(ATTACHMENT_ELEMENT) 109 110 , attachmentEnabled { RuntimeEnabledFeatures::sharedFeatures().attachmentElementEnabled() } … … 152 153 && a.hasPseudoClassEnabled == b.hasPseudoClassEnabled 153 154 && a.cascadeLayersEnabled == b.cascadeLayersEnabled 155 && a.containerQueriesEnabled == b.containerQueriesEnabled 154 156 #if ENABLE(ATTACHMENT_ELEMENT) 155 157 && a.attachmentEnabled == b.attachmentEnabled … … 191 193 | context.hasPseudoClassEnabled << 22 192 194 | context.cascadeLayersEnabled << 23 195 | context.containerQueriesEnabled << 24 193 196 #if ENABLE(ATTACHMENT_ELEMENT) 194 | context.attachmentEnabled << 2 4195 #endif 196 | context.overflowClipEnabled << 2 5197 | context.accentColorEnabled << 2 6198 | context.mode << 2 7; // This is multiple bits, so keep it last.197 | context.attachmentEnabled << 25 198 #endif 199 | context.overflowClipEnabled << 26 200 | context.accentColorEnabled << 27 201 | context.mode << 28; // This is multiple bits, so keep it last. 199 202 add(hasher, context.baseURL, context.charset, bits); 200 203 } -
trunk/Source/WebCore/css/parser/CSSParserContext.h
r286772 r286845 85 85 bool hasPseudoClassEnabled { false }; 86 86 bool cascadeLayersEnabled { false }; 87 bool containerQueriesEnabled { false }; 87 88 88 89 // RuntimeEnabledFeatures. -
trunk/Source/WebCore/css/parser/CSSParserImpl.cpp
r286668 r286845 466 466 case CSSAtRuleLayer: 467 467 return consumeLayerRule(prelude, block); 468 case CSSAtRuleContainer: 469 return consumeContainerRule(prelude, block); 468 470 default: 469 471 return nullptr; // Parse error, unrecognised at-rule with block … … 856 858 } 857 859 858 // FIXME-NEWPARSER: Support "apply" 859 /*void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude) 860 { 861 const CSSParserToken& ident = prelude.consumeIncludingWhitespace(); 862 if (!prelude.atEnd() || !CSSVariableParser::isValidVariableName(ident)) 863 return; // Parse error, expected a single custom property name 864 m_parsedProperties.append(CSSProperty( 865 CSSPropertyApplyAtRule, 866 *CSSCustomIdentValue::create(ident.value().toString()))); 867 } 868 */ 860 RefPtr<StyleRuleContainer> CSSParserImpl::consumeContainerRule(CSSParserTokenRange prelude, CSSParserTokenRange block) 861 { 862 if (!m_context.containerQueriesEnabled) 863 return nullptr; 864 865 if (m_deferredParser) 866 return StyleRuleContainer::create({ }, makeUnique<DeferredStyleGroupRuleList>(block, *m_deferredParser)); 867 868 Vector<RefPtr<StyleRuleBase>> rules; 869 870 if (m_observerWrapper) { 871 m_observerWrapper->observer().startRuleHeader(StyleRuleType::Container, m_observerWrapper->startOffset(prelude)); 872 m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset(prelude)); 873 m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousTokenStartOffset(block)); 874 } 875 876 consumeRuleList(block, RegularRuleList, [&rules](RefPtr<StyleRuleBase> rule) { 877 rules.append(rule); 878 }); 879 rules.shrinkToFit(); 880 881 if (m_observerWrapper) 882 m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(block)); 883 884 return StyleRuleContainer::create({ }, WTFMove(rules)); 885 } 869 886 870 887 RefPtr<StyleRuleKeyframe> CSSParserImpl::consumeKeyframeStyleRule(CSSParserTokenRange prelude, CSSParserTokenRange block) -
trunk/Source/WebCore/css/parser/CSSParserImpl.h
r283120 r286845 141 141 RefPtr<StyleRuleCounterStyle> consumeCounterStyleRule(CSSParserTokenRange prelude, CSSParserTokenRange block); 142 142 RefPtr<StyleRuleLayer> consumeLayerRule(CSSParserTokenRange prelude, std::optional<CSSParserTokenRange> block); 143 144 // FIXME-NEWPARSER: Support "apply" 145 // void consumeApplyRule(CSSParserTokenRange prelude); 143 RefPtr<StyleRuleContainer> consumeContainerRule(CSSParserTokenRange prelude, CSSParserTokenRange block); 146 144 147 145 RefPtr<StyleRuleKeyframe> consumeKeyframeStyleRule(CSSParserTokenRange prelude, CSSParserTokenRange block);
Note:
See TracChangeset
for help on using the changeset viewer.