Automatic update from web-platform-tests Fix scrollParent for body when body is not the scrolling element CSSWG resolved that scrollParent of root should be null, and scrollParent of body should be null iff body is the scrollingElement. See: https://github.com/w3c/csswg-drafts/issues/12723#issuecomment-3998966905 Previously Blink returned null for body unconditionally. This CL updates the logic so that body returns null only when it is the document's scrolling element, and returns the scrolling element otherwise. The WPT expectation is updated accordingly. Bug: 489746731 Change-Id: I59c3d2e27defffa80d6e5c7335d208b161d8f904 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7637954 Reviewed-by: Fredrik Söderquist <fs@opera.com> Commit-Queue: Fredrik Söderquist <fs@opera.com> Reviewed-by: Robert Flack <flackr@chromium.org> Cr-Commit-Position: refs/heads/main@{#1600518} -- wpt-commits: c2cc9b77b02a270882baca3d4b7857fad9a82242 wpt-pr: 58421
99 lines
3.4 KiB
HTML
99 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>CSSOM View —— scrollParent test</title>
|
|
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-htmlelement-scrollparent">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<style>
|
|
.scroller {
|
|
overflow: scroll;
|
|
height: 100px;
|
|
}
|
|
.hidden {
|
|
overflow: hidden;
|
|
}
|
|
.clip {
|
|
overflow: clip;
|
|
}
|
|
.relpos {
|
|
position: relative;
|
|
}
|
|
.abspos {
|
|
position: absolute;
|
|
}
|
|
.fixedpos {
|
|
position: fixed;
|
|
}
|
|
#noBox {
|
|
display: none;
|
|
}
|
|
.contains-fixed {
|
|
transform: scale(1);
|
|
contain: paint;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="childOfRoot"></div>
|
|
<div class="contains-fixed">
|
|
<div id="fixedContainedByRoot" class="fixedpos"></div>
|
|
</div>
|
|
<div id="scroller3" class="scroller">
|
|
<div id="fixedToRoot" class="fixedpos"></div>
|
|
<!-- Contains the fixed positioned descendant. -->
|
|
<div class="contains-fixed">
|
|
<div id="scroller2" class="scroller">
|
|
<!-- Contains the absolute positioned descendant. -->
|
|
<div class="relpos">
|
|
<div id="scroller1" class="scroller">
|
|
<div>
|
|
<div id="normalChild"></div>
|
|
<div id="noBox"></div>
|
|
<div id="absPosChild" class="abspos"></div>
|
|
<div id="fixedPosChild" class="fixedpos"></div>
|
|
</div>
|
|
<!-- Overflow: hidden is also a scroll container. -->
|
|
<div id="hidden" class="hidden">
|
|
<div id="childOfHidden"></div>
|
|
</div>
|
|
<!-- No box with `display: contents` -->
|
|
<div style="display: contents">
|
|
<div id="childOfDisplayContents"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
<script>
|
|
test(() => { assert_equals(normalChild.scrollParent(), scroller1); },
|
|
"scrollParent returns the nearest scroll container.");
|
|
test(() => { assert_equals(childOfHidden.scrollParent(), hidden); },
|
|
"hidden element is a scroll container.");
|
|
test(() => { assert_equals(noBox.scrollParent(), null); },
|
|
"Element with no box has null scrollParent.");
|
|
test(() => { assert_equals(absPosChild.scrollParent(), scroller2); },
|
|
"scrollParent follows absolute positioned containing block chain.");
|
|
test(() => { assert_equals(fixedPosChild.scrollParent(), scroller3); },
|
|
"scrollParent follows fixed positioned containing block chain.");
|
|
test(() => { assert_equals(fixedToRoot.scrollParent(), null); },
|
|
"scrollParent of element fixed to root is null.");
|
|
test(() => { assert_equals(childOfRoot.scrollParent(), document.scrollingElement); },
|
|
"scrollParent of child in root viewport returns document scrolling element.");
|
|
test(() => { assert_equals(fixedContainedByRoot.scrollParent(), document.scrollingElement); },
|
|
"scrollParent of fixed element contained within root is document scrolling element.");
|
|
test(() => {
|
|
assert_not_equals(document.body, document.scrollingElement);
|
|
assert_equals(document.body.scrollParent(), document.scrollingElement);
|
|
}, "scrollParent of body is document scrolling element when body is not document scrolling element.");
|
|
test(() => { assert_equals(document.documentElement.scrollParent(), null); },
|
|
"scrollParent of root is null.");
|
|
test(() => { assert_equals(childOfDisplayContents.scrollParent(), scroller1); },
|
|
"scrollParent skips ancestors with `display: contents`.");
|
|
test(() => { assert_equals(document.scrollingElement.scrollParent(), null); },
|
|
"scrollParent of scrolling element is null.");
|
|
</script>
|
|
</html>
|