| <!DOCTYPE html> |
| <title>WebBundle subresource loading with script API and invalid JSON</title> |
| <link |
| rel="help" |
| href="https://github.com/WICG/webpackage/blob/main/explainers/subresource-loading.md" |
| /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <body> |
| <script> |
| setup( |
| () => { |
| assert_true(HTMLScriptElement.supports("webbundle")); |
| }, |
| { allow_uncaught_exception: true } |
| ); |
| promise_test((t) => { |
| const script = document.createElement("script"); |
| script.type = "webbundle"; |
| script.textContent = "invalid json"; |
| return new Promise((resolve, reject) => { |
| script.onload = () => reject(script); |
| script.onerror = () => reject(script); |
| window.onerror = function (message, url, line, col, error) { |
| assert_equals(error.name, "SyntaxError"); |
| resolve(script); |
| }; |
| document.body.appendChild(script); |
| }); |
| }, "Invalid JSON rule should throw a SyntaxError on the window."); |
| promise_test((t) => { |
| const script = document.createElement("script"); |
| script.type = "webbundle"; |
| const json_rule = { resources: [] }; |
| script.textContent = JSON.stringify(json_rule); |
| return new Promise((resolve, reject) => { |
| script.onload = () => reject(script); |
| script.onerror = () => reject(script); |
| window.onerror = function (message, url, line, col, error) { |
| assert_equals(error.name, "TypeError"); |
| resolve(script); |
| }; |
| document.body.appendChild(script); |
| }); |
| }, "JSON rule with a type error should throw a TypeError on the window."); |
| </script> |
| </body> |