| <!doctype html> |
| <meta charset="utf8"> |
| <title>CSS Content Visibility: Contentvisibilityautostatechange fires once when c-v auto's dialog ancestor show</title> |
| <link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com"> |
| <link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> |
| <meta name="assert" content="Contentvisibilityautostatechange fires once when c-v auto's dialog ancestor show"> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/rendering-utils.js"></script> |
| |
| <style> |
| #inner { |
| content-visibility: auto; |
| contain-intrinsic-size: 100px 100px; |
| } |
| </style> |
| |
| <dialog id="dialog"> |
| <div id="inner"> |
| <div style="height: 200px; width: 200px;">content</div> |
| </div> |
| <div id="spacer" style="height: 100000px;"></div> |
| </dialog> |
| |
| <script> |
| promise_test(async () => { |
| let count = 0; |
| inner.addEventListener("contentvisibilityautostatechange", (e) => { |
| count++; |
| }); |
| |
| dialog.show(); |
| // getBoundingClientRect shouldn't trigger "contentvisibilityautostatechange", because the proximity to the viewport is not determined now. |
| inner.getBoundingClientRect().height; |
| |
| // It takes at least one frame to determine the proximity to the viewport. |
| await waitForAtLeastOneFrame(); |
| // getBoundingClientRect should trigger "contentvisibilityautostatechange" now. |
| inner.getBoundingClientRect().height; |
| |
| await waitForAtLeastOneFrame(); |
| assert_equals(count, 1); |
| dialog.close(); |
| }, "Contentvisibilityautostatechange fires once when c-v auto's dialog ancestor show()"); |
| </script> |