Bug 1938619 - Add a pref (disabled by default) to enable intrinsic sizing of flexible grid tracks based on grid items that span multiple tracks. r=layout-grid-reviewers,dholbert

The pref layout.css.grid-flex-spanning-items-intrinsic-sizing.enabled is
expected to be removed once these regressions are fixed. This should be a good
compromise between maintaining the code from bug 1916849, and avoiding
breakage/extra backouts.

Differential Revision: https://phabricator.services.mozilla.com/D235089
This commit is contained in:
Emily McDonough
2025-01-24 06:30:03 +00:00
parent 88b4df5d57
commit 87603e55fc
5 changed files with 131 additions and 0 deletions

View File

@@ -6814,6 +6814,10 @@ void nsGridContainerFrame::Tracks::ResolveIntrinsicSize(
// Set eIsFlexing on the item state here to speed up
// FindUsedFlexFraction later.
gridItem.mState[mAxis] |= ItemState::eIsFlexing;
if (!StaticPrefs::
layout_css_grid_flex_spanning_items_intrinsic_sizing_enabled()) {
continue;
}
items = &flexSpanningItems;
}

View File

@@ -9527,6 +9527,13 @@
mirror: always
rust: true
# Perform intrinsic sizing of flexible grid tracks based on grid items that
# span more than one track.
- name: layout.css.grid-flex-spanning-items-intrinsic-sizing.enabled
type: bool
value: false
mirror: always
# Is support for :has() enabled?
- name: layout.css.has-selector.enabled
type: RelaxedAtomicBool

View File

@@ -0,0 +1,41 @@
[grid-flex-track-intrinsic-sizes-001.html]
expected:
if (os == "android") and fission: [OK, TIMEOUT]
['grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr);]
expected: FAIL
['grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);]
expected: FAIL
['grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;]
expected: FAIL
['grid' with: grid-template-columns: 0fr 1fr; and grid-template-rows: 0fr 1fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr 0fr; and grid-template-rows: 1fr 0fr;]
expected: FAIL
['grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr minmax(25px, 1fr); and grid-template-rows: 1fr minmax(25px, 1fr);]
expected: FAIL
['grid' with: grid-template-columns: 1fr max-content; and grid-template-rows: 1fr max-content;]
expected: FAIL
['grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto;]
expected: FAIL
['grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);]
expected: FAIL
['grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 1fr 3fr;]
expected: FAIL

View File

@@ -1,3 +1,14 @@
[grid-flex-track-intrinsic-sizes-002.html]
expected:
if (os == "android") and fission: [OK, TIMEOUT]
['grid' with: grid-template-columns: 1fr 1fr 1fr; and grid-template-rows: 1fr 1fr 1fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr auto auto auto; and grid-template-rows: 1fr auto auto auto;]
expected: FAIL
['grid' with: grid-template-columns: 1fr 1fr 1fr 1fr; and grid-template-rows: 1fr 1fr 1fr 1fr;]
expected: FAIL
['grid' with: grid-template-columns: 1fr 1fr 1fr 4fr; and grid-template-rows: 1fr 1fr 1fr 4fr;]
expected: FAIL

View File

@@ -1,6 +1,74 @@
[grid-flex-track-intrinsic-sizes-003.html]
expected:
if (os == "android") and fission: [OK, TIMEOUT]
[50px min item 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0.5fr auto; and grid-template-rows: 0.5fr auto;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr min-content; and grid-template-rows: 1fr min-content;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr 1fr; and grid-template-rows: 0fr 1fr;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr minmax(25px, 1fr); and grid-template-rows: 1fr minmax(25px, 1fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr max-content; and grid-template-rows: 1fr max-content;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr min-content; and grid-template-rows: 0fr min-content;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr 0fr; and grid-template-rows: 1fr 0fr;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 1fr 3fr;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0.5fr auto; and grid-template-rows: 0.5fr auto;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto;]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);]
expected: FAIL
[min-content min item 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr);]
expected: FAIL
[50px min item 'grid' with: grid-template-columns: 0fr min-content; and grid-template-rows: 0fr min-content;]
expected: FAIL