| Index: third_party/WebKit/LayoutTests/intersection-observer/timestamp.html
|
| diff --git a/third_party/WebKit/LayoutTests/intersection-observer/timestamp.html b/third_party/WebKit/LayoutTests/intersection-observer/timestamp.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..47f1dcc5cef50b539b05b8a32e2801154e17682c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/intersection-observer/timestamp.html
|
| @@ -0,0 +1,81 @@
|
| +<!DOCTYPE html>
|
| +<script src="../resources/js-test.js"></script>
|
| +<script src="helper-functions.js"></script>
|
| +<div id="beforeFrame" style="width:100%; height:700px;"></div>
|
| +<div id="afterFrame" style="width:100%; height:700px;"></div>
|
| +
|
| +<script>
|
| +description("Test that intersection observer time is relative to time in the callback context.");
|
| +var topWindowEntries = [];
|
| +var iframeWindowEntries = [];
|
| +var targetIframe;
|
| +var iframeScroller;
|
| +var topWindowTime;
|
| +var iframeWindowTime;
|
| +var timestampTolerance = 24; // 1.5 times frame duration.
|
| +
|
| +function step0() {
|
| + setTimeout(function() {
|
| + // Test results are only significant if there's a sufficient gap between
|
| + // top window time and iframe window time.
|
| + topWindowTime = performance.now();
|
| + iframeWindowTime = targetIframe.contentWindow.performance.now();
|
| + shouldBeGreaterThan("topWindowTime - iframeWindowTime", "2 * timestampTolerance");
|
| +
|
| + shouldBeEqualToNumber("topWindowEntries.length", 0);
|
| + shouldBeEqualToNumber("iframeWindowEntries.length", 0);
|
| + document.scrollingElement.scrollTop = 200;
|
| + iframeScroller.scrollTop = 250;
|
| + requestAnimationFrame(step1);
|
| + });
|
| +}
|
| +
|
| +function step1() {
|
| + setTimeout(function() {
|
| + topWindowTime = performance.now();
|
| + iframeWindowTime = targetIframe.contentWindow.performance.now();
|
| + shouldBeEqualToNumber("topWindowEntries.length", 1);
|
| + if (topWindowEntries.length) {
|
| + shouldBeCloseTo("topWindowEntries[0].time", "topWindowTime", timestampTolerance);
|
| + }
|
| + shouldBeEqualToNumber("iframeWindowEntries.length", 1);
|
| + if (iframeWindowEntries.length) {
|
| + shouldBeCloseTo("iframeWindowEntries[0].time", "iframeWindowTime", timestampTolerance);
|
| + }
|
| + finishJSTest();
|
| + document.scrollingElement.scrollTop = 0;
|
| + });
|
| +}
|
| +
|
| +function runTest() {
|
| + var target = targetIframe.contentDocument.getElementById("target");
|
| + iframeScroller = targetIframe.contentDocument.scrollingElement;
|
| +
|
| + // Observer created here, callback created in iframe context. Timestamps should be
|
| + // from this window.
|
| + var observer = new IntersectionObserver(targetIframe.contentDocument.createObserverCallback(topWindowEntries), {});
|
| + observer.observe(target);
|
| +
|
| + // Callback created here, observer created in iframe. Timestamps should be
|
| + // from iframe window.
|
| + observer = targetIframe.contentDocument.createObserver(function(newEntries) {
|
| + for (var i = 0; i < newEntries.length; i++)
|
| + iframeWindowEntries.push(newEntries[i]);
|
| + });
|
| + observer.observe(target);
|
| +
|
| + step0();
|
| +}
|
| +
|
| +window.onload = function() {
|
| + setTimeout(function() {
|
| + targetIframe = document.createElement("iframe");
|
| + targetIframe.src = "../resources/intersection-observer-timestamp-subframe.html";
|
| + targetIframe.style = "height: 100px; overflow-y: scroll";
|
| + var afterFrame = document.getElementById("afterFrame");
|
| + afterFrame.parentNode.insertBefore(targetIframe, afterFrame);
|
| + targetIframe.onload = runTest;
|
| + }, 100);
|
| +};
|
| +
|
| +</script>
|
|
|