| <!DOCTYPE HTML> |
| <meta charset=utf-8> |
| <title>LongTask Timing: long task in another window</title> |
| <body> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| |
| <script> |
| /* This test should pass even when windows share a single renderer process. |
| This window opens a new window which contains a longtask. We test that the |
| longtask from the new window is not observed by the observer of this window. */ |
| async_test(t => { |
| assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.'); |
| const observer = new PerformanceObserver( |
| t.step_func(function (entryList) { |
| const entries = entryList.getEntries(); |
| let markFound = false; |
| for (let i = 0; i < entries.length; ++i) { |
| const entry = entries[i]; |
| // We do not expect to observe longtasks but the work being made in this window may produce a longtask. |
| assert_true(entry.entryType === 'longtask' || |
| entry.entryType === 'mark'); |
| if (entry.entryType === 'mark') { |
| markFound = true; |
| continue; |
| } |
| // If a longtask is observed, it must come from this window. |
| assert_equals(entry.name, 'self'); |
| } |
| // If we found the mark, then the other window longtask is done. |
| if (markFound) |
| t.done(); |
| }) |
| ); |
| observer.observe({entryTypes: ['mark', 'longtask']}); |
| |
| window.onload = () => { |
| // Open a window with a longtask. |
| const other_window = window.open('resources/frame-with-longtask.html'); |
| window.addEventListener('message', t.step_func(e => { |
| // Do a mark (after the other window's longtask) to fire the callback. |
| self.performance.mark('mark1'); |
| })); |
| }; |
| }, 'A longtask in a frame from window.open is not reported in original frame'); |
| </script> |
| </body> |