content-visibility-vs-scrollIntoView-003.html (2550B)
1 <!doctype HTML> 2 <html> 3 <meta charset="utf8"> 4 <title>CSS Content Visibility: auto + overflow clip + scrollIntoView, ContentVisibilityAutoStateChange fires trece</title> 5 <link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com"> 6 <link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility"> 7 <meta name="assert" 8 content="If content-visibility: auto element is not relevent to user after calling scrollIntoView of its descendant, contentvisibilityautostatechange trece"> 9 10 <script src="/resources/testharness.js"></script> 11 <script src="/resources/testharnessreport.js"></script> 12 <script src="/common/rendering-utils.js"></script> 13 14 <style> 15 .auto { 16 content-visibility: auto; 17 contain-intrinsic-size: auto 1px auto 10000px; 18 } 19 20 .child { 21 height: 40000px; 22 position: relative; 23 } 24 25 #target { 26 position: absolute; 27 bottom: 0; 28 } 29 30 .before_target { 31 height: 40000px; 32 } 33 34 #overflow_clip { 35 overflow: clip; 36 height: 20000px; 37 } 38 </style> 39 40 <div id=e1 class="auto before_target"></div> 41 <div id=e2 class="auto before_target"></div> 42 <div id=e3 class="auto"> 43 <div id="overflow_clip"> 44 <div class=child> 45 <div id=target>PASS</div> 46 </div> 47 </div> 48 </div> 49 <div id=e4 class=auto> 50 <div class=child></div> 51 </div> 52 53 <script> 54 function waitForEvent() { 55 return new Promise(resolve => e3.addEventListener('contentvisibilityautostatechange', resolve, { once: true })); 56 } 57 58 promise_test(async (t) => { 59 var eventCounter = 0; 60 function eventHandler(e) { 61 eventCounter++; 62 if (eventCounter == 1) { 63 assert_equals(e.skipped, true, "the first event is the initial one"); 64 } else if (eventCounter == 2) { 65 assert_equals(e.skipped, false, "the second event should be generated by visible"); 66 } else if (eventCounter == 3) { 67 assert_equals(e.skipped, true, "the third event should be generated by hidden"); 68 } 69 } 70 71 e3.addEventListener("contentvisibilityautostatechange", eventHandler); 72 // Make sure the first event has fired. 73 await waitForEvent(); 74 target.scrollIntoView(); 75 await waitForEvent(); 76 await waitForEvent(); 77 await waitForAtLeastOneFrame(); 78 assert_equals(eventCounter, 3, "There should be three contentvisibilityautostatechange events."); 79 }, "ContentVisibilityAutoStateChange fires trece when `scrollIntoView` a descendant of `content-visibility:auto` which is hidden after scrolling"); 80 </script>