Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions speculation-rules/external-speculation-rules-errors.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
window.markupErrored = false;
window.markupLoaded = false;
</script>
<script src="resources/empty.json" type="speculationrules" onload="window.markupLoaded = true;" onerror="window.markupErrored = true;"></script>
<script>
promise_test(async () => {
await new Promise((resolve, reject) => {
const element = document.createElement("script");
element.onload = () => { reject("Got an unexpected load event"); };
element.onerror = () => { resolve("Got an error event"); };
element.src = "resources/empty.json";
element.type = "speculationrules";
document.head.appendChild(element);
})
}, "Test that an external speculation rules script fires an error event");

promise_test(async () => {
await new Promise((resolve, reject) => {
const element = document.createElement("script");
element.type = "speculationrules";
element.onload = () => { reject("Got an unexpected load event"); };
element.onerror = () => { resolve("Got an error event"); };
element.src = "resources/empty.json";
document.head.appendChild(element);
})
}, "Test that an external speculation rules script fires an error event, regardless of attribute order");

promise_test(async () => {
assert_true(window.markupErrored, "error");
assert_false(window.markupLoaded, "load");
}, "Test that an external speculation rules script in markup fires an error event");
</script>
36 changes: 36 additions & 0 deletions speculation-rules/inline-speculation-rules-errors.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!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>
1 change: 1 addition & 0 deletions speculation-rules/resources/empty.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}