blob: 65c94686a8cf8fdd3f092712c20979df3f74b2e0 [file] [log] [blame]
Xiaoming Shi73dfa202020-03-12 11:31:35 -07001<!DOCTYPE html>
2<meta name="viewport" content="width=device-width,initial-scale=1">
3<script src="/resources/testharness.js"></script>
4<script src="/resources/testharnessreport.js"></script>
5<script src="./resources/intersection-observer-test-utils.js"></script>
6
7<style>
8pre, #log {
9 position: absolute;
10 top: 0;
11 left: 200px;
12}
13.spacer {
Kaido Kert308ed6b2020-07-31 13:56:40 -070014 height: 100vh;
Xiaoming Shi73dfa202020-03-12 11:31:35 -070015}
16#target {
17 width: 100px;
18 height: 100px;
19 background-color: green;
20}
21</style>
22
23<div class="spacer"></div>
24<div id="target"></div>
25<div class="spacer"></div>
26
27<script>
28var entries = [];
29var observer;
30var target;
31
32runTestCycle(function() {
33 target = document.getElementById("target");
34 assert_true(!!target, "target exists");
35 observer = new IntersectionObserver(function(changes) {
Kaido Kert308ed6b2020-07-31 13:56:40 -070036 entries = entries.concat(changes);
37 window.testRunner.DoNonMeasuredLayout();
Xiaoming Shi73dfa202020-03-12 11:31:35 -070038 });
39 observer.observe(target);
40 entries = entries.concat(observer.takeRecords());
41 assert_equals(entries.length, 0, "No initial notifications.");
42 runTestCycle(step0, "First rAF.");
43}, "IntersectionObserver should not deliver pending notifications after disconnect().");
Kaido Kert308ed6b2020-07-31 13:56:40 -070044window.testRunner.DoNonMeasuredLayout();
45window.testRunner.DoNonMeasuredLayout();
Xiaoming Shi73dfa202020-03-12 11:31:35 -070046
47function step0() {
48 runTestCycle(step1, "observer.disconnect()");
Kaido Kert308ed6b2020-07-31 13:56:40 -070049 document.documentElement.scrollTop = 300;
Xiaoming Shi73dfa202020-03-12 11:31:35 -070050 observer.disconnect();
51 assert_equals(entries.length, 1, "Initial notification.");
Kaido Kert308ed6b2020-07-31 13:56:40 -070052 window.testRunner.DoNonMeasuredLayout();
Xiaoming Shi73dfa202020-03-12 11:31:35 -070053}
54
55function step1() {
56 assert_equals(entries.length, 1, "No new notifications.");
57}
58</script>