| <!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="../resources/test-helpers.js"></script> | |
| <body> | |
| <script> | |
| setup(() => { | |
| assert_true(HTMLScriptElement.supports("webbundle")); | |
| }); | |
| promise_test(async (t) => { | |
| const bundle_url = | |
| "https://{{domains[]}}:{{ports[https][0]}}/web-bundle/resources/wbn/dynamic1.wbn?pipe=trickle(d0.5)"; | |
| const script_url = | |
| "https://{{domains[]}}:{{ports[https][0]}}/web-bundle/resources/wbn/dynamic/resource1.js"; | |
| const element = createWebBundleElement( | |
| "../resources/wbn/dynamic1.wbn?pipe=trickle(d0.5)", | |
| /*resources=*/ [script_url] | |
| ); | |
| document.body.appendChild(element); | |
| var script_entries = 0; | |
| var web_bundle_entries = 0; | |
| var web_bundle_entry, script_entry; | |
| const promise = new Promise((resolve) => { | |
| new PerformanceObserver( | |
| t.step_func((entryList) => { | |
| var entries = entryList.getEntriesByType("resource"); | |
| for (var i = 0; i < entries.length; ++i) { | |
| if (entries[i].name === script_url) { | |
| script_entry = entries[i]; | |
| script_entries++; | |
| } | |
| if (entries[i].name === bundle_url) { | |
| web_bundle_entry = entries[i]; | |
| web_bundle_entries++; | |
| } | |
| } | |
| if (web_bundle_entries > 0 && script_entries > 0) { | |
| // Check timestamps. | |
| assert_greater_than_equal( | |
| script_entry.responseStart, | |
| script_entry.requestStart + 500 | |
| ); | |
| assert_greater_than_equal( | |
| script_entry.responseStart, | |
| web_bundle_entry.responseStart | |
| ); | |
| assert_greater_than_equal( | |
| script_entry.responseEnd, | |
| script_entry.responseStart | |
| ); | |
| assert_greater_than_equal( | |
| script_entry.requestStart, | |
| script_entry.connectEnd | |
| ); | |
| assert_greater_than_equal( | |
| script_entry.responseEnd, | |
| script_entry.responseStart | |
| ); | |
| // Check sizes. | |
| assert_greater_than(script_entry.encodedBodySize, 0); | |
| assert_equals( | |
| script_entry.transferSize, | |
| script_entry.encodedBodySize + 300 | |
| ); | |
| assert_equals( | |
| script_entry.encodedBodySize, | |
| script_entry.decodedBodySize | |
| ); | |
| resolve(); | |
| } | |
| }) | |
| ).observe({ entryTypes: ["resource"] }); | |
| }); | |
| const script = document.createElement("script"); | |
| script.type = "module"; | |
| script.src = script_url; | |
| document.body.appendChild(script); | |
| return promise; | |
| }, "Timestamp attributes filled in resource timing entries should be consistent."); | |
| </script> | |
| </body> |