longtask-in-childiframe-crossorigin.html (2526B)
1 <!DOCTYPE HTML> 2 <meta charset=utf-8> 3 <title>LongTask Timing: long task in nested child iframe</title> 4 <body> 5 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/common/get-host-info.sub.js"></script> 9 <script src='resources/utils.js'></script> 10 11 <h1>Long Task in Nested Cross-Origin Child Iframe</h1> 12 <div id="log"></div> 13 <script> 14 const child_url = new URL("resources/subframe-with-longtask.html", 15 new URL(location.pathname, 16 get_host_info().HTTPS_REMOTE_ORIGIN)).href; 17 18 async_test(function (t) { 19 assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.'); 20 const observer = new PerformanceObserver( 21 t.step_func(function (entryList) { 22 const entries = entryList.getEntries(); 23 assert_equals(entries.length, 1, 24 'Exactly one entry is expected.'); 25 const longtask = entries[0]; 26 assert_equals(longtask.entryType, 'longtask'); 27 if (longtask.name == 'self' || 28 longtask.name == 'multiple-contexts' || 29 longtask.name == 'unknown') 30 return; 31 checkLongTaskEntry(longtask, 'cross-origin-descendant'); 32 // Assert the TaskAttributionTiming entry in attribution. 33 assert_equals(longtask.attribution.length, 1, 34 'Exactly one attribution entry is expected'); 35 const attribution = longtask.attribution[0]; 36 assert_equals(attribution.entryType, 'taskattribution'); 37 assert_equals(attribution.name, 'unknown'); 38 assert_equals(attribution.duration, 0); 39 assert_equals(attribution.startTime, 0); 40 assert_equals(attribution.containerType, 'iframe'); 41 assert_equals(attribution.containerId, 'child-iframe-id'); 42 assert_equals(attribution.containerName, 'child-iframe-name'); 43 assert_equals(attribution.containerSrc, child_url); 44 observer.disconnect(); 45 t.done(); 46 }) 47 ); 48 observer.observe({entryTypes: ['longtask']}); 49 window.onload = () => { 50 const iframe = document.createElement('iframe'); 51 iframe.id = 'child-iframe-id'; 52 iframe.name = 'child-iframe-name'; 53 document.body.appendChild(iframe); 54 iframe.src = child_url; 55 }; 56 }, 'Performance longtask entries in cross-origin child iframe are observable in parent.'); 57 </script> 58 59 </body>