LibWeb/HTML: Default ErrorEvent error to undefined

This was a change in the HTML spec, see:

https://github.com/whatwg/html/commit/032523196
This commit is contained in:
Shannon Booth 2025-01-05 20:21:22 +13:00 committed by Andreas Kling
parent cb9e3d5c9b
commit 8214371ad5
Notes: github-actions[bot] 2025-01-05 12:37:18 +00:00
4 changed files with 73 additions and 2 deletions

View file

@ -17,7 +17,7 @@ struct ErrorEventInit : public DOM::EventInit {
String filename;
u32 lineno { 0 };
u32 colno { 0 };
JS::Value error { JS::js_null() };
JS::Value error { JS::js_undefined() };
};
// https://html.spec.whatwg.org/multipage/webappapis.html#errorevent

View file

@ -12,10 +12,11 @@ interface ErrorEvent : Event {
readonly attribute any error;
};
// https://html.spec.whatwg.org/#erroreventinit
dictionary ErrorEventInit : EventInit {
DOMString message = "";
USVString filename = "";
unsigned long lineno = 0;
unsigned long colno = 0;
any error = null;
any error;
};

View file

@ -0,0 +1,10 @@
Harness status: OK
Found 5 tests
5 Pass
Pass error event is normal (return true does not cancel; one arg) on Document, with a synthetic ErrorEvent
Pass Initial values of ErrorEvent members
Pass error member can be set to null
Pass error member can be set to undefined
Pass error member can be set to arbitrary

View file

@ -0,0 +1,60 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Event handlers processing algorithm: error events</title>
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm">
<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
<div id="log"></div>
<script>
"use strict";
setup({ allow_uncaught_exception: true });
promise_test(t => {
document.onerror = t.step_func((...args) => {
assert_equals(args.length, 1);
return true;
});
const eventWatcher = new EventWatcher(t, document, "error");
const promise = eventWatcher.wait_for("error").then(e => {
assert_equals(e.defaultPrevented, false);
assert_equals(e.message, "");
assert_equals(e.filename, "");
assert_equals(e.lineno, 0);
assert_equals(e.colno, 0);
assert_equals(e.error, undefined);
});
document.dispatchEvent(new ErrorEvent("error", { cancelable: true }));
return promise;
}, "error event is normal (return true does not cancel; one arg) on Document, with a synthetic ErrorEvent");
test(() => {
const e = new ErrorEvent("error");
assert_equals(e.message, "");
assert_equals(e.filename, "");
assert_equals(e.lineno, 0);
assert_equals(e.colno, 0);
assert_equals(e.error, undefined);
}, "Initial values of ErrorEvent members")
test(() => {
const e = new ErrorEvent("error", {error : null});
assert_equals(e.error, null);
}, "error member can be set to null")
test(() => {
const e = new ErrorEvent("error", {error : undefined});
assert_equals(e.error, undefined);
}, "error member can be set to undefined")
test(() => {
const e = new ErrorEvent("error", {error : "foo"});
assert_equals(e.error, "foo");
}, "error member can be set to arbitrary")
</script>