Index: third_party/WebKit/LayoutTests/intersection-observer/deleted-root.html |
diff --git a/third_party/WebKit/LayoutTests/intersection-observer/deleted-root.html b/third_party/WebKit/LayoutTests/intersection-observer/deleted-root.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ec3844a51ce758d550060662f5c26702b4a6b8c0 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/intersection-observer/deleted-root.html |
@@ -0,0 +1,49 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="./resources/intersection-observer-test-utils.js"></script> |
+<script src="../resources/gc.js"></script> |
+ |
+<div id="root"> |
+ <div id="target"></div> |
+</div> |
+ |
+<script> |
+async_test(function(t) { |
+ // Initialize observer and remove root in an inner function to avoid |
+ // references to rootDiv remaining live on this function's stack frame |
+ // (http://crbug.com/595672/). |
+ function initializeObserverThenRemoveRootDiv() { |
+ let rootDiv = document.getElementById("root"); |
+ let observer = new IntersectionObserver(c => {}, {root: rootDiv}); |
+ rootDiv.parentNode.removeChild(rootDiv); |
+ return observer; |
+ } |
+ |
+ var target = document.getElementById("target"); |
+ var observer = initializeObserverThenRemoveRootDiv(); |
+ gc(); |
+ |
+ runTestCycle(step0, "IntersectionObserver.observe with deleted root."); |
+ |
+ function step0() { |
+ runTestCycle(step1, "IntersectionObserver.unobserve with deleted root."); |
+ observer.observe(target); |
+ } |
+ |
+ function step1() { |
+ runTestCycle(step2, "IntersectionObserver.disconnect with deleted root."); |
+ observer.unobserve(target); |
+ } |
+ |
+ function step2() { |
+ runTestCycle(step3, "IntersectionObserver.takeRecords with deleted root."); |
+ observer.disconnect(); |
+ } |
+ |
+ function step3() { |
+ observer.takeRecords(); |
+ t.done(); |
+ } |
+}); |
+</script> |