Changeset 289722 in webkit
- Timestamp:
- Feb 13, 2022 5:52:40 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 4 added
- 2 deleted
- 25 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (2 diffs)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid.html (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-invalid-expected.txt (added)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-invalid.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-valid-expected.txt (added)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-valid.html (modified) (2 diffs)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-grid/subgrid (deleted)
-
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/css-grid/subgrid (deleted)
-
Source/WTF/ChangeLog (modified) (1 diff)
-
Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Headers.cmake (modified) (1 diff)
-
Source/WebCore/Sources.txt (modified) (1 diff)
-
Source/WebCore/WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Source/WebCore/css/CSSComputedStyleDeclaration.cpp (modified) (9 diffs)
-
Source/WebCore/css/CSSSubgridValue.cpp (added)
-
Source/WebCore/css/CSSSubgridValue.h (added)
-
Source/WebCore/css/CSSValue.cpp (modified) (4 diffs)
-
Source/WebCore/css/CSSValue.h (modified) (2 diffs)
-
Source/WebCore/css/CSSValueKeywords.in (modified) (1 diff)
-
Source/WebCore/css/parser/CSSParserContext.cpp (modified) (3 diffs)
-
Source/WebCore/css/parser/CSSParserContext.h (modified) (1 diff)
-
Source/WebCore/css/parser/CSSPropertyParser.cpp (modified) (13 diffs)
-
Source/WebCore/rendering/style/RenderStyle.h (modified) (2 diffs)
-
Source/WebCore/rendering/style/StyleGridData.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/style/StyleGridData.h (modified) (2 diffs)
-
Source/WebCore/style/StyleBuilderConverter.h (modified) (9 diffs)
-
Source/WebCore/style/StyleBuilderCustom.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r289721 r289722 1 2022-02-13 Matt Woodrow <mattwoodrow@apple.com> 2 3 Add support for parsing 'subgrid' in grid-template-columns/row 4 https://bugs.webkit.org/show_bug.cgi?id=236054 5 6 Reviewed by Manuel Rego Casasnovas. 7 8 Updated TestExpectations to list all the subgrid tests individually, now that we pass a few. 9 10 * TestExpectations: 11 * platform/gtk/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid-expected.txt: Removed. 12 * platform/wpe/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid-expected.txt: Removed. 13 1 14 2022-02-13 Brady Eidson <beidson@apple.com> 2 15 -
trunk/LayoutTests/TestExpectations
r289667 r289722 1401 1401 imported/w3c/web-platform-tests/css/css-grid/masonry/tentative/masonry-subgrid-001.html [ ImageOnlyFailure ] 1402 1402 imported/w3c/web-platform-tests/css/css-grid/masonry/tentative/masonry-subgrid-002.html [ ImageOnlyFailure ] 1403 1404 imported/w3c/web-platform-tests/css/css-grid/subgrid/abs-pos-002.html [ ImageOnlyFailure ] 1405 imported/w3c/web-platform-tests/css/css-grid/subgrid/abs-pos-003.html [ ImageOnlyFailure ] 1406 imported/w3c/web-platform-tests/css/css-grid/subgrid/abs-pos-004.html [ ImageOnlyFailure ] 1407 imported/w3c/web-platform-tests/css/css-grid/subgrid/baseline-001.html [ ImageOnlyFailure ] 1408 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-001.html [ ImageOnlyFailure ] 1409 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-002.html [ ImageOnlyFailure ] 1410 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-003.html [ ImageOnlyFailure ] 1411 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-004.html [ ImageOnlyFailure ] 1412 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-005.html [ ImageOnlyFailure ] 1413 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-006.html [ ImageOnlyFailure ] 1414 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-007.html [ ImageOnlyFailure ] 1415 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-008.html [ ImageOnlyFailure ] 1416 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-009.html [ ImageOnlyFailure ] 1417 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-larger-001.html [ ImageOnlyFailure ] 1418 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-larger-002.html [ ImageOnlyFailure ] 1419 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-normal-001.html [ ImageOnlyFailure ] 1420 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-gap-smaller-001.html [ ImageOnlyFailure ] 1421 imported/w3c/web-platform-tests/css/css-grid/subgrid/item-percentage-height-001.html [ ImageOnlyFailure ] 1422 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-001.html [ ImageOnlyFailure ] 1423 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-002.html [ ImageOnlyFailure ] 1424 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-003.html [ ImageOnlyFailure ] 1425 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-004.html [ ImageOnlyFailure ] 1426 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-005.html [ ImageOnlyFailure ] 1427 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-006.html [ ImageOnlyFailure ] 1428 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-007.html [ ImageOnlyFailure ] 1429 imported/w3c/web-platform-tests/css/css-grid/subgrid/line-names-008.html [ ImageOnlyFailure ] 1430 imported/w3c/web-platform-tests/css/css-grid/subgrid/orthogonal-writing-mode-001.html [ ImageOnlyFailure ] 1431 imported/w3c/web-platform-tests/css/css-grid/subgrid/orthogonal-writing-mode-002.html [ ImageOnlyFailure ] 1432 imported/w3c/web-platform-tests/css/css-grid/subgrid/orthogonal-writing-mode-003.html [ ImageOnlyFailure ] 1433 imported/w3c/web-platform-tests/css/css-grid/subgrid/orthogonal-writing-mode-004.html [ ImageOnlyFailure ] 1434 imported/w3c/web-platform-tests/css/css-grid/subgrid/parent-repeat-auto-fit-001.html [ ImageOnlyFailure ] 1435 imported/w3c/web-platform-tests/css/css-grid/subgrid/parent-repeat-auto-fit-002.html [ ImageOnlyFailure ] 1436 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-001.html [ ImageOnlyFailure ] 1437 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-002.html [ ImageOnlyFailure ] 1438 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-003.html [ ImageOnlyFailure ] 1439 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-004.html [ ImageOnlyFailure ] 1440 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-005.html [ ImageOnlyFailure ] 1441 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-006.html [ ImageOnlyFailure ] 1442 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-007.html [ ImageOnlyFailure ] 1443 imported/w3c/web-platform-tests/css/css-grid/subgrid/repeat-auto-fill-008.html [ ImageOnlyFailure ] 1444 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-item-block-size-001.html [ ImageOnlyFailure ] 1445 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html [ ImageOnlyFailure ] 1446 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html [ ImageOnlyFailure ] 1447 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html [ ImageOnlyFailure ] 1448 imported/w3c/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-004.html [ ImageOnlyFailure ] 1449 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-subgridded-axis-auto-repeater-crash-001.html [ Crash ] 1450 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-subgridded-axis-auto-repeater-crash-002.html [ Crash ] 1403 1451 1404 1452 webkit.org/b/149890 fast/css-grid-layout/grid-shorthands-style-format.html [ Failure ] … … 4240 4288 # CSS Masonry Layout not supported. 4241 4289 imported/w3c/web-platform-tests/css/css-grid/masonry.tentative [ Skip ] 4242 webkit.org/b/202115 imported/w3c/web-platform-tests/css/css-grid/subgrid [ Skip ]4243 4290 webkit.org/b/204580 imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-columns-001.html [ ImageOnlyFailure ] 4244 4291 webkit.org/b/204580 imported/w3c/web-platform-tests/css/css-grid/animation/grid-template-rows-001.html [ ImageOnlyFailure ] -
trunk/LayoutTests/imported/w3c/ChangeLog
r289721 r289722 1 2022-02-13 Matt Woodrow <mattwoodrow@apple.com> 2 3 Add support for parsing 'subgrid' in grid-template-columns/row 4 https://bugs.webkit.org/show_bug.cgi?id=236054 5 6 Reviewed by Manuel Rego Casasnovas. 7 8 Imported lastest subgrid tests. 9 10 * web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid-expected.txt: 11 * web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid.html: 12 * web-platform-tests/css/css-grid/subgrid/grid-template-invalid-expected.txt: Added. 13 * web-platform-tests/css/css-grid/subgrid/grid-template-invalid.html: 14 * web-platform-tests/css/css-grid/subgrid/grid-template-valid-expected.txt: Added. 15 * web-platform-tests/css/css-grid/subgrid/grid-template-valid.html: 16 1 17 2022-02-13 Brady Eidson <beidson@apple.com> 2 18 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid-expected.txt
r262056 r289722 1 1 2 FAIL Property grid-template-columns value 'subgrid [a]' computes to 'subgrid [a]' assert_true: 'subgrid [a]' is a supported value for grid-template-columns. expected true got false 3 FAIL Property grid-template-columns value 'subgrid [a] [b]' computes to 'subgrid [a] [b]' assert_true: 'subgrid [a] [b]' is a supported value for grid-template-columns. expected true got false 4 FAIL Property grid-template-columns value 'subgrid [a] [b] [b] [c]' computes to 'subgrid [a] [b] [b] [c]' assert_true: 'subgrid [a] [b] [b] [c]' is a supported value for grid-template-columns. expected true got false 5 FAIL Property grid-template-columns value 'subgrid [a] [b c d] [e f] [e f] [g]' computes to 'subgrid [a] [b c d] [e f] [e f] [g]' assert_true: 'subgrid [a] [b c d] [e f] [e f] [g]' is a supported value for grid-template-columns. expected true got false 6 FAIL Property grid-template-columns value 'subgrid [a b c] [d] [e f]' computes to 'subgrid [a b c] [d] [e f]' assert_true: 'subgrid [a b c] [d] [e f]' is a supported value for grid-template-columns. expected true got false 7 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c])' computes to 'subgrid repeat(auto-fill, [c])' assert_true: 'subgrid repeat(auto-fill, [c])' is a supported value for grid-template-columns. expected true got false 8 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c]) [g] [h i]' computes to 'subgrid repeat(auto-fill, [c]) [g] [h i]' assert_true: 'subgrid repeat(auto-fill, [c]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 9 FAIL Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c]) [g] [h i]' computes to 'subgrid [a] repeat(auto-fill, [c]) [g] [h i]' assert_true: 'subgrid [a] repeat(auto-fill, [c]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 10 FAIL Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c]) [g]' computes to 'subgrid [a b] repeat(auto-fill, [c]) [g]' assert_true: 'subgrid [a b] repeat(auto-fill, [c]) [g]' is a supported value for grid-template-columns. expected true got false 11 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c]) [g h]' computes to 'subgrid [a] [b] repeat(auto-fill, [c]) [g h]' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c]) [g h]' is a supported value for grid-template-columns. expected true got false 12 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c])' computes to 'subgrid [a] [b] repeat(auto-fill, [c])' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c])' is a supported value for grid-template-columns. expected true got false 13 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c d])' computes to 'subgrid repeat(auto-fill, [c d])' assert_true: 'subgrid repeat(auto-fill, [c d])' is a supported value for grid-template-columns. expected true got false 14 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c d]) [g] [h i]' computes to 'subgrid repeat(auto-fill, [c d]) [g] [h i]' assert_true: 'subgrid repeat(auto-fill, [c d]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 15 FAIL Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c d]) [g] [h i]' computes to 'subgrid [a] repeat(auto-fill, [c d]) [g] [h i]' assert_true: 'subgrid [a] repeat(auto-fill, [c d]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 16 FAIL Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c d]) [g]' computes to 'subgrid [a b] repeat(auto-fill, [c d]) [g]' assert_true: 'subgrid [a b] repeat(auto-fill, [c d]) [g]' is a supported value for grid-template-columns. expected true got false 17 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c d]) [g h]' computes to 'subgrid [a] [b] repeat(auto-fill, [c d]) [g h]' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c d]) [g h]' is a supported value for grid-template-columns. expected true got false 18 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c d])' computes to 'subgrid [a] [b] repeat(auto-fill, [c d])' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c d])' is a supported value for grid-template-columns. expected true got false 19 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d])' computes to 'subgrid repeat(auto-fill, [c] [d])' assert_true: 'subgrid repeat(auto-fill, [c] [d])' is a supported value for grid-template-columns. expected true got false 20 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d]) [g] [h i]' computes to 'subgrid repeat(auto-fill, [c] [d]) [g] [h i]' assert_true: 'subgrid repeat(auto-fill, [c] [d]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 21 FAIL Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]' computes to 'subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]' assert_true: 'subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 22 FAIL Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c] [d]) [g]' computes to 'subgrid [a b] repeat(auto-fill, [c] [d]) [g]' assert_true: 'subgrid [a b] repeat(auto-fill, [c] [d]) [g]' is a supported value for grid-template-columns. expected true got false 23 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]' computes to 'subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]' is a supported value for grid-template-columns. expected true got false 24 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d])' computes to 'subgrid [a] [b] repeat(auto-fill, [c] [d])' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c] [d])' is a supported value for grid-template-columns. expected true got false 25 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d e])' computes to 'subgrid repeat(auto-fill, [c] [d e])' assert_true: 'subgrid repeat(auto-fill, [c] [d e])' is a supported value for grid-template-columns. expected true got false 26 FAIL Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d e]) [g] [h i]' computes to 'subgrid repeat(auto-fill, [c] [d e]) [g] [h i]' assert_true: 'subgrid repeat(auto-fill, [c] [d e]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 27 FAIL Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]' computes to 'subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]' assert_true: 'subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]' is a supported value for grid-template-columns. expected true got false 28 FAIL Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c] [d e]) [g]' computes to 'subgrid [a b] repeat(auto-fill, [c] [d e]) [g]' assert_true: 'subgrid [a b] repeat(auto-fill, [c] [d e]) [g]' is a supported value for grid-template-columns. expected true got false 29 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]' computes to 'subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]' is a supported value for grid-template-columns. expected true got false 30 FAIL Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d e])' computes to 'subgrid [a] [b] repeat(auto-fill, [c] [d e])' assert_true: 'subgrid [a] [b] repeat(auto-fill, [c] [d e])' is a supported value for grid-template-columns. expected true got false 2 PASS Property grid-template-columns value 'subgrid []' 3 PASS Property grid-template-columns value 'subgrid [a]' 4 PASS Property grid-template-columns value 'subgrid [a] [b]' 5 PASS Property grid-template-columns value 'subgrid [] [b]' 6 PASS Property grid-template-columns value 'subgrid [a] [b] [b] [c]' 7 PASS Property grid-template-columns value 'subgrid [a] [b c d] [e f] [e f] [g]' 8 PASS Property grid-template-columns value 'subgrid [a b c] [d] [e f]' 9 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c])' 10 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [])' 11 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c]) [g] [h i]' 12 PASS Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c]) [g] [h i]' 13 PASS Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c]) [g]' 14 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c]) [g h]' 15 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c])' 16 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c d])' 17 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c d]) [g] [h i]' 18 PASS Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c d]) [g] [h i]' 19 PASS Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c d]) [g]' 20 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c d]) [g h]' 21 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c d])' 22 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d])' 23 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d]) [g] [h i]' 24 PASS Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c] [d]) [g] [h i]' 25 PASS Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c] [d]) [g]' 26 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d]) [g h]' 27 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d])' 28 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d e])' 29 PASS Property grid-template-columns value 'subgrid repeat(auto-fill, [c] [d e]) [g] [h i]' 30 PASS Property grid-template-columns value 'subgrid [a] repeat(auto-fill, [c] [d e]) [g] [h i]' 31 PASS Property grid-template-columns value 'subgrid [a b] repeat(auto-fill, [c] [d e]) [g]' 32 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d e]) [g h]' 33 PASS Property grid-template-columns value 'subgrid [a] [b] repeat(auto-fill, [c] [d e])' 31 34 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-computed-nogrid.html
r262056 r289722 17 17 <div id="target"></div> 18 18 <script> 19 test_computed_value("grid-template-columns", "subgrid []"); 19 20 test_computed_value("grid-template-columns", "subgrid [a]"); 20 21 test_computed_value("grid-template-columns", "subgrid [a] [b]"); 22 test_computed_value("grid-template-columns", "subgrid [] [b]"); 21 23 test_computed_value("grid-template-columns", "subgrid [a] [b] [b] [c]"); 22 24 test_computed_value("grid-template-columns", "subgrid [a] [b c d] [e f] [e f] [g]"); 23 25 test_computed_value("grid-template-columns", "subgrid [a b c] [d] [e f]"); 24 26 test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c])"); 27 test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [])"); 25 28 test_computed_value("grid-template-columns", "subgrid repeat(auto-fill, [c]) [g] [h i]"); 26 29 test_computed_value("grid-template-columns", "subgrid [a] repeat(auto-fill, [c]) [g] [h i]"); -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-invalid.html
r287823 r289722 23 23 test_invalid_value("grid-template-rows", 'subgrid repeat(2, line)'); 24 24 test_invalid_value("grid-template-rows", 'subgrid repeat(2,'); 25 test_invalid_value("grid-template-rows", 'subgrid repeat(auto-fill, [a]) repeat(auto-fill, [b])'); 25 26 26 27 test_invalid_value("grid-template-columns", 'subgrid subgrid'); … … 33 34 test_invalid_value("grid-template-columns", 'subgrid repeat(2, line)'); 34 35 test_invalid_value("grid-template-columns", 'subgrid repeat(2,'); 36 test_invalid_value("grid-template-columns", 'subgrid repeat(auto-fill, [a]) repeat(auto-fill, [b])'); 35 37 36 38 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-valid.html
r287823 r289722 23 23 test_valid_value("grid-template-rows", 'subgrid [] [] [] []'); 24 24 test_valid_value("grid-template-rows", 'subgrid repeat(auto-fill, [a])'); 25 test_valid_value("grid-template-rows", 'subgrid repeat(auto-fill, [])'); 25 26 test_valid_value("grid-template-rows", 'subgrid [a] repeat(auto-fill, [b])'); 26 27 test_valid_value("grid-template-rows", 'subgrid [a] repeat(auto-fill, [b]) [c]'); … … 42 43 test_valid_value("grid-template-columns", 'subgrid [] [] [] []'); 43 44 test_valid_value("grid-template-columns", 'subgrid repeat(auto-fill, [a])'); 45 test_valid_value("grid-template-columns", 'subgrid repeat(auto-fill, [])'); 44 46 test_valid_value("grid-template-columns", 'subgrid [a] repeat(auto-fill, [b])'); 45 47 test_valid_value("grid-template-columns", 'subgrid [a] repeat(auto-fill, [b]) [c]'); -
trunk/Source/WTF/ChangeLog
r289721 r289722 1 2022-02-13 Matt Woodrow <mattwoodrow@apple.com> 2 3 Add support for parsing 'subgrid' in grid-template-columns/row 4 https://bugs.webkit.org/show_bug.cgi?id=236054 5 6 Reviewed by Manuel Rego Casasnovas. 7 8 Adds a new experimental preference for subgrid support, disabled by default. 9 10 * Scripts/Preferences/WebPreferencesExperimental.yaml: 11 1 12 2022-02-13 Brady Eidson <beidson@apple.com> 2 13 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml
r289683 r289722 1350 1350 default: false 1351 1351 1352 SubgridEnabled: 1353 type: bool 1354 humanReadableName: "CSS subgrid support" 1355 humanReadableDescription: "Enable CSS subgrid support" 1356 defaultValue: 1357 WebKitLegacy: 1358 default: false 1359 WebKit: 1360 default: false 1361 WebCore: 1362 default: false 1363 1352 1364 SyntheticEditingCommandsEnabled: 1353 1365 type: bool -
trunk/Source/WebCore/ChangeLog
r289721 r289722 1 2022-02-13 Matt Woodrow <mattwoodrow@apple.com> 2 3 Add support for parsing 'subgrid' in grid-template-columns/row 4 https://bugs.webkit.org/show_bug.cgi?id=236054 5 6 Reviewed by Manuel Rego Casasnovas. 7 8 Adds support for parsing the 'subgrid' keyword followed by a list of line names for 9 grid-template-columns/rows. 10 Adds a new CSSSubgridValue wrapper around CSSValueList to represent this. 11 Also adds support for converting this into style data in StyleBuilderConverter, and serializing 12 the specified value for computed value (used when the element specified subgrid but doesn't 13 have an appropriate grid parent). 14 15 Tests: imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-invalid.html 16 imported/w3c/web-platform-tests/css/css-grid/subgrid/grid-template-valid.html 17 18 * Headers.cmake: 19 * Sources.txt: 20 * WebCore.xcodeproj/project.pbxproj: 21 * css/CSSComputedStyleDeclaration.cpp: 22 (WebCore::OrderedNamedLinesCollector::namedGridLineCount const): 23 (WebCore::addValuesForNamedGridLinesAtIndex): 24 (WebCore::populateSubgridLineNameList): 25 (WebCore::valueForGridTrackList): 26 * css/CSSSubgridValue.cpp: Added. 27 (WebCore::CSSSubgridValue::customCSSText const): 28 (WebCore::CSSSubgridValue::CSSSubgridValue): 29 * css/CSSSubgridValue.h: Added. 30 * css/CSSValue.cpp: 31 (WebCore::CSSValue::equals const): 32 (WebCore::CSSValue::cssText const): 33 (WebCore::CSSValue::destroy): 34 * css/CSSValue.h: 35 (WebCore::CSSValue::isSubgridValue const): 36 * css/CSSValueKeywords.in: 37 * css/parser/CSSParserContext.cpp: 38 (WebCore::operator==): 39 (WebCore::add): 40 * css/parser/CSSParserContext.h: 41 * css/parser/CSSPropertyParser.cpp: 42 (WebCore::consumeGridLineNames): 43 (WebCore::consumeSubgridNameRepeatFunction): 44 (WebCore::consumeGridTrackList): 45 (WebCore::consumeGridTemplatesRowsOrColumns): 46 (WebCore::CSSPropertyParser::parseSingleValue): 47 (WebCore::CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns): 48 (WebCore::CSSPropertyParser::consumeGridTemplateShorthand): 49 (WebCore::CSSPropertyParser::consumeGridShorthand): 50 * rendering/style/RenderStyle.h: 51 (WebCore::RenderStyle::gridSubgridRows const): 52 (WebCore::RenderStyle::gridSubgridColumns const): 53 (WebCore::RenderStyle::setGridSubgridRows): 54 (WebCore::RenderStyle::setGridSubgridColumns): 55 * rendering/style/StyleGridData.cpp: 56 (WebCore::StyleGridData::StyleGridData): 57 * rendering/style/StyleGridData.h: 58 (WebCore::StyleGridData::operator== const): 59 * style/StyleBuilderConverter.h: 60 (WebCore::Style::createGridLineNamesList): 61 (WebCore::Style::BuilderConverter::createGridTrackList): 62 * style/StyleBuilderCustom.h: 63 1 64 2022-02-13 Brady Eidson <beidson@apple.com> 2 65 -
trunk/Source/WebCore/Headers.cmake
r289715 r289722 547 547 css/CSSStyleRule.h 548 548 css/CSSStyleSheet.h 549 css/CSSSubgridValue.h 549 550 css/CSSToLengthConversionData.h 550 551 css/CSSUnits.h -
trunk/Source/WebCore/Sources.txt
r289697 r289722 769 769 css/CSSStyleRule.cpp 770 770 css/CSSStyleSheet.cpp 771 css/CSSSubgridValue.cpp 771 772 css/CSSSupportsRule.cpp 772 773 css/CSSTimingFunctionValue.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r289706 r289722 4696 4696 D000ED2811C1B9CD00C47726 /* SubframeLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = D000ED2611C1B9CD00C47726 /* SubframeLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4697 4697 D01A27AE10C9BFD800026A42 /* SpaceSplitString.h in Headers */ = {isa = PBXBuildFile; fileRef = D01A27AC10C9BFD800026A42 /* SpaceSplitString.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4698 D026DB0A27AB719E0081B143 /* CSSSubgridValue.h in Headers */ = {isa = PBXBuildFile; fileRef = D026DB0827AB719D0081B143 /* CSSSubgridValue.h */; }; 4698 4699 D05CED2A0A40BB2C00C5AF38 /* FormatBlockCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D05CED280A40BB2C00C5AF38 /* FormatBlockCommand.h */; }; 4699 4700 D06C0D8F0CFD11460065F43F /* RemoveFormatCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D06C0D8D0CFD11460065F43F /* RemoveFormatCommand.h */; }; … … 16454 16455 D01A27AB10C9BFD800026A42 /* SpaceSplitString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpaceSplitString.cpp; sourceTree = "<group>"; }; 16455 16456 D01A27AC10C9BFD800026A42 /* SpaceSplitString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpaceSplitString.h; sourceTree = "<group>"; }; 16457 D026DB0827AB719D0081B143 /* CSSSubgridValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSSubgridValue.h; sourceTree = "<group>"; }; 16458 D026DB0B27AB71AF0081B143 /* CSSSubgridValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSSubgridValue.cpp; sourceTree = "<group>"; }; 16456 16459 D036DD8D208FFC0C00F9F4B2 /* WebGLCompressedTextureASTC.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebGLCompressedTextureASTC.idl; sourceTree = "<group>"; }; 16457 16460 D05CED270A40BB2C00C5AF38 /* FormatBlockCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FormatBlockCommand.cpp; sourceTree = "<group>"; }; … … 31754 31757 A8EA7FFF0A19516E00A8EF5F /* CSSStyleSheet.h */, 31755 31758 858C39100AA8FF0000B187A4 /* CSSStyleSheet.idl */, 31759 D026DB0B27AB71AF0081B143 /* CSSSubgridValue.cpp */, 31760 D026DB0827AB719D0081B143 /* CSSSubgridValue.h */, 31756 31761 FD677734195CAB200072E0D3 /* CSSSupportsRule.cpp */, 31757 31762 FC63BDB1167AABAC00F9380F /* CSSSupportsRule.h */, … … 34126 34131 A8EA80070A19516E00A8EF5F /* CSSStyleSheet.h in Headers */, 34127 34132 4BAFD0D62192146B00C0AB64 /* CSSStyleValue.h in Headers */, 34133 D026DB0A27AB719E0081B143 /* CSSSubgridValue.h in Headers */, 34128 34134 94DE5C921D83011D00164F2A /* CSSSupportsParser.h in Headers */, 34129 34135 FC54D05716A7673100575E4D /* CSSSupportsRule.h in Headers */, -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r289588 r289722 858 858 virtual void collectLineNamesForIndex(CSSGridLineNamesValue&, unsigned index) const; 859 859 860 virtual int namedGridLineCount() const { return m_orderedNamedGridLines.size(); } 861 860 862 protected: 861 863 … … 875 877 876 878 void collectLineNamesForIndex(CSSGridLineNamesValue&, unsigned index) const override; 879 880 int namedGridLineCount() const override { return m_orderedNamedAutoRepeatGridLines.size(); } 877 881 }; 878 882 … … 952 956 } 953 957 954 static void addValuesForNamedGridLinesAtIndex(OrderedNamedLinesCollector& collector, unsigned i, CSSValueList& list )958 static void addValuesForNamedGridLinesAtIndex(OrderedNamedLinesCollector& collector, unsigned i, CSSValueList& list, bool renderEmpty = false) 955 959 { 956 960 if (collector.isEmpty()) … … 959 963 auto lineNames = CSSGridLineNamesValue::create(); 960 964 collector.collectLineNamesForIndex(lineNames.get(), i); 961 if (lineNames->length() )965 if (lineNames->length() || renderEmpty) 962 966 list.append(WTFMove(lineNames)); 963 967 } … … 994 998 } 995 999 1000 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector, int start, int end) 1001 { 1002 for (int i = start; i < end; i++) 1003 addValuesForNamedGridLinesAtIndex(collector, i, list, true); 1004 } 1005 1006 static void populateSubgridLineNameList(CSSValueList& list, OrderedNamedLinesCollector& collector) 1007 { 1008 populateSubgridLineNameList(list, collector, 0, collector.namedGridLineCount()); 1009 } 1010 996 1011 static Ref<CSSValue> valueForGridTrackList(GridTrackSizingDirection direction, RenderObject* renderer, const RenderStyle& style) 997 1012 { 998 1013 bool isRowAxis = direction == ForColumns; 999 1014 bool isRenderGrid = is<RenderGrid>(renderer); 1015 bool isSubgrid = isRowAxis ? style.gridSubgridColumns() : style.gridSubgridRows(); 1000 1016 auto& trackSizes = isRowAxis ? style.gridColumns() : style.gridRows(); 1001 1017 auto& autoRepeatTrackSizes = isRowAxis ? style.gridAutoRepeatColumns() : style.gridAutoRepeatRows(); … … 1011 1027 } 1012 1028 1013 if (trackListIsEmpty )1029 if (trackListIsEmpty && !isSubgrid) 1014 1030 return CSSValuePool::singleton().createIdentifierValue(CSSValueNone); 1015 1031 1016 1032 auto list = CSSValueList::createSpaceSeparated(); 1033 if (isSubgrid) 1034 list->append(CSSValuePool::singleton().createIdentifierValue(CSSValueSubgrid)); 1017 1035 1018 1036 // If the element is a grid container, the resolved value is the used value, 1019 1037 // specifying track sizes in pixels and expanding the repeat() notation. 1020 1038 if (isRenderGrid) { 1039 // FIXME: We need to handle computed subgrid here. 1021 1040 auto* grid = downcast<RenderGrid>(renderer); 1022 1041 OrderedNamedLinesCollectorInGridLayout collector(style, isRowAxis, grid->autoRepeatCountForDirection(direction), autoRepeatTrackSizes.size()); … … 1036 1055 }; 1037 1056 1057 OrderedNamedLinesCollectorInsideRepeat repeatCollector(style, isRowAxis); 1058 if (isSubgrid) { 1059 if (!repeatCollector.namedGridLineCount()) { 1060 populateSubgridLineNameList(list.get(), collector); 1061 return list; 1062 } 1063 1064 // Add the line names that precede the auto repeat(). 1065 int autoRepeatInsertionPoint = isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint() : style.gridAutoRepeatRowsInsertionPoint(); 1066 autoRepeatInsertionPoint = std::clamp<int>(autoRepeatInsertionPoint, 0, collector.namedGridLineCount()); 1067 populateSubgridLineNameList(list.get(), collector, 0, autoRepeatInsertionPoint); 1068 1069 // Add a CSSGridAutoRepeatValue with the contents of the auto repeat(). 1070 ASSERT((isRowAxis ? style.gridAutoRepeatColumnsType() : style.gridAutoRepeatRowsType()) == AutoRepeatType::Fill); 1071 auto repeatedValues = CSSGridAutoRepeatValue::create(CSSValueAutoFill); 1072 populateSubgridLineNameList(repeatedValues.get(), repeatCollector); 1073 list->append(repeatedValues.get()); 1074 1075 // Add the line names that follow the auto repeat(). 1076 populateSubgridLineNameList(list.get(), collector, autoRepeatInsertionPoint, collector.namedGridLineCount()); 1077 return list; 1078 } 1079 1038 1080 if (autoRepeatTrackSizes.isEmpty()) { 1039 1081 // If there's no auto repeat(), just add all the line names and track sizes. … … 1043 1085 1044 1086 // Add the line names and track sizes that precede the auto repeat(). 1045 int autoRepeatInsertionPoint = std::clamp<int>(isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint() : style.gridAutoRepeatRowsInsertionPoint(), 0, trackSizes.size()); 1087 int autoRepeatInsertionPoint = isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint() : style.gridAutoRepeatRowsInsertionPoint(); 1088 autoRepeatInsertionPoint = std::clamp<int>(autoRepeatInsertionPoint, 0, trackSizes.size()); 1046 1089 populateGridTrackList(list.get(), collector, trackSizes, getTrackSize, 0, autoRepeatInsertionPoint); 1047 1090 … … 1049 1092 AutoRepeatType autoRepeatType = isRowAxis ? style.gridAutoRepeatColumnsType() : style.gridAutoRepeatRowsType(); 1050 1093 auto repeatedValues = CSSGridAutoRepeatValue::create(autoRepeatType == AutoRepeatType::Fill ? CSSValueAutoFill : CSSValueAutoFit); 1051 OrderedNamedLinesCollectorInsideRepeat repeatCollector(style, isRowAxis); 1094 1052 1095 populateGridTrackList(repeatedValues.get(), repeatCollector, autoRepeatTrackSizes, getTrackSize); 1053 1096 list->append(repeatedValues.get()); -
trunk/Source/WebCore/css/CSSValue.cpp
r286086 r289722 70 70 #include "CSSGridLineNamesValue.h" 71 71 #include "CSSGridTemplateAreasValue.h" 72 #include "CSSSubgridValue.h" 72 73 73 74 #include "DeprecatedCSSOMPrimitiveValue.h" … … 185 186 case GridLineNamesClass: 186 187 return compareCSSValues<CSSGridLineNamesValue>(*this, other); 188 case SubgridClass: 189 return compareCSSValues<CSSSubgridValue>(*this, other); 187 190 case GridTemplateAreasClass: 188 191 return compareCSSValues<CSSGridTemplateAreasValue>(*this, other); … … 288 291 case GridLineNamesClass: 289 292 return downcast<CSSGridLineNamesValue>(*this).customCSSText(); 293 case SubgridClass: 294 return downcast<CSSSubgridValue>(*this).customCSSText(); 290 295 case GridTemplateAreasClass: 291 296 return downcast<CSSGridTemplateAreasValue>(*this).customCSSText(); … … 411 416 delete downcast<CSSGridLineNamesValue>(this); 412 417 return; 418 case SubgridClass: 419 delete downcast<CSSSubgridValue>(this); 420 return; 413 421 case GridTemplateAreasClass: 414 422 delete downcast<CSSGridTemplateAreasValue>(this); -
trunk/Source/WebCore/css/CSSValue.h
r286086 r289722 135 135 bool isGridTemplateAreasValue() const { return m_classType == GridTemplateAreasClass; } 136 136 bool isGridLineNamesValue() const { return m_classType == GridLineNamesClass; } 137 bool isSubgridValue() const { return m_classType == SubgridClass; } 137 138 bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; } 138 139 … … 225 226 GridAutoRepeatClass, 226 227 GridIntegerRepeatClass, 228 SubgridClass, 227 229 // Do not append non-list class types here. 228 230 }; -
trunk/Source/WebCore/css/CSSValueKeywords.in
r288869 r289722 1421 1421 // grid-template-{columns|rows} 1422 1422 minmax 1423 subgrid 1423 1424 1424 1425 // grid-auto-flow -
trunk/Source/WebCore/css/parser/CSSParserContext.cpp
r289686 r289722 113 113 , gradientInterpolationColorSpacesEnabled { document.settings().cssGradientInterpolationColorSpacesEnabled() } 114 114 , inputSecurityEnabled { document.settings().cssInputSecurityEnabled() } 115 , subgridEnabled { document.settings().subgridEnabled() } 115 116 #if ENABLE(ATTACHMENT_ELEMENT) 116 117 , attachmentEnabled { RuntimeEnabledFeatures::sharedFeatures().attachmentElementEnabled() } … … 166 167 && a.attachmentEnabled == b.attachmentEnabled 167 168 #endif 169 && a.subgridEnabled == b.subgridEnabled 168 170 ; 169 171 } … … 210 212 | context.accentColorEnabled << 29 211 213 | context.inputSecurityEnabled << 30 212 | context.mode << 31; // This is multiple bits, so keep it last. 214 | context.subgridEnabled << 31 215 | (unsigned long long)context.mode << 32; // This is multiple bits, so keep it last. 213 216 add(hasher, context.baseURL, context.charset, bits); 214 217 } -
trunk/Source/WebCore/css/parser/CSSParserContext.h
r288590 r289722 90 90 bool gradientInterpolationColorSpacesEnabled { false }; 91 91 bool inputSecurityEnabled { false }; 92 bool subgridEnabled { false }; 92 93 93 94 // RuntimeEnabledFeatures. -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r288675 r289722 60 60 #include "CSSReflectValue.h" 61 61 #include "CSSShadowValue.h" 62 #include "CSSSubgridValue.h" 62 63 #include "CSSTimingFunctionValue.h" 63 64 #include "CSSUnicodeRangeValue.h" … … 3606 3607 3607 3608 // Appends to the passed in CSSGridLineNamesValue if any, otherwise creates a new one. Returns nullptr if an empty list is consumed. 3608 static RefPtr<CSSGridLineNamesValue> consumeGridLineNames(CSSParserTokenRange& range, CSSGridLineNamesValue* lineNames = nullptr )3609 static RefPtr<CSSGridLineNamesValue> consumeGridLineNames(CSSParserTokenRange& range, CSSGridLineNamesValue* lineNames = nullptr, bool allowEmpty = false) 3609 3610 { 3610 3611 CSSParserTokenRange rangeCopy = range; … … 3620 3621 return nullptr; 3621 3622 range = rangeCopy; 3622 return result->length() ? result : nullptr;3623 return (result->length() || allowEmpty) ? result : nullptr; 3623 3624 } 3624 3625 … … 3676 3677 } 3677 3678 3679 static bool consumeSubgridNameRepeatFunction(CSSParserTokenRange& range, CSSValueList& list, bool& isAutoRepeat) 3680 { 3681 CSSParserTokenRange args = consumeFunction(range); 3682 size_t repetitions = 1; 3683 isAutoRepeat = identMatches<CSSValueAutoFill>(args.peek().id()); 3684 RefPtr<CSSValueList> repeatedValues; 3685 if (isAutoRepeat) 3686 repeatedValues = CSSGridAutoRepeatValue::create(args.consumeIncludingWhitespace().id()); 3687 else { 3688 auto repetition = consumePositiveIntegerRaw(args); 3689 if (!repetition) 3690 return false; 3691 repetitions = clampTo<size_t>(static_cast<size_t>(*repetition), 0, GridPosition::max()); 3692 repeatedValues = CSSGridIntegerRepeatValue::create(repetitions); 3693 } 3694 if (!consumeCommaIncludingWhitespace(args)) 3695 return false; 3696 3697 do { 3698 auto lineNames = consumeGridLineNames(args, nullptr, true); 3699 if (!lineNames) 3700 return false; 3701 repeatedValues->append(lineNames.releaseNonNull()); 3702 } while (!args.atEnd()); 3703 3704 list.append(repeatedValues.releaseNonNull()); 3705 return true; 3706 } 3707 3678 3708 enum TrackListType { GridTemplate, GridTemplateNoRepeat, GridAuto }; 3679 3709 3680 static RefPtr<CSSValue> consumeGridTrackList(CSSParserTokenRange& range, CSSParserMode cssParserMode, TrackListType trackListType) 3681 { 3710 static RefPtr<CSSValue> consumeGridTrackList(CSSParserTokenRange& range, const CSSParserContext& context, TrackListType trackListType) 3711 { 3712 bool seenAutoRepeat = false; 3713 if (trackListType == GridTemplate && context.subgridEnabled && range.peek().id() == CSSValueSubgrid) { 3714 consumeIdent(range); 3715 auto values = CSSSubgridValue::create(); 3716 while (!range.atEnd() && range.peek().type() != DelimiterToken) { 3717 if (range.peek().functionId() == CSSValueRepeat) { 3718 bool isAutoRepeat; 3719 if (!consumeSubgridNameRepeatFunction(range, values, isAutoRepeat)) 3720 return nullptr; 3721 if (isAutoRepeat && seenAutoRepeat) 3722 return nullptr; 3723 seenAutoRepeat = seenAutoRepeat || isAutoRepeat; 3724 } else if (auto value = consumeGridLineNames(range, nullptr, true)) 3725 values->append(value.releaseNonNull()); 3726 else 3727 return nullptr; 3728 } 3729 return values; 3730 } 3682 3731 bool allowGridLineNames = trackListType != GridAuto; 3683 3732 RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated(); … … 3689 3738 3690 3739 bool allowRepeat = trackListType == GridTemplate; 3691 bool seenAutoRepeat = false;3692 3740 bool allTracksAreFixedSized = true; 3693 3741 do { … … 3696 3744 if (!allowRepeat) 3697 3745 return nullptr; 3698 if (!consumeGridTrackRepeatFunction(range, c ssParserMode, *values, isAutoRepeat, allTracksAreFixedSized))3746 if (!consumeGridTrackRepeatFunction(range, context.mode, *values, isAutoRepeat, allTracksAreFixedSized)) 3699 3747 return nullptr; 3700 3748 if (isAutoRepeat && seenAutoRepeat) 3701 3749 return nullptr; 3702 3750 seenAutoRepeat = seenAutoRepeat || isAutoRepeat; 3703 } else if (RefPtr<CSSValue> value = consumeGridTrackSize(range, c ssParserMode)) {3751 } else if (RefPtr<CSSValue> value = consumeGridTrackSize(range, context.mode)) { 3704 3752 if (allTracksAreFixedSized) 3705 3753 allTracksAreFixedSized = isGridTrackFixedSized(*value); … … 3719 3767 } 3720 3768 3721 static RefPtr<CSSValue> consumeGridTemplatesRowsOrColumns(CSSParserTokenRange& range, CSSParserMode cssParserMode)3769 static RefPtr<CSSValue> consumeGridTemplatesRowsOrColumns(CSSParserTokenRange& range, const CSSParserContext& context) 3722 3770 { 3723 3771 if (range.peek().id() == CSSValueNone) 3724 3772 return consumeIdent(range); 3725 return consumeGridTrackList(range, c ssParserMode, GridTemplate);3773 return consumeGridTrackList(range, context, GridTemplate); 3726 3774 } 3727 3775 … … 4630 4678 case CSSPropertyGridAutoColumns: 4631 4679 case CSSPropertyGridAutoRows: 4632 return consumeGridTrackList(m_range, m_context .mode, GridAuto);4680 return consumeGridTrackList(m_range, m_context, GridAuto); 4633 4681 case CSSPropertyGridTemplateColumns: 4634 4682 case CSSPropertyGridTemplateRows: 4635 return consumeGridTemplatesRowsOrColumns(m_range, m_context .mode);4683 return consumeGridTemplatesRowsOrColumns(m_range, m_context); 4636 4684 case CSSPropertyGridTemplateAreas: 4637 4685 return consumeGridTemplateAreas(m_range); … … 5880 5928 if (!consumeSlashIncludingWhitespace(m_range)) 5881 5929 return false; 5882 columnsValue = consumeGridTrackList(m_range, m_context .mode, GridTemplateNoRepeat);5930 columnsValue = consumeGridTrackList(m_range, m_context, GridTemplateNoRepeat); 5883 5931 if (!columnsValue || !m_range.atEnd()) 5884 5932 return false; … … 5907 5955 // 2- <grid-template-rows> / <grid-template-columns> 5908 5956 if (!rowsValue) 5909 rowsValue = consumeGridTrackList(m_range, m_context .mode, GridTemplate);5957 rowsValue = consumeGridTrackList(m_range, m_context, GridTemplate); 5910 5958 5911 5959 if (rowsValue) { 5912 5960 if (!consumeSlashIncludingWhitespace(m_range)) 5913 5961 return false; 5914 RefPtr<CSSValue> columnsValue = consumeGridTemplatesRowsOrColumns(m_range, m_context .mode);5962 RefPtr<CSSValue> columnsValue = consumeGridTemplatesRowsOrColumns(m_range, m_context); 5915 5963 if (!columnsValue || !m_range.atEnd()) 5916 5964 return false; … … 5986 6034 autoRowsValue = CSSValuePool::singleton().createIdentifierValue(CSSValueAuto); 5987 6035 else { 5988 autoRowsValue = consumeGridTrackList(m_range, m_context .mode, GridAuto);6036 autoRowsValue = consumeGridTrackList(m_range, m_context, GridAuto); 5989 6037 if (!autoRowsValue) 5990 6038 return false; … … 5994 6042 if (m_range.atEnd()) 5995 6043 return false; 5996 templateColumns = consumeGridTemplatesRowsOrColumns(m_range, m_context .mode);6044 templateColumns = consumeGridTemplatesRowsOrColumns(m_range, m_context); 5997 6045 if (!templateColumns) 5998 6046 return false; … … 6012 6060 autoColumnsValue = CSSValuePool::singleton().createIdentifierValue(CSSValueAuto); 6013 6061 else { 6014 autoColumnsValue = consumeGridTrackList(m_range, m_context .mode, GridAuto);6062 autoColumnsValue = consumeGridTrackList(m_range, m_context, GridAuto); 6015 6063 if (!autoColumnsValue) 6016 6064 return false; -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r288942 r289722 582 582 size_t namedGridAreaColumnCount() const { return m_rareNonInheritedData->grid->namedGridAreaColumnCount; } 583 583 GridAutoFlow gridAutoFlow() const { return static_cast<GridAutoFlow>(m_rareNonInheritedData->grid->gridAutoFlow); } 584 bool gridSubgridRows() const { return m_rareNonInheritedData->grid->subgridRows; } 585 bool gridSubgridColumns() const { return m_rareNonInheritedData->grid->subgridColumns; } 584 586 bool isGridAutoFlowDirectionRow() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionRow); } 585 587 bool isGridAutoFlowDirectionColumn() const { return (m_rareNonInheritedData->grid->gridAutoFlow & InternalAutoFlowDirectionColumn); } … … 1204 1206 void setNamedGridAreaColumnCount(size_t columnCount) { SET_NESTED_VAR(m_rareNonInheritedData, grid, namedGridAreaColumnCount, columnCount); } 1205 1207 void setGridAutoFlow(GridAutoFlow flow) { SET_NESTED_VAR(m_rareNonInheritedData, grid, gridAutoFlow, flow); } 1208 void setGridSubgridRows(bool subgrid) { SET_NESTED_VAR(m_rareNonInheritedData, grid, subgridRows, subgrid); } 1209 void setGridSubgridColumns(bool subgrid) { SET_NESTED_VAR(m_rareNonInheritedData, grid, subgridColumns, subgrid); } 1206 1210 void setGridItemColumnStart(const GridPosition& columnStartPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnStart, columnStartPosition); } 1207 1211 void setGridItemColumnEnd(const GridPosition& columnEndPosition) { SET_NESTED_VAR(m_rareNonInheritedData, gridItem, gridColumnEnd, columnEndPosition); } -
trunk/Source/WebCore/rendering/style/StyleGridData.cpp
r262262 r289722 56 56 , autoRepeatColumnsType(RenderStyle::initialGridAutoRepeatType()) 57 57 , autoRepeatRowsType(RenderStyle::initialGridAutoRepeatType()) 58 , subgridRows(false) 59 , subgridColumns(false) 58 60 { 59 61 } … … 85 87 , autoRepeatColumnsType(o.autoRepeatColumnsType) 86 88 , autoRepeatRowsType(o.autoRepeatRowsType) 89 , subgridRows(o.subgridRows) 90 , subgridColumns(o.subgridColumns) 87 91 { 88 92 } -
trunk/Source/WebCore/rendering/style/StyleGridData.h
r284857 r289722 58 58 && gridAutoRepeatColumns == o.gridAutoRepeatColumns && gridAutoRepeatRows == o.gridAutoRepeatRows 59 59 && autoRepeatColumnsInsertionPoint == o.autoRepeatColumnsInsertionPoint && autoRepeatRowsInsertionPoint == o.autoRepeatRowsInsertionPoint 60 && autoRepeatColumnsType == o.autoRepeatColumnsType && autoRepeatRowsType == o.autoRepeatRowsType; 60 && autoRepeatColumnsType == o.autoRepeatColumnsType && autoRepeatRowsType == o.autoRepeatRowsType && subgridRows == o.subgridRows 61 && subgridColumns == o.subgridColumns; 61 62 } 62 63 … … 103 104 AutoRepeatType autoRepeatRowsType; 104 105 106 bool subgridRows; 107 bool subgridColumns; 108 105 109 private: 106 110 StyleGridData(); -
trunk/Source/WebCore/style/StyleBuilderConverter.h
r288556 r289722 45 45 #include "CSSRayValue.h" 46 46 #include "CSSReflectValue.h" 47 #include "CSSSubgridValue.h" 47 48 #include "CalcExpressionLength.h" 48 49 #include "CalcExpressionOperation.h" … … 982 983 { 983 984 ASSERT(value.isGridLineNamesValue()); 985 auto orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector<String>()); 984 986 985 987 for (auto& namedGridLineValue : downcast<CSSGridLineNamesValue>(value)) { … … 987 989 auto result = namedGridLines.add(namedGridLine, Vector<unsigned>()); 988 990 result.iterator->value.append(currentNamedGridLine); 989 auto orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector<String>()); 991 990 992 orderedResult.iterator->value.append(namedGridLine); 991 993 } … … 1005 1007 unsigned m_autoRepeatInsertionPoint { RenderStyle::initialGridAutoRepeatInsertionPoint() }; 1006 1008 AutoRepeatType m_autoRepeatType { RenderStyle::initialGridAutoRepeatType() }; 1009 bool isSubgrid { false }; 1007 1010 }; 1008 1011 … … 1018 1021 unsigned currentNamedGridLine = 0; 1019 1022 auto handleLineNameOrTrackSize = [&](const CSSValue& currentValue) { 1020 if (is<CSSGridLineNamesValue>(currentValue)) 1023 if (is<CSSGridLineNamesValue>(currentValue)) { 1021 1024 createGridLineNamesList(currentValue, currentNamedGridLine, tracksData.m_namedGridLines, tracksData.m_orderedNamedGridLines); 1022 else { 1025 // Subgrids only have line names defined, not track sizes, so we want our count 1026 // to be the number of lines named rather than number of sized tracks. 1027 if (tracksData.isSubgrid) 1028 currentNamedGridLine++; 1029 } else { 1023 1030 ++currentNamedGridLine; 1024 1031 tracksData.m_trackSizes.append(createGridTrackSize(currentValue, builderState)); … … 1026 1033 }; 1027 1034 1035 if (is<CSSSubgridValue>(value)) 1036 tracksData.isSubgrid = true; 1037 1038 unsigned autoRepeatIndex = 0; 1028 1039 for (auto& currentValue : downcast<CSSValueList>(value)) { 1029 1040 if (is<CSSGridAutoRepeatValue>(currentValue)) { 1030 ASSERT( tracksData.m_autoRepeatTrackSizes.isEmpty());1031 unsignedautoRepeatIndex = 0;1041 ASSERT(!autoRepeatIndex); 1042 autoRepeatIndex = 0; 1032 1043 CSSValueID autoRepeatID = downcast<CSSGridAutoRepeatValue>(currentValue.get()).autoRepeatID(); 1033 1044 ASSERT(autoRepeatID == CSSValueAutoFill || autoRepeatID == CSSValueAutoFit); … … 1036 1047 if (is<CSSGridLineNamesValue>(autoRepeatValue)) { 1037 1048 createGridLineNamesList(autoRepeatValue.get(), autoRepeatIndex, tracksData.m_autoRepeatNamedGridLines, tracksData.m_autoRepeatOrderedNamedGridLines); 1049 if (tracksData.isSubgrid) 1050 ++autoRepeatIndex; 1038 1051 continue; 1039 1052 } … … 1041 1054 tracksData.m_autoRepeatTrackSizes.append(createGridTrackSize(autoRepeatValue.get(), builderState)); 1042 1055 } 1043 tracksData.m_autoRepeatInsertionPoint = currentNamedGridLine++; 1056 tracksData.m_autoRepeatInsertionPoint = currentNamedGridLine; 1057 if (!tracksData.isSubgrid) 1058 currentNamedGridLine++; 1044 1059 continue; 1045 1060 } … … 1059 1074 // The parser should have rejected any <track-list> without any <track-size> as 1060 1075 // this is not conformant to the syntax. 1061 ASSERT(!tracksData.m_trackSizes.isEmpty() || !tracksData.m_autoRepeatTrackSizes.isEmpty() );1076 ASSERT(!tracksData.m_trackSizes.isEmpty() || !tracksData.m_autoRepeatTrackSizes.isEmpty() || tracksData.isSubgrid); 1062 1077 return true; 1063 1078 } -
trunk/Source/WebCore/style/StyleBuilderCustom.h
r288054 r289722 1906 1906 style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatNamedGridLines : parentStyle->autoRepeatNamedGrid##TrackType##Lines()); \ 1907 1907 style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatOrderedNamedGridLines : parentStyle->autoRepeatOrderedNamedGrid##TrackType##Lines()); \ 1908 style.setGridAutoRepeat##TrackType##sType(tracksData ? tracksData->m_autoRepeatType : parentStyle->gridAutoRepeat##TrackType##sType()); 1908 style.setGridAutoRepeat##TrackType##sType(tracksData ? tracksData->m_autoRepeatType : parentStyle->gridAutoRepeat##TrackType##sType()); \ 1909 style.setGridSubgrid##TrackType##s(tracksData ? tracksData->isSubgrid : parentStyle->gridSubgrid##TrackType##s()); 1909 1910 1910 1911 #define SET_INHERIT_TRACKS_DATA(style, parentStyle, TrackType) \
Note: See TracChangeset
for help on using the changeset viewer.