| <!doctype html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| |
| <p>ResizeObserver garbage collection tests</p> |
| <div id="target1" style="width:100px;height:100px;">t1 |
| </div> |
| <script> |
| 'use strict'; |
| |
| let result; |
| let target = document.querySelector("#target1"); |
| let test = async_test("ResizeObserver garbage collection"); |
| |
| function initResizeObserver() { |
| // The callback routine will be garbage collected unless it is kept alive |
| // in C++ code. |
| let ro = new ResizeObserver( entries => result = entries ); |
| ro.observe(target); |
| } |
| |
| function test1() { |
| initResizeObserver(); |
| window.requestAnimationFrame( _ => { |
| test.step( _ => { |
| assert_not_equals(result, null, "initial notification"); |
| assert_not_equals(window.gc, null, "window.gc required to run this test"); |
| if (window.gc) |
| window.gc(); |
| test1part2(); |
| }); |
| }); |
| } |
| |
| function test1part2() { |
| target.style.width = "200px"; |
| result = null; |
| window.requestAnimationFrame( _ => { |
| test.step( _ => { |
| assert_not_equals(result, null, "resize notification did not happen because callback was garbage collected"); |
| test.done(); |
| }); |
| }); |
| } |
| |
| test1(); |
| </script> |