Log Message
[css-grid] Clear the override width for computing percent margins https://bugs.webkit.org/show_bug.cgi?id=209461
Reviewed by Manuel Rego Casasnovas. LayoutTests/imported/w3c: Update test expectations. The 2 grid-items-percentage-paddings tests are now expected to have some failures because of bug 191964. In fact they were already failing before this patch, as can be seen in wpt.fyi: https://wpt.fyi/results/css/css-grid/grid-items?q=grid-items-percentage-paddings-vertical-%20-002.html It's just that the bug that is being fixed made the test runner think that the tests were passing, probably some racy condition or such. * web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt: * web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt: * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt: * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt: * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt: Source/WebCore: When calculating the min-content contribution of a grid item of an auto sized grid track we must consider the grid item's margin. When the grid item's area is indefinite, a percent margin is resolved to zero. However, when performing a relayout, the percent margin may be solved against the previously computed grid area, since the grid item has already an OverrideContainingBlockLogicalWidth value. In order to re-compute the percent margin properly, we need to clear the previously override value. It's important to be careful of not clearing the override value set during intrinsic size, since we need it for the actual layout phase. Hence, we only reset the 'override' value when we are executing a definite strategy. This is a reland of r261841, which was reverted because it broke spotify. This problem is now avoided thanks to bug 210089. Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html * rendering/GridTrackSizingAlgorithm.cpp: (WebCore::hasRelativeMarginOrPaddingForChild): (WebCore::hasRelativeOrIntrinsicSizeForChild): (WebCore::shouldClearOverrideContainingBlockContentSizeForChild): (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const): (WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const): (WebCore::DefiniteSizeStrategy::minLogicalSizeForChild const): (WebCore::DefiniteSizeStrategy::minContentForChild const): * rendering/GridTrackSizingAlgorithm.h: LayoutTests: Update test expectations. * TestExpectations:
Modified Paths
- trunk/LayoutTests/ChangeLog
- trunk/LayoutTests/TestExpectations
- trunk/LayoutTests/imported/w3c/ChangeLog
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
- trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h
Diff
Modified: trunk/LayoutTests/ChangeLog (267502 => 267503)
--- trunk/LayoutTests/ChangeLog 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/ChangeLog 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1,3 +1,14 @@
+2020-09-23 obru...@igalia.com <obru...@igalia.com>
+
+ [css-grid] Clear the override width for computing percent margins
+ https://bugs.webkit.org/show_bug.cgi?id=209461
+
+ Reviewed by Manuel Rego Casasnovas.
+
+ Update test expectations.
+
+ * TestExpectations:
+
2020-09-23 Tadeu Zagallo <tzaga...@apple.com>
Missing scope release in JSDOMBuiltinConstructorBase
Modified: trunk/LayoutTests/TestExpectations (267502 => 267503)
--- trunk/LayoutTests/TestExpectations 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/TestExpectations 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1164,18 +1164,6 @@
webkit.org/b/216145 imported/w3c/web-platform-tests/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-8.html [ ImageOnlyFailure ]
webkit.org/b/216145 imported/w3c/web-platform-tests/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-9.html [ ImageOnlyFailure ]
webkit.org/b/216145 imported/w3c/web-platform-tests/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-10.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html [ ImageOnlyFailure ]
-webkit.org/b/209461 imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html [ ImageOnlyFailure ]
webkit.org/b/191461 imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html [ ImageOnlyFailure ]
webkit.org/b/191462 imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html [ ImageOnlyFailure ]
webkit.org/b/191463 imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html [ ImageOnlyFailure ]
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1,3 +1,25 @@
+2020-09-23 obru...@igalia.com <obru...@igalia.com>
+
+ [css-grid] Clear the override width for computing percent margins
+ https://bugs.webkit.org/show_bug.cgi?id=209461
+
+ Reviewed by Manuel Rego Casasnovas.
+
+ Update test expectations.
+
+ The 2 grid-items-percentage-paddings tests are now expected to have some
+ failures because of bug 191964. In fact they were already failing before
+ this patch, as can be seen in wpt.fyi:
+ https://wpt.fyi/results/css/css-grid/grid-items?q=grid-items-percentage-paddings-vertical-%20-002.html
+ It's just that the bug that is being fixed made the test runner think
+ that the tests were passing, probably some racy condition or such.
+
+ * web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt:
+ * web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt:
+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt:
+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt:
+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt:
+
2020-09-23 Youenn Fablet <you...@apple.com>
Add support for HTMLMediaElement.setSinkId
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages-expected.txt 2020-09-23 22:31:47 UTC (rev 267503)
@@ -2,17 +2,17 @@
PASS auto - columns
PASS auto - rows
PASS min - columns
-FAIL min - rows assert_equals: grid-template-rows expected "50px" but got "150px"
+PASS min - rows
PASS max - columns
PASS max - rows
PASS size - columns
PASS size - rows
PASS min max - columns
-FAIL min max - rows assert_equals: grid-template-rows expected "50px" but got "150px"
+PASS min max - rows
PASS min size - columns
-FAIL min size - rows assert_equals: grid-template-rows expected "50px" but got "200px"
+PASS min size - rows
PASS max size - columns
PASS max size - rows
PASS min max size - columns
-FAIL min max size - rows assert_equals: grid-template-rows expected "50px" but got "150px"
+PASS min max size - rows
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001-expected.txt 2020-09-23 22:31:47 UTC (rev 267503)
@@ -2,8 +2,8 @@
PASS Minimum size: auto
PASS Minimum size: 0%
PASS Minimum size: 100%
-FAIL Minimum size: 200% assert_equals: height expected "200px" but got "400px"
-FAIL Minimum size: 300% assert_equals: height expected "300px" but got "5400px"
+PASS Minimum size: 200%
+PASS Minimum size: 300%
PASS Minimum size: 400px
PASS Minimum size: 500px
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001-expected.txt 2020-09-23 22:31:47 UTC (rev 267503)
@@ -2,32 +2,12 @@
PASS .grid 1
PASS .grid 2
PASS .grid 3
-FAIL .grid 4 assert_equals:
-<div class="grid">
- <div class="minHeight60 marginTop5" data-expected-height="60"></div>
- <div data-expected-height="65"></div>
-</div>
-height expected 65 but got 60
-FAIL .grid 5 assert_equals:
-<div class="grid">
- <div class="minHeight60 marginTop5 marginLeftAuto" data-expected-height="60"></div>
- <div data-expected-height="65"></div>
-</div>
-height expected 65 but got 60
+PASS .grid 4
+PASS .grid 5
PASS .grid 6
-FAIL .grid 7 assert_equals:
-<div class="grid">
- <div class="minHeight60 marginBottom10" data-expected-height="60"></div>
- <div data-expected-height="70"></div>
-</div>
-height expected 70 but got 60
+PASS .grid 7
PASS .grid 8
-FAIL .grid 9 assert_equals:
-<div class="grid">
- <div class="minHeight60 marginTop5 marginBottom10" data-expected-height="60"></div>
- <div data-expected-height="75"></div>
-</div>
-height expected 75 but got 60
+PASS .grid 9
PASS .grid 10
PASS .grid 11
PASS .grid 12
@@ -41,41 +21,16 @@
PASS .grid 20
PASS .grid 21
PASS .grid 22
-FAIL .grid 23 assert_equals:
-<div class="grid">
- <div class="minHeight60 marginTop5 marginBottom10 paddingTop6 paddingBottom3 borderTop2 borderBottom4" data-expected-height="75"></div>
- <div data-expected-height="90"></div>
-</div>
-height expected 90 but got 75
+PASS .grid 23
PASS .grid 24
PASS .grid 25
PASS .grid 26
-FAIL .grid 27 assert_equals:
-<div class="grid directionRTL">
- <div class="minHeight60 marginTop5" data-expected-height="60"></div>
- <div data-expected-height="65"></div>
-</div>
-height expected 65 but got 60
-FAIL .grid 28 assert_equals:
-<div class="grid directionRTL">
- <div class="minHeight60 marginTop5 marginLeftAuto" data-expected-height="60"></div>
- <div data-expected-height="65"></div>
-</div>
-height expected 65 but got 60
+PASS .grid 27
+PASS .grid 28
PASS .grid 29
-FAIL .grid 30 assert_equals:
-<div class="grid directionRTL">
- <div class="minHeight60 marginBottom10" data-expected-height="60"></div>
- <div data-expected-height="70"></div>
-</div>
-height expected 70 but got 60
+PASS .grid 30
PASS .grid 31
-FAIL .grid 32 assert_equals:
-<div class="grid directionRTL">
- <div class="minHeight60 marginTop5 marginBottom10" data-expected-height="60"></div>
- <div data-expected-height="75"></div>
-</div>
-height expected 75 but got 60
+PASS .grid 32
PASS .grid 33
PASS .grid 34
PASS .grid 35
@@ -89,12 +44,7 @@
PASS .grid 43
PASS .grid 44
PASS .grid 45
-FAIL .grid 46 assert_equals:
-<div class="grid directionRTL">
- <div class="minHeight60 marginTop5 marginBottom10 paddingTop6 paddingBottom3 borderTop2 borderBottom4" data-expected-height="75"></div>
- <div data-expected-height="90"></div>
-</div>
-height expected 90 but got 75
+PASS .grid 46
Direction LTR
Item height: 60px;
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002-expected.txt 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1,12 +1,32 @@
PASS .grid 1
PASS .grid 2
-PASS .grid 3
-PASS .grid 4
+FAIL .grid 3 assert_equals:
+<div class="grid">
+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
+FAIL .grid 4 assert_equals:
+<div class="grid">
+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
PASS .grid 5
PASS .grid 6
-PASS .grid 7
-PASS .grid 8
+FAIL .grid 7 assert_equals:
+<div class="grid directionRTL">
+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
+FAIL .grid 8 assert_equals:
+<div class="grid directionRTL">
+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
Direction LTR
Item padding-left: 50%;
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt (267502 => 267503)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002-expected.txt 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1,12 +1,32 @@
PASS .grid 1
PASS .grid 2
-PASS .grid 3
-PASS .grid 4
+FAIL .grid 3 assert_equals:
+<div class="grid">
+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
+FAIL .grid 4 assert_equals:
+<div class="grid">
+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
PASS .grid 5
PASS .grid 6
-PASS .grid 7
-PASS .grid 8
+FAIL .grid 7 assert_equals:
+<div class="grid directionRTL">
+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
+FAIL .grid 8 assert_equals:
+<div class="grid directionRTL">
+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div>
+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div>
+</div>
+height expected 60 but got 50
Direction LTR
Item padding-left: 50%;
Modified: trunk/Source/WebCore/ChangeLog (267502 => 267503)
--- trunk/Source/WebCore/ChangeLog 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/Source/WebCore/ChangeLog 2020-09-23 22:31:47 UTC (rev 267503)
@@ -1,3 +1,54 @@
+2020-09-23 obru...@igalia.com <obru...@igalia.com>
+
+ [css-grid] Clear the override width for computing percent margins
+ https://bugs.webkit.org/show_bug.cgi?id=209461
+
+ Reviewed by Manuel Rego Casasnovas.
+
+ When calculating the min-content contribution of a grid item of an auto
+ sized grid track we must consider the grid item's margin. When the grid
+ item's area is indefinite, a percent margin is resolved to zero.
+ However, when performing a relayout, the percent margin may be solved
+ against the previously computed grid area, since the grid item has
+ already an OverrideContainingBlockLogicalWidth value.
+
+ In order to re-compute the percent margin properly, we need to clear
+ the previously override value. It's important to be careful of not
+ clearing the override value set during intrinsic size, since we need
+ it for the actual layout phase. Hence, we only reset the 'override'
+ value when we are executing a definite strategy.
+
+ This is a reland of r261841, which was reverted because it broke spotify.
+ This problem is now avoided thanks to bug 210089.
+
+ Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html
+ imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html
+
+ * rendering/GridTrackSizingAlgorithm.cpp:
+ (WebCore::hasRelativeMarginOrPaddingForChild):
+ (WebCore::hasRelativeOrIntrinsicSizeForChild):
+ (WebCore::shouldClearOverrideContainingBlockContentSizeForChild):
+ (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
+ (WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const):
+ (WebCore::DefiniteSizeStrategy::minLogicalSizeForChild const):
+ (WebCore::DefiniteSizeStrategy::minContentForChild const):
+ * rendering/GridTrackSizingAlgorithm.h:
+
2020-09-23 Carlos Garcia Campos <cgar...@igalia.com>
[GTK][WPE] Move TLS errors API from WebKitContext to WebKitWebsiteDataManager
Modified: trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp (267502 => 267503)
--- trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp 2020-09-23 22:31:47 UTC (rev 267503)
@@ -106,13 +106,25 @@
return axis == GridRowAxis ? ForColumns : ForRows;
}
-static bool shouldClearOverrideContainingBlockContentSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
+static bool hasRelativeMarginOrPaddingForChild(const RenderBox& child, GridTrackSizingDirection direction)
{
if (direction == ForColumns)
+ return child.style().marginStart().isPercentOrCalculated() || child.style().marginEnd().isPercentOrCalculated() || child.style().paddingStart().isPercentOrCalculated() || child.style().paddingEnd().isPercentOrCalculated();
+ return child.style().marginBefore().isPercentOrCalculated() || child.style().marginAfter().isPercentOrCalculated() || child.style().paddingBefore().isPercentOrCalculated() || child.style().paddingAfter().isPercentOrCalculated();
+}
+
+static bool hasRelativeOrIntrinsicSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
+{
+ if (direction == ForColumns)
return child.hasRelativeLogicalWidth() || child.style().logicalWidth().isIntrinsicOrAuto();
return child.hasRelativeLogicalHeight() || child.style().logicalHeight().isIntrinsicOrAuto();
}
+static bool shouldClearOverrideContainingBlockContentSizeForChild(const RenderBox& child, GridTrackSizingDirection direction)
+{
+ return hasRelativeOrIntrinsicSizeForChild(child, direction) || hasRelativeMarginOrPaddingForChild(child, direction);
+}
+
static void setOverrideContainingBlockContentSizeForChild(RenderBox& child, GridTrackSizingDirection direction, Optional<LayoutUnit> size)
{
if (direction == ForColumns)
@@ -121,22 +133,6 @@
child.setOverrideContainingBlockContentLogicalHeight(size);
}
-// FIXME: we borrowed this from RenderBlock. We cannot call it from here because it's protected for RenderObjects.
-static LayoutUnit marginIntrinsicLogicalWidthForChild(const RenderGrid* renderGrid, RenderBox& child)
-{
- // A margin has three types: fixed, percentage, and auto (variable).
- // Auto and percentage margins become 0 when computing min/max width.
- // Fixed margins can be added in as is.
- Length marginLeft = child.style().marginStartUsing(&renderGrid->style());
- Length marginRight = child.style().marginEndUsing(&renderGrid->style());
- LayoutUnit margin;
- if (marginLeft.isFixed())
- margin += marginLeft.value();
- if (marginRight.isFixed())
- margin += marginRight.value();
- return margin;
-}
-
// GridTrackSizingAlgorithm private.
void GridTrackSizingAlgorithm::setFreeSpace(GridTrackSizingDirection direction, Optional<LayoutUnit> freeSpace)
@@ -832,13 +828,7 @@
}
LayoutUnit gridAreaSize = m_algorithm.gridAreaBreadthForChild(child, childInlineDirection);
- if (isRowAxis)
- return minLogicalWidthForChild(child, childMinSize, gridAreaSize) + baselineShim;
-
- bool overrideSizeHasChanged = updateOverrideContainingBlockContentSizeForChild(child, childInlineDirection, gridAreaSize);
- layoutGridItemForMinSizeComputation(child, overrideSizeHasChanged);
-
- return child.computeLogicalHeightUsing(MinSize, childMinSize, WTF::nullopt).valueOr(0) + child.marginLogicalHeight() + child.scrollbarLogicalHeight() + baselineShim;
+ return minLogicalSizeForChild(child, childMinSize, gridAreaSize) + baselineShim;
}
bool GridTrackSizingAlgorithm::canParticipateInBaselineAlignment(const RenderBox& child, GridAxis baselineAxis) const
@@ -920,6 +910,18 @@
return true;
}
+LayoutUnit GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild(RenderBox& child, const Length& childMinSize, LayoutUnit availableSize) const
+{
+ GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
+ bool isRowAxis = direction() == childInlineDirection;
+ if (isRowAxis)
+ return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childInlineDirection, child);
+ bool overrideSizeHasChanged = updateOverrideContainingBlockContentSizeForChild(child, childInlineDirection, availableSize);
+ layoutGridItemForMinSizeComputation(child, overrideSizeHasChanged);
+ GridTrackSizingDirection childBlockDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForRows);
+ return child.computeLogicalHeightUsing(MinSize, childMinSize, WTF::nullopt).valueOr(0) + GridLayoutFunctions::marginLogicalSizeForChild(*renderGrid(), childBlockDirection, child);
+}
+
class IndefiniteSizeStrategy final : public GridTrackSizingAlgorithmStrategy {
public:
IndefiniteSizeStrategy(GridTrackSizingAlgorithm& algorithm)
@@ -926,7 +928,6 @@
: GridTrackSizingAlgorithmStrategy(algorithm) { }
private:
- LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const override;
void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const override;
void maximizeTracks(Vector<GridTrack>&, Optional<LayoutUnit>& freeSpace) override;
double findUsedFlexFraction(Vector<unsigned>& flexibleSizedTracksIndex, GridTrackSizingDirection, Optional<LayoutUnit> freeSpace) const override;
@@ -934,11 +935,6 @@
LayoutUnit freeSpaceForStretchAutoTracksStep() const override;
};
-LayoutUnit IndefiniteSizeStrategy::minLogicalWidthForChild(RenderBox& child, Length childMinSize, LayoutUnit availableSize) const
-{
- return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + marginIntrinsicLogicalWidthForChild(renderGrid(), child);
-}
-
void IndefiniteSizeStrategy::layoutGridItemForMinSizeComputation(RenderBox& child, bool overrideSizeHasChanged) const
{
if (overrideSizeHasChanged && direction() != ForColumns)
@@ -1027,12 +1023,13 @@
: GridTrackSizingAlgorithmStrategy(algorithm) { }
private:
- LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const override;
void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const override;
void maximizeTracks(Vector<GridTrack>&, Optional<LayoutUnit>& freeSpace) override;
double findUsedFlexFraction(Vector<unsigned>& flexibleSizedTracksIndex, GridTrackSizingDirection, Optional<LayoutUnit> freeSpace) const override;
bool recomputeUsedFlexFractionIfNeeded(double& flexFraction, LayoutUnit& totalGrowth) const override;
LayoutUnit freeSpaceForStretchAutoTracksStep() const override;
+ LayoutUnit minContentForChild(RenderBox&) const override;
+ LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, LayoutUnit availableSize) const override;
};
LayoutUnit IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep() const
@@ -1047,11 +1044,14 @@
return minSize.value() - computeTrackBasedSize();
}
-LayoutUnit DefiniteSizeStrategy::minLogicalWidthForChild(RenderBox& child, Length childMinSize, LayoutUnit availableSize) const
+LayoutUnit DefiniteSizeStrategy::minLogicalSizeForChild(RenderBox& child, const Length& childMinSize, LayoutUnit availableSize) const
{
- LayoutUnit marginLogicalWidth =
- GridLayoutFunctions::computeMarginLogicalSizeForChild(*renderGrid(), ForColumns, child);
- return child.computeLogicalWidthInFragmentUsing(MinSize, childMinSize, availableSize, *renderGrid(), nullptr) + marginLogicalWidth;
+ GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
+ LayoutUnit indefiniteSize = direction() == childInlineDirection ? LayoutUnit() : LayoutUnit(-1);
+ GridTrackSizingDirection flowAwareDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, direction());
+ if (hasRelativeMarginOrPaddingForChild(child, flowAwareDirection) || (direction() != childInlineDirection && hasRelativeOrIntrinsicSizeForChild(child, flowAwareDirection)))
+ setOverrideContainingBlockContentSizeForChild(child, direction(), indefiniteSize);
+ return GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild(child, childMinSize, availableSize);
}
void DefiniteSizeStrategy::maximizeTracks(Vector<GridTrack>& tracks, Optional<LayoutUnit>& freeSpace)
@@ -1090,6 +1090,14 @@
return m_algorithm.freeSpace(direction()).value();
}
+LayoutUnit DefiniteSizeStrategy::minContentForChild(RenderBox& child) const
+{
+ GridTrackSizingDirection childInlineDirection = GridLayoutFunctions::flowAwareDirectionForChild(*renderGrid(), child, ForColumns);
+ if (direction() == childInlineDirection && child.needsLayout() && shouldClearOverrideContainingBlockContentSizeForChild(child, ForColumns))
+ setOverrideContainingBlockContentSizeForChild(child, childInlineDirection, LayoutUnit());
+ return GridTrackSizingAlgorithmStrategy::minContentForChild(child);
+}
+
bool DefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded(double& flexFraction, LayoutUnit& totalGrowth) const
{
UNUSED_PARAM(flexFraction);
Modified: trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h (267502 => 267503)
--- trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h 2020-09-23 22:14:15 UTC (rev 267502)
+++ trunk/Source/WebCore/rendering/GridTrackSizingAlgorithm.h 2020-09-23 22:31:47 UTC (rev 267503)
@@ -252,7 +252,7 @@
class GridTrackSizingAlgorithmStrategy {
WTF_MAKE_FAST_ALLOCATED;
public:
- LayoutUnit minContentForChild(RenderBox&) const;
+ virtual LayoutUnit minContentForChild(RenderBox&) const;
LayoutUnit maxContentForChild(RenderBox&) const;
LayoutUnit minSizeForChild(RenderBox&) const;
@@ -267,7 +267,7 @@
GridTrackSizingAlgorithmStrategy(GridTrackSizingAlgorithm& algorithm)
: m_algorithm(algorithm) { }
- virtual LayoutUnit minLogicalWidthForChild(RenderBox&, Length childMinSize, LayoutUnit availableSize) const = 0;
+ virtual LayoutUnit minLogicalSizeForChild(RenderBox&, const Length& childMinSize, LayoutUnit availableSize) const;
virtual void layoutGridItemForMinSizeComputation(RenderBox&, bool overrideSizeHasChanged) const = 0;
LayoutUnit logicalHeightForChild(RenderBox&) const;
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes