WebKit Bugzilla
Attachment 361700 Details for
Bug 194509
: [css-grid] Indefinite percentage in fit-content track size is treated as 0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194509-20190211203904.patch (text/plain), 8.90 KB, created by
Oriol Brufau
on 2019-02-11 11:39:06 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Oriol Brufau
Created:
2019-02-11 11:39:06 PST
Size:
8.90 KB
patch
obsolete
>Subversion Revision: 241267 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5346df6c982dedc6363141210ad4849e44450d87..d25c9c222bf720b032f60bf49ad116f2df6980dc 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,26 @@ >+2019-02-11 Oriol Brufau <obrufau@igalia.com> >+ >+ [css-grid] Handle indefinite percentages in fit-content() >+ https://bugs.webkit.org/show_bug.cgi?id=194509 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html >+ >+ If the size of the grid container depends on the size of its tracks, >+ a percentage in fit-content() is indefinite. Without this patch, some >+ places treated this case as fit-content(0), which prevented the grid >+ container from growing enough to contain the max-content contribution >+ of its grid items. >+ >+ This patch treats such fit-content() as minmax(auto, max-content), >+ but once the size of the grid container is known and it is laid out >+ "for real", then the percentage is definite and it's used. >+ >+ * rendering/GridTrackSizingAlgorithm.cpp: >+ (WebCore::GridTrackSizingAlgorithm::gridTrackSize const): >+ (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes): >+ > 2019-02-11 Youenn Fablet <youenn@apple.com> > > Make Request constructor throw if FetchRequestInit.signal is not undefined, null or an AbortSignal object >diff --git a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp b/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp >index 88c4f5957bccd88f2a028a11e410be2e2820681f..9d328743c4aa6ef875341ab430a490917d0173d1 100644 >--- a/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp >+++ b/Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp >@@ -645,7 +645,7 @@ GridTrackSize GridTrackSizingAlgorithm::gridTrackSize(GridTrackSizingDirection d > > auto& trackSize = rawGridTrackSize(direction, translatedIndex); > if (trackSize.isFitContent()) >- return trackSize; >+ return isRelativeGridLengthAsAuto(trackSize.fitContentTrackBreadth(), direction) ? GridTrackSize(Length(Auto), Length(MaxContent)) : trackSize; > > GridLength minTrackBreadth = trackSize.minTrackBreadth(); > GridLength maxTrackBreadth = trackSize.maxTrackBreadth(); >@@ -1099,7 +1099,6 @@ void GridTrackSizingAlgorithm::initializeTrackSizes() > ASSERT(!m_hasPercentSizedRowsIndefiniteHeight); > > Vector<GridTrack>& allTracks = tracks(m_direction); >- const bool hasDefiniteFreeSpace = !!availableSpace(); > const bool indefiniteHeight = m_direction == ForRows && !m_renderGrid->hasDefiniteLogicalHeight(); > LayoutUnit maxSize = std::max(0_lu, availableSpace().valueOr(0_lu)); > // 1. Initialize per Grid track variables. >@@ -1111,11 +1110,8 @@ void GridTrackSizingAlgorithm::initializeTrackSizes() > track.setGrowthLimit(initialGrowthLimit(trackSize, track.baseSize())); > track.setInfinitelyGrowable(false); > >- if (trackSize.isFitContent()) { >- GridLength gridLength = trackSize.fitContentTrackBreadth(); >- if (!gridLength.isPercentage() || hasDefiniteFreeSpace) >- track.setGrowthLimitCap(valueForLength(gridLength.length(), maxSize)); >- } >+ if (trackSize.isFitContent()) >+ track.setGrowthLimitCap(valueForLength(trackSize.fitContentTrackBreadth().length(), maxSize)); > if (trackSize.isContentSized()) > m_contentSizedTracksIndex.append(i); > if (trackSize.maxTrackBreadth().isFlex()) >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index b3d0cbf43885b871124f8ccd0a7f86bbaef9eff2..594c7ca77e822c7035290740f9c9187f8c2eb583 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,16 @@ >+2019-02-11 Oriol Brufau <obrufau@igalia.com> >+ >+ [css-grid] Handle indefinite percentages in fit-content() >+ https://bugs.webkit.org/show_bug.cgi?id=194509 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Import WPT test. >+ >+ * web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage-expected.txt: Added. >+ * web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html: Added. >+ * web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log: >+ > 2019-01-30 Youenn Fablet <youenn@apple.com> > > ServiceWorkerJob should notify its client in case its job is cancelled >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cb16944971463a45a186298c9ba6f25ee4409cb6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS fit-content(0%) >+PASS fit-content(50%) >+PASS fit-content(75%) >+PASS fit-content(100%) >+PASS fit-content(150%) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ab55502487328d11ac153440fec4963e6e70709c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: indefinite percentage in fit-content()</title> >+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid/#track-sizes" title="7.2.1. Track Sizes"> >+<meta name="assert" content="Checks that an indefinite percentage in fit-content lets the grid container grow enough to contain the max-content contribution of its grid items."> >+<style> >+.container { >+ width: 200px; >+ margin-top: 10px; >+} >+.grid { >+ display: inline-grid; >+ background: blue; >+} >+.item { >+ background: orange; >+} >+.item::before, .item::after { >+ content: ''; >+ float: left; >+ width: 50px; >+ height: 50px; >+} >+</style> >+ >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="log"></div> >+ >+<script> >+"use strict"; >+function clamp(value, min, max) { >+ return Math.max(min, Math.min(max, value)); >+} >+const minContent = 50; >+const maxContent = 100; >+for (const percentage of [0, 50, 75, 100, 150]) { >+ const container = document.createElement("div"); >+ container.className = "container"; >+ document.body.appendChild(container); >+ const grid = document.createElement("div"); >+ grid.className = "grid"; >+ grid.style.gridTemplateColumns = `fit-content(${percentage}%)`; >+ container.appendChild(grid); >+ const item = document.createElement("div"); >+ item.className = "item"; >+ grid.appendChild(item); >+ test(function() { >+ const colSize = clamp(percentage * maxContent / 100, minContent, maxContent); >+ const height = colSize < maxContent ? maxContent : minContent; >+ assert_equals(item.offsetWidth, colSize, "Grid item width"); >+ assert_equals(item.offsetHeight, height, "Grid item height"); >+ assert_equals(grid.offsetWidth, maxContent, "Grid container width"); >+ assert_equals(grid.offsetHeight, height, "Grid container height"); >+ assert_equals(getComputedStyle(grid).gridTemplateColumns, colSize + "px", >+ "Grid column size"); >+ }, `fit-content(${percentage}%)`); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >index f651e016e768060ed1e63ffc5f053aa395aaeb1a..4750a1172d6a54643c3831b7eb9d2e4bdf852b08 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >@@ -20,6 +20,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-004.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-fit-content-percentage.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-layout-free-space-unit-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-layout-free-space-unit.html
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194509
:
361698
| 361700