| <!DOCTYPE html> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| setup({ allow_uncaught_exception: true }); | |
| promise_test(async t => { | |
| const script = document.createElement('script'); | |
| script.type = 'speculationrules'; | |
| script.textContent = 'invalid json'; | |
| const log = []; | |
| const elementError = new Promise(resolve => { | |
| script.addEventListener('error', e => { | |
| assert_equals(e.constructor, Event, 'event should be a simple Event'); | |
| log.push('element error'); | |
| resolve(); | |
| }, { once: true }); | |
| }); | |
| const globalError = new Promise(resolve => { | |
| window.addEventListener('error', e => { | |
| e.preventDefault(); | |
| assert_equals(e.constructor, ErrorEvent, 'global event should be an ErrorEvent'); | |
| assert_equals(e.error.constructor, TypeError, 'e.error should be a TypeError'); | |
| log.push('global error'); | |
| resolve(); | |
| }, { once: true }); | |
| }); | |
| document.head.appendChild(script); | |
| await Promise.all([elementError, globalError]); | |
| assert_array_equals(log, ['element error', 'global error']); | |
| }, 'A script with invalid JSON should fire error events on the element and window'); | |
| </script> |