haikuwebkit/LayoutTests/fast/multicol/spanner-inserted-to-multipl...

28 lines
782 B
HTML
Raw Permalink Normal View History

[RenderTreeBuilder] Multi-column spanners are not part of the enclosing multi-column renderer's subtree https://bugs.webkit.org/show_bug.cgi?id=224914 <rdar://76846946> Reviewed by Simon Fraser. Source/WebCore: This patch handles the case when the newly inserted renderer is a column spanner and checking enclosingFragmentedFlow() on the spanner's new parent returns the incorrect enclosing multi-column renderer. This can result in having the spanner in multiple multi-column flows. (Note that the spanners are directly attached to the RenderBlockFlow that establishes the multi-column context, while non-spanner renderers are part of the RenderMultiColumnFlow subtree. e.g RenderBlockFlow <- spanner's parent. RenderMultiColumnFlow Non-spanner renderer spanner renderer calling enclosingFragmentedFlow() on a spanner's parent (RenderBlockFlow) returns the parent multi-column flow -and not the one it establishes. e.g. RenderMultiColumnFlow <- parent multi-column flow -in case of nested columns. RenderBlockFlow <- spanner's parent. RenderMultiColumnFlow Non-spanner renderer spanner renderer ) Test: fast/multicol/spanner-inserted-to-multiple-multicolumns.html * rendering/updating/RenderTreeBuilder.cpp: (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock): LayoutTests: * fast/multicol/spanner-inserted-to-multiple-multicolumns-expected.txt: Added. * fast/multicol/spanner-inserted-to-multiple-multicolumns.html: Added. Canonical link: https://commits.webkit.org/236924@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@276464 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-04-22 22:02:14 +00:00
<style>
div {
column-span: all;
}
:nth-last-child(2) {
float: left;
}
</style>
<script>
if (window.testRunner)
testRunner.dumpAsText();
onload = () => {
document.styleSheets[0]?.insertRule(`html { column-width: 1px; }`);
document.styleSheets[0]?.insertRule(`body { column-width: 1px; }`);
let n0 = document.createElement('span');
document.body.appendChild(n0);
let n1 = document.createElement('div');
n1.appendChild(document.createElement('div'));
n0.appendChild(n1);
n0.appendChild(document.createElement('div'));
document.body.offsetTop;
n0.appendChild(document.createElement('div'));
document.querySelector('style').appendChild(document.createTextNode(''));
};
</script>
<!-- PASS if no crash or assert -->