Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[contain-intrinsic-size] Correct "auto none" support
https://bugs.webkit.org/show_bug.cgi?id=259311 Reviewed by Tim Nguyen. r265617 incorrectly changed some places where writing mode was being taken into account, fix that by introducing containIntrinsicLogical(Width|Height)HasAuto methods and using them instead of containIntrinsic*(Width|Height)HasAuto. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-015-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-015.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-016-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-016.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-017-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-017.html: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-018-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-018.html: Added. * Source/WebCore/dom/Document.cpp: (WebCore::CallbackForContainIntrinsicSize): * Source/WebCore/rendering/style/RenderStyle.h: * Source/WebCore/rendering/style/RenderStyleInlines.h: (WebCore::RenderStyle::containIntrinsicLogicalHeightHasAuto const): (WebCore::RenderStyle::containIntrinsicLogicalWidthHasAuto const): * Source/WebCore/rendering/updating/RenderTreeUpdater.cpp: (WebCore::RenderTreeUpdater::updateElementRenderer): Canonical link: https://commits.webkit.org/266136@main
- Loading branch information
Showing
12 changed files
with
396 additions
and
4 deletions.
There are no files selected for viewing
3 changes: 3 additions & 0 deletions
3
...ported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-015-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
PASS Basic usage | ||
|
94 changes: 94 additions & 0 deletions
94
...Tests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-015.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>contain-intrinsic-width: auto none in vertical writing mode</title> | ||
<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> | ||
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> | ||
<meta name="assert" content="Tests that 'contain-intrinsic-width: auto none' respects the auto keyword in vertical writing mode"> | ||
|
||
<style> | ||
#target { | ||
width: max-content; | ||
height: max-content; | ||
} | ||
.cis-auto { | ||
contain-intrinsic-width: auto none; | ||
} | ||
.skip-contents { | ||
content-visibility: hidden; | ||
} | ||
.size-100-50 { | ||
inline-size: 100px; | ||
block-size: 50px; | ||
} | ||
.size-75-25 { | ||
inline-size: 75px; | ||
block-size: 25px; | ||
} | ||
.vertical { | ||
writing-mode: vertical-lr; | ||
} | ||
</style> | ||
|
||
<div id="log"></div> | ||
|
||
<div id="parent"> | ||
<div id="target"> | ||
<div id="contents"></div> | ||
</div> | ||
</div> | ||
|
||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script> | ||
const parent = document.getElementById("parent"); | ||
const target = document.getElementById("target"); | ||
const contents = document.getElementById("contents"); | ||
|
||
function checkSize(expectedWidth, expectedHeight, msg) { | ||
assert_equals(target.clientWidth, expectedWidth, msg + " - clientWidth"); | ||
assert_equals(target.clientHeight, expectedHeight, msg + " - clientHeight"); | ||
} | ||
|
||
function nextRendering() { | ||
return new Promise(resolve => { | ||
requestAnimationFrame(() => requestAnimationFrame(() => resolve())); | ||
}); | ||
} | ||
|
||
function cleanup() { | ||
parent.className = ""; | ||
target.className = ""; | ||
contents.className = ""; | ||
checkSize(0, 0, "Sizing after cleanup"); | ||
} | ||
|
||
promise_test(async function() { | ||
this.add_cleanup(cleanup); | ||
parent.classList.add("vertical"); | ||
target.className = "cis-auto skip-contents"; | ||
contents.classList.add("size-100-50"); | ||
checkSize(0, 0, "Size containment with no last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(50, 100, "Sizing normally"); | ||
|
||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(50, 0, "Using last remembered width"); | ||
|
||
contents.classList.remove("size-100-50"); | ||
contents.classList.add("size-75-25"); | ||
checkSize(50, 0, "Still using last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(25, 75, "Sizing normally with different size"); | ||
|
||
target.classList.add("skip-contents"); | ||
checkSize(50, 0, "Going back to last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(25, 0, "Using the new last remembered width"); | ||
}, "Basic usage"); | ||
</script> |
3 changes: 3 additions & 0 deletions
3
...ported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-016-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
PASS Basic usage | ||
|
94 changes: 94 additions & 0 deletions
94
...Tests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-016.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>contain-intrinsic-height: auto none in vertical writing mode</title> | ||
<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> | ||
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> | ||
<meta name="assert" content="Tests that 'contain-intrinsic-height: auto none' respects the auto keyword in vertical writing mode"> | ||
|
||
<style> | ||
#target { | ||
width: max-content; | ||
height: max-content; | ||
} | ||
.cis-auto { | ||
contain-intrinsic-height: auto none; | ||
} | ||
.skip-contents { | ||
content-visibility: hidden; | ||
} | ||
.size-100-50 { | ||
inline-size: 100px; | ||
block-size: 50px; | ||
} | ||
.size-75-25 { | ||
inline-size: 75px; | ||
block-size: 25px; | ||
} | ||
.vertical { | ||
writing-mode: vertical-lr; | ||
} | ||
</style> | ||
|
||
<div id="log"></div> | ||
|
||
<div id="parent"> | ||
<div id="target"> | ||
<div id="contents"></div> | ||
</div> | ||
</div> | ||
|
||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script> | ||
const parent = document.getElementById("parent"); | ||
const target = document.getElementById("target"); | ||
const contents = document.getElementById("contents"); | ||
|
||
function checkSize(expectedWidth, expectedHeight, msg) { | ||
assert_equals(target.clientWidth, expectedWidth, msg + " - clientWidth"); | ||
assert_equals(target.clientHeight, expectedHeight, msg + " - clientHeight"); | ||
} | ||
|
||
function nextRendering() { | ||
return new Promise(resolve => { | ||
requestAnimationFrame(() => requestAnimationFrame(() => resolve())); | ||
}); | ||
} | ||
|
||
function cleanup() { | ||
parent.className = ""; | ||
target.className = ""; | ||
contents.className = ""; | ||
checkSize(0, 0, "Sizing after cleanup"); | ||
} | ||
|
||
promise_test(async function() { | ||
this.add_cleanup(cleanup); | ||
parent.classList.add("vertical"); | ||
target.className = "cis-auto skip-contents"; | ||
contents.classList.add("size-100-50"); | ||
checkSize(0, 0, "Size containment with no last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(50, 100, "Sizing normally"); | ||
|
||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(0, 100, "Using last remembered heigth"); | ||
|
||
contents.classList.remove("size-100-50"); | ||
contents.classList.add("size-75-25"); | ||
checkSize(0, 100, "Still using last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(25, 75, "Sizing normally with different size"); | ||
|
||
target.classList.add("skip-contents"); | ||
checkSize(0, 100, "Going back to last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(0, 75, "Using the new last remembered heigth"); | ||
}, "Basic usage"); | ||
</script> |
3 changes: 3 additions & 0 deletions
3
...ported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-017-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
PASS Basic usage | ||
|
94 changes: 94 additions & 0 deletions
94
...Tests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-017.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>contain-intrinsic-width: auto length in vertical writing mode</title> | ||
<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> | ||
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> | ||
<meta name="assert" content="Tests that 'contain-intrinsic-width: auto length' respects the auto keyword in vertical writing mode"> | ||
|
||
<style> | ||
#target { | ||
width: max-content; | ||
height: max-content; | ||
} | ||
.cis-auto { | ||
contain-intrinsic-width: auto 2px; | ||
} | ||
.skip-contents { | ||
content-visibility: hidden; | ||
} | ||
.size-100-50 { | ||
inline-size: 100px; | ||
block-size: 50px; | ||
} | ||
.size-75-25 { | ||
inline-size: 75px; | ||
block-size: 25px; | ||
} | ||
.vertical { | ||
writing-mode: vertical-lr; | ||
} | ||
</style> | ||
|
||
<div id="log"></div> | ||
|
||
<div id="parent"> | ||
<div id="target"> | ||
<div id="contents"></div> | ||
</div> | ||
</div> | ||
|
||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script> | ||
const parent = document.getElementById("parent"); | ||
const target = document.getElementById("target"); | ||
const contents = document.getElementById("contents"); | ||
|
||
function checkSize(expectedWidth, expectedHeight, msg) { | ||
assert_equals(target.clientWidth, expectedWidth, msg + " - clientWidth"); | ||
assert_equals(target.clientHeight, expectedHeight, msg + " - clientHeight"); | ||
} | ||
|
||
function nextRendering() { | ||
return new Promise(resolve => { | ||
requestAnimationFrame(() => requestAnimationFrame(() => resolve())); | ||
}); | ||
} | ||
|
||
function cleanup() { | ||
parent.className = ""; | ||
target.className = ""; | ||
contents.className = ""; | ||
checkSize(0, 0, "Sizing after cleanup"); | ||
} | ||
|
||
promise_test(async function() { | ||
this.add_cleanup(cleanup); | ||
parent.classList.add("vertical"); | ||
target.className = "cis-auto skip-contents"; | ||
contents.classList.add("size-100-50"); | ||
checkSize(2, 0, "Size containment with no last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(50, 100, "Sizing normally"); | ||
|
||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(50, 0, "Using last remembered width"); | ||
|
||
contents.classList.remove("size-100-50"); | ||
contents.classList.add("size-75-25"); | ||
checkSize(50, 0, "Still using last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(25, 75, "Sizing normally with different size"); | ||
|
||
target.classList.add("skip-contents"); | ||
checkSize(50, 0, "Going back to last remembered width"); | ||
|
||
target.classList.remove("skip-contents"); | ||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(25, 0, "Using the new last remembered width"); | ||
}, "Basic usage"); | ||
</script> |
3 changes: 3 additions & 0 deletions
3
...ported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-018-expected.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
PASS Basic usage | ||
|
94 changes: 94 additions & 0 deletions
94
...Tests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-018.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>contain-intrinsic-height: auto length in vertical writing mode</title> | ||
<link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> | ||
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override"> | ||
<meta name="assert" content="Tests that 'contain-intrinsic-height: auto length' respects the auto keyword in vertical writing mode"> | ||
|
||
<style> | ||
#target { | ||
width: max-content; | ||
height: max-content; | ||
} | ||
.cis-auto { | ||
contain-intrinsic-height: auto 2px; | ||
} | ||
.skip-contents { | ||
content-visibility: hidden; | ||
} | ||
.size-100-50 { | ||
inline-size: 100px; | ||
block-size: 50px; | ||
} | ||
.size-75-25 { | ||
inline-size: 75px; | ||
block-size: 25px; | ||
} | ||
.vertical { | ||
writing-mode: vertical-lr; | ||
} | ||
</style> | ||
|
||
<div id="log"></div> | ||
|
||
<div id="parent"> | ||
<div id="target"> | ||
<div id="contents"></div> | ||
</div> | ||
</div> | ||
|
||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script> | ||
const parent = document.getElementById("parent"); | ||
const target = document.getElementById("target"); | ||
const contents = document.getElementById("contents"); | ||
|
||
function checkSize(expectedWidth, expectedHeight, msg) { | ||
assert_equals(target.clientWidth, expectedWidth, msg + " - clientWidth"); | ||
assert_equals(target.clientHeight, expectedHeight, msg + " - clientHeight"); | ||
} | ||
|
||
function nextRendering() { | ||
return new Promise(resolve => { | ||
requestAnimationFrame(() => requestAnimationFrame(() => resolve())); | ||
}); | ||
} | ||
|
||
function cleanup() { | ||
parent.className = ""; | ||
target.className = ""; | ||
contents.className = ""; | ||
checkSize(0, 0, "Sizing after cleanup"); | ||
} | ||
|
||
promise_test(async function() { | ||
this.add_cleanup(cleanup); | ||
parent.classList.add("vertical"); | ||
target.className = "cis-auto skip-contents"; | ||
contents.classList.add("size-100-50"); | ||
checkSize(0, 2, "Size containment with no last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(50, 100, "Sizing normally"); | ||
|
||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(0, 100, "Using last remembered heigth"); | ||
|
||
contents.classList.remove("size-100-50"); | ||
contents.classList.add("size-75-25"); | ||
checkSize(0, 100, "Still using last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
checkSize(25, 75, "Sizing normally with different size"); | ||
|
||
target.classList.add("skip-contents"); | ||
checkSize(0, 100, "Going back to last remembered heigth"); | ||
|
||
target.classList.remove("skip-contents"); | ||
await nextRendering(); | ||
target.classList.add("skip-contents"); | ||
checkSize(0, 75, "Using the new last remembered heigth"); | ||
}, "Basic usage"); | ||
</script> |
Oops, something went wrong.