haikuwebkit/LayoutTests/webexposed/counter-style-is-not-expose...

18 lines
758 B
HTML
Raw Permalink Normal View History

[css-counter-styles] Parse and add feature flag for @counter-style https://bugs.webkit.org/show_bug.cgi?id=223150 Patch by Tyler Wilcock <twilco.o@protonmail.com> on 2021-04-16 Reviewed by Darin Adler. LayoutTests/imported/w3c: @counter-style and its descriptors are now exposed behind a feature flag, so pass some tests and fail others for a different reason because this patch doesn't actually implement descriptor parsing and setting yet. * web-platform-tests/css/css-counter-styles/counter-style-additive-symbols-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-fallback-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-name-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-negative-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-pad-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-prefix-suffix-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-range-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-speak-as-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-symbols-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/counter-style-system-syntax-expected.txt: * web-platform-tests/css/css-counter-styles/idlharness-expected.txt: * web-platform-tests/css/cssom/CSSCounterStyleRule-expected.txt: Source/WebCore: Parse @counter-style (without implementing descriptor parsing) behind a new feature flag, CSSCounterStyleAtRulesEnabled. A separate feature flag for @counter-style <image> symbol values has also been added, as image symbols have extra complexities that we won't want to hold the entire feature back on. https://www.w3.org/TR/css-counter-styles-3 The CSSCounterStyleRule IDL interface is also added and implemented, and similarly feature flagged. https://www.w3.org/TR/css-counter-styles-3/#apis Test: webexposed/counter-style-is-not-exposed.html and existing WPTs. * CMakeLists.txt: Add CSSCounterStyleRule.idl. * DerivedSources-input.xcfilelist: Add CSSCounterStyleRule.idl. * DerivedSources-output.xcfilelist: Add JSCSSCounterStyleRule.h and JSCSSCounterStyleRule.cpp. * DerivedSources.make: Add CSSCounterStyleRule.idl. * Sources.txt: Add CSSCounterStyleRule.cpp and JSCSSCounterStyleRule.cpp. * WebCore.xcodeproj/project.pbxproj: Add CounterStyle.h, CounterStyle.cpp, and CounterStyle.idl. * bindings/js/JSCSSRuleCustom.cpp: (WebCore::toJSNewlyCreated): Support CSSCounterStyleRule. * bindings/js/WebCoreBuiltinNames.h: Add macro(CSSCounterStyleRule) to generate counter-style built-in names. * css/CSSCounterStyleRule.cpp: Added. (WebCore::StyleRuleCounterStyle::StyleRuleCounterStyle): (WebCore::StyleRuleCounterStyle::create): (WebCore::StyleRuleCounterStyle::mutableProperties): (WebCore::CSSCounterStyleRule::CSSCounterStyleRule): (WebCore::CSSCounterStyleRule::reattach): (WebCore::CSSCounterStyleRule::cssText const): * css/CSSCounterStyleRule.h: Added. (isType): Add specialized rule.isCounterStyleRule() implementation. * css/CSSCounterStyleRule.idl: Added. * css/CSSRule.cpp: Add new StyleRuleType::CounterStyle COMPILE_ASSERT. * css/CSSRule.h: Add COUNTER_STYLE_RULE constant. Also add comment `// WebIDL enum` to disable enum_casing lint, since these values are named to match IDL attributes. * css/CSSRule.idl: Add COUNTER_STYLE_RULE constant behind flag. * css/StyleRule.cpp: (WebCore::StyleRuleBase::destroy): (WebCore::StyleRuleBase::copy const): (WebCore::StyleRuleBase::createCSSOMWrapper const): Handle newly added StyleRuleType::CounterStyle. * css/StyleRule.h: (WebCore::StyleRuleBase::isCounterStyleRule const): Added. * css/StyleRuleType.h: Add StyleRuleType::CounterStyle * css/StyleSheetContents.cpp: (WebCore::traverseRulesInVector): (WebCore::StyleSheetContents::traverseSubresources const): If @counter-style image symbols flag is enabled, do traverse subresources. * css/parser/CSSAtRuleID.cpp: If the @counter-style feature flag is enabled, return newly added CSSAtRuleCounterStyle ID. (WebCore::cssAtRuleID): * css/parser/CSSAtRuleID.h: Add CSSAtRuleCounterStyle ID. * css/parser/CSSParserContext.cpp: (WebCore::operator==): * css/parser/CSSParserContext.h: (WebCore::CSSParserContextHash::hash): Add cssCounterStyleAtRulesEnabled and cssCounterStyleAtRuleImageSymbolsEnabled flags. * css/parser/CSSParserFastPaths.cpp: (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): Refactor to use new CSSPropertyParserHelpers::isPredefinedCounterStyle method. * css/parser/CSSParserImpl.cpp: (WebCore::computeNewAllowedRules): (WebCore::CSSParserImpl::consumeAtRule): (WebCore::CSSParserImpl::consumeCounterStyleRule): Added. (WebCore::CSSParserImpl::consumeDeclarationList): (WebCore::CSSParserImpl::consumeDeclaration): * css/parser/CSSParserImpl.h: Handle new @counter-style rule. * css/parser/CSSPropertyParser.cpp: (WebCore::CSSPropertyParser::parseValue): Handle StyleRuleType::CounterStyle. (WebCore::consumeCounterContent): Refactor to use new CSSPropertyParserHelpers::isPredefinedCounterStyle method. (WebCore::CSSPropertyParser::parseCounterStyleDescriptor): Add placeholder for future @counter-style descriptor parsing work. * css/parser/CSSPropertyParser.h: Add parseCounterStyleDescriptor method * css/parser/CSSPropertyParserHelpers.h: * css/parser/CSSPropertyParserHelpers.cpp: (WebCore::CSSPropertyParserHelpers::consumeCustomIdent): Add new flag that allows consumed custom ident values to be lowercased on-parse. This is necessary for some <counter-style-name> values. (WebCore::CSSPropertyParserHelpers::isPredefinedCounterStyle): Added. (WebCore::CSSPropertyParserHelpers::consumeCounterStyleName): (WebCore::CSSPropertyParserHelpers::consumeCounterStyleNameInPrelude): Parse @counter-style names, both in-prelude names and non-prelude names (e.g. as part of the `extends` descriptor). Source/WTF: * Scripts/Preferences/WebPreferencesExperimental.yaml: Add CSSCounterStyleAtRulesEnabled and CSSCounterStyleAtRuleImageSymbolsEnabled flags. Tools: * DumpRenderTree/TestOptions.cpp: (WTR::TestOptions::defaults): Add `false` defaults for CSSCounterStyleAtRulesEnabled and CSSCounterStyleAtRuleImageSymbolsEnabled flags. LayoutTests: Add tests ensuring @counter-style is not exposed when feature flag is disabled. * webexposed/counter-style-is-not-exposed-expected.txt: Added. * webexposed/counter-style-is-not-exposed.html: Added. Canonical link: https://commits.webkit.org/236643@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@276152 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-04-16 19:19:04 +00:00
<!DOCTYPE html> <!-- webkit-test-runner [ CSSCounterStyleAtRulesEnabled=false ] -->
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
@counter-style foo {
system: cyclic;
prefix: "(";
suffix: ")";
symbols: A B C D E;
}
</style>
<script>
test(function() {
const cssRules = document.styleSheets[0].cssRules
assert_equals(cssRules.length, 0, '@counter-style should not be exposed with the runtime feature flag disabled.')
assert_equals(window.CSSRule.COUNTER_STYLE_RULE, undefined, 'COUNTER_STYLE_RULE constant should not be exposed with the runtime feature flag disabled.');
}, '@counter-style is not exposed')
</script>