blob: ca5665317c0e150c7831b7047a8b9b884e801d6e [file] [log] [blame]
<!DOCTYPE html>
<!--
Scrollbar layer geometry stress test.
A is a stacking context; its scrollbars are not re-parented.
B gets re-parented, but isn't clipped by any ancestor.
C and D are re-parented, and clipped by two non-stacking ancestors.
One of D's clipping ancestors is positioned, triggering the
"compositingStackingContext != compositingContainer" path
in CLM::updateOverflowControlsHostLayerGeometry.
The scrollers, stacking contexts, and outer clipping ancestors
all have borders (creating non-zero clip offsets) and box shadows
(causing main GraphicsLayer to be offset from its LayoutObject),
with varying thicknesses.
-->
<script>
if (window.internals) {
internals.useMockOverlayScrollbars();
internals.settings.setPreferCompositingToLCDTextEnabled(true);
}
</script>
<style>
.outer {
position: absolute;
z-index: 0;
will-change: transform;
left: 21px;
top: 21px;
width: 300px;
height: 242px;
box-shadow: 0 0 12px 3px #feb;
border: 5px solid #eda;
}
.C, .D { top: 312px; }
.B, .D { left: 370px; }
.clipper {
overflow: hidden;
margin-left: 11px;
margin-top: 11px;
width: 272px;
height: 180px;
border: 3px solid #aaa;
box-shadow: 0 0 0 7px #afa;
}
.D .clipper {
position: relative;
}
.clipper2 {
overflow: hidden;
margin-left: 3px;
margin-top: 3px;
width: 260px;
height: 100px;
border: 3px solid #fac;
}
.scroller {
overflow: auto;
margin-left: 36px;
margin-top: 36px;
width: 220px;
height: 160px;
box-shadow: 0 0 12px 12px #aaf;
border: 5px solid blue;
background-color: white;
}
.clipper .scroller {
margin-left: 15px;
margin-top: 15px;
}
.A .scroller {
position: relative;
z-index: 0;
}
.content {
position: relative;
height: 200px;
margin: 12px;
padding: 6px;
background-color: #ddd;
}
</style>
<div class="outer A">
<div class="scroller">
<div class="content"></div>
</div>
</div>
<div class="outer B">
<div class="scroller">
<div class="content"></div>
</div>
</div>
<div class="outer C">
<div class="clipper">
<div class="clipper2">
<div class="scroller">
<div class="content"></div>
</div>
</div>
</div>
</div>
<div class="outer D">
<div class="clipper">
<div class="clipper2">
<div class="scroller">
<div class="content"></div>
</div>
</div>
</div>
</div>
<script>
if (window.testRunner) {
testRunner.dumpAsTextWithPixelResults();
testRunner.setCustomTextOutput(internals.layerTreeAsText(document));
}
</script>