late-url-change.html (2148B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/resources/testdriver.js"></script> 6 <script src="/resources/testdriver-vendor.js"></script> 7 <script src="/soft-navigation-heuristics/resources/soft-navigation-test-helper.js"></script> 8 9 <button id="navigateButton">Click here!</button> 10 <div id="content"></div> 11 12 <script> 13 promise_test(async t => { 14 const URL = '/late-url-change'; 15 16 navigateButton.addEventListener("click", async () => { 17 content.innerHTML = '<img id="target" src="/images/lcp-256x256.png" elementtiming="test-image"></img>'; 18 19 const entries = await new Promise(resolve => { 20 new PerformanceObserver((list, observer) => { 21 resolve(list.getEntries()); 22 observer.disconnect(); 23 }).observe({type: 'element', buffered: true}); 24 }); 25 assert_equals( 26 entries.length, 1, 'Expected exactly one ElementTiming entry'); 27 assert_equals( 28 entries[0].identifier, 'test-image', 'Unexpected ElementTiming entry.'); 29 history.pushState({}, '', URL); 30 }, {once: true}); 31 32 const softNavPromise = 33 SoftNavigationTestHelper.getPerformanceEntries("soft-navigation"); 34 const icpPromise = 35 SoftNavigationTestHelper.getPerformanceEntries("interaction-contentful-paint"); 36 37 if (test_driver) { 38 test_driver.click(navigateButton); 39 } 40 41 const helper = new SoftNavigationTestHelper(t); 42 const entries = await helper.withTimeoutMessage( 43 softNavPromise, "Soft navigation entry never arrived.", 3000); 44 assert_equals(entries.length, 1, 'Expected exactly one soft navigation.'); 45 assert_true( 46 entries[0].name.endsWith(URL), 47 'Unexpected Soft Navigation URL.'); 48 49 const icps = await helper.withTimeoutMessage( 50 icpPromise, 'ICP not detected.', /*timeout=*/ 3000); 51 assert_equals(icps.length, 1, 'Expected exactly one ICP entry.'); 52 assert_equals(icps[0].id, 'target', 'Expected ICP candidate to be "target"'); 53 }, 'Soft Navigation Detection supports setting URL after paint'); 54 </script>