haikuwebkit/LayoutTests/fast/multicol/state-propagation-over-out-...

36 lines
636 B
HTML
Raw Permalink Normal View History

Multi-column state propagation should follow containing block rules https://bugs.webkit.org/show_bug.cgi?id=222932 <rdar://problem/74459411> Reviewed by Antti Koivisto. Source/WebCore: When a renderer(A) gains multi-column context 1. a special RenderMultiColumnFlow renderer is constructed 2. it is then inserted under the original renderer(A) and 3. all (A)'s descendants get moved under this newly constructed RenderMultiColumnFlow renderer. At step #3 we update each descendants flow state by calling initializeFragmentedFlowStateOnInsertion(). This patch check if the out-of-flow descendant is really part of the multi-column flow and updates the state accordingly. e.g <div style="column-count: 2"><div><div id=child style="position: absolute"></div></div></div> "child" is _not_ part of the multi-column subtree. child's containing block is an ancestor of the multi-column renderer. <div style="column-count: 2"><div style="position: relative"><div id=child style="position: absolute"></div></div></div> "child" _is_ part of the multi-column subtree. child's containing block is the relatively positioned renderer which is part of the multi-column flow. Test: fast/multicol/state-propagation-over-out-of-flow-boundary.html * rendering/RenderObject.cpp: (WebCore::RenderObject::setFragmentedFlowStateIncludingDescendants): (WebCore::RenderObject::initializeFragmentedFlowStateOnInsertion): (WebCore::RenderObject::resetFragmentedFlowStateOnRemoval): * rendering/RenderObject.h: LayoutTests: * fast/multicol/state-propagation-over-out-of-flow-boundary-expected.txt: Added. * fast/multicol/state-propagation-over-out-of-flow-boundary.html: Added. Canonical link: https://commits.webkit.org/235133@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@274217 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-03-10 17:31:46 +00:00
<style>
svg {
position: absolute;
white-space: pre;
}
span {
display: contents;
letter-spacing: 1em;
}
#second {
-webkit-column-span: all;
}
#container {
-webkit-animation-name: keyframes4;
-webkit-animation-fill-mode: backwards;
animation-delay: 1s;
}
@keyframes keyframes4 {
100% { column-width: 10px; }
}
</style>
<script>
if (window.testRunner)
testRunner.dumpAsText();
onload = () => {
second.style.columnWidth = "10px";
first.remove();
}
</script>
PASS if no crash or assert.
<div id=container><div id=first></div>text<svg><foreignObject><span>
<div id=second></div></span></foreignObject></svg></div>