| <!DOCTYPE html> |
| <meta charset="utf-8" /> |
| <title> |
| Resource timing attributes are consistent for the same-origin subresources. |
| </title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/web-bundle/resources/test-helpers.js"></script> |
| |
| <body> |
| <script> |
| setup(() => { |
| assert_true(HTMLScriptElement.supports("webbundle")); |
| }); |
| |
| promise_test(async (t) => { |
| const script_url = 'dynamic1:resource1.js'; |
| const non_exist_script_url = 'dynamic1:non_exist_resource.js'; |
| // Using functions from /web-bundle/resources/test-helpers.js. |
| const element = createWebBundleElement( |
| "../web-bundle/resources/wbn/dynamic1.wbn", |
| /*resources=*/[script_url] |
| ); |
| |
| document.body.appendChild(element); |
| |
| // Fetch the script that is in the web bundle. |
| const script = document.createElement("script"); |
| script.type = "module"; |
| script.src = script_url; |
| document.body.appendChild(script); |
| |
| // Fetch the script that is not in the web bundle. |
| // Using functions from /web-bundle/resources/test-helpers.js. |
| await fetchAndWaitForReject(non_exist_script_url); |
| |
| let resource1_entries = []; |
| let non_exist_resource_entries = []; |
| |
| await new Promise((resolve) => { |
| new PerformanceObserver(list => { |
| resource1_entries.push(list.getEntries().filter(e => e.name.includes('resource1.js'))); |
| non_exist_resource_entries.push( |
| list.getEntries().filter(e => e.name.includes('non_exist_resource.js'))); |
| if (resource1_entries.length == 1 && non_exist_resource_entries.length == 1) { |
| resolve(); |
| } |
| } |
| ).observe({ type: 'resource', buffered: true }); |
| }); |
| }, "Web bundle resources should have resource timing entries, even when the fetch failed."); |
| </script> |
| </body> |