Skip to content

Commit

Permalink
[IntersectionObserver] Apply overflow clip to document.scrollingElement
Browse files Browse the repository at this point in the history
If the explicit root element is the document's scrollingElement, we interpret
that to mean we should apply the root scroller's overflow clip (just as we
already do with the implicit root).

Hidden behind a flag for testing, and pending resolution of spec issues and
sending intent's.

BUG=1015183
R=chrishtr@chromium.org

Change-Id: I6b2542dd353ea0be6b67b5922eee75445070f10a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865257
Commit-Queue: Stefan Zager <szager@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706742}
  • Loading branch information
szager-chromium authored and chromium-wpt-export-bot committed Oct 17, 2019
1 parent bfd3e2a commit 796ebc4
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions intersection-observer/document-scrolling-element-root.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/intersection-observer-test-utils.js"></script>

<style>
pre, #log {
position: absolute;
top: 0;
left: 200px;
}
iframe {
height: 250px;
width: 150px;
border: 0;
}
</style>
<iframe id="target-iframe" src="resources/iframe-no-root-subframe.html"></iframe>

<script>
var iframe = document.getElementById("target-iframe");
var target;
var root;
var entries = [];

iframe.onload = function() {
runTestCycle(function() {
assert_true(!!iframe, "iframe exists");

root = iframe.contentDocument.scrollingElement;
assert_true(!!root, "Root element exists.");
target = iframe.contentDocument.getElementById("target");
assert_true(!!target, "Target element exists.");
var observer = new IntersectionObserver(function(changes) {
entries = entries.concat(changes)
}, { root: root });
observer.observe(target);
entries = entries.concat(observer.takeRecords());
assert_equals(entries.length, 0, "No initial notifications.");
runTestCycle(step0, "First rAF.");
}, "Observer with explicit root which is the document's scrolling element.");
};

function step0() {
let vw = iframe.contentDocument.documentElement.clientWidth;
let vh = iframe.contentDocument.documentElement.clientHeight;
// The target element is partially clipped by the iframe's root scroller, so
// height of the intersection rect is (250 - 208) == 42.
checkLastEntry(entries, 0, [8, 108, 208, 308, 8, 108, 208, 250, 0, vw, 0, vh, true]);
}
</script>

0 comments on commit 796ebc4

Please sign in to comment.