Skip to content

Commit

Permalink
feat(ext/web): add [[ErrorData]] slot to DOMException (#27342)
Browse files Browse the repository at this point in the history
  • Loading branch information
petamoriken authored Dec 13, 2024
1 parent 3ddbea6 commit bf888d9
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 17 deletions.
15 changes: 9 additions & 6 deletions ext/web/01_dom_exception.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@

import { primordials } from "ext:core/mod.js";
const {
Error,
ErrorPrototype,
ErrorCaptureStackTrace,
ObjectDefineProperty,
ObjectCreate,
ObjectEntries,
ObjectHasOwn,
ObjectPrototypeIsPrototypeOf,
ObjectSetPrototypeOf,
ReflectConstruct,
Symbol,
SymbolFor,
} = primordials;
Expand Down Expand Up @@ -107,12 +108,14 @@ class DOMException {
);
const code = nameToCodeMapping[name] ?? 0;

this[_message] = message;
this[_name] = name;
this[_code] = code;
this[webidl.brand] = webidl.brand;
// execute Error constructor to have stack property and [[ErrorData]] internal slot
const error = ReflectConstruct(Error, [], new.target);
error[_message] = message;
error[_name] = name;
error[_code] = code;
error[webidl.brand] = webidl.brand;

ErrorCaptureStackTrace(this, DOMException);
return error;
}

get message() {
Expand Down
2 changes: 1 addition & 1 deletion tests/unit_node/util_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ Deno.test({
fn() {
assert(util.types.isNativeError(new Error()));
assert(util.types.isNativeError(new TypeError()));
assert(!util.types.isNativeError(new DOMException()));
assert(util.types.isNativeError(new DOMException()));
},
});

Expand Down
15 changes: 5 additions & 10 deletions tests/wpt/runner/expectation.json
Original file line number Diff line number Diff line change
Expand Up @@ -3594,16 +3594,13 @@
"DOMException-constructor-behavior.any.html": true,
"DOMException-constructor-behavior.any.worker.html": true,
"DOMException-custom-bindings.any.html": true,
"DOMException-custom-bindings.any.worker.html": true
"DOMException-custom-bindings.any.worker.html": true,
"exceptions.html": false
},
"class-string-interface.any.html": true,
"class-string-interface.any.worker.html": true,
"class-string-iterator-prototype-object.any.html": [
"Object.prototype.toString applied after deleting @@toStringTag"
],
"class-string-iterator-prototype-object.any.worker.html": [
"Object.prototype.toString applied after deleting @@toStringTag"
],
"class-string-iterator-prototype-object.any.html": true,
"class-string-iterator-prototype-object.any.worker.html": true,
"class-string-named-properties-object.window.html": false,
"global-immutable-prototype.any.html": [
"Setting to a different prototype"
Expand Down Expand Up @@ -9754,16 +9751,14 @@
"structured-cloning-error-stack-optional.sub.window.html": [
"page-created Error (cross-site iframe)",
"page-created Error (same-origin iframe)",
"page-created DOMException (structuredClone())",
"page-created DOMException (cross-site iframe)",
"page-created DOMException (same-origin iframe)",
"JS-engine-created TypeError (cross-site iframe)",
"JS-engine-created TypeError (same-origin iframe)",
"web API-created TypeError (cross-site iframe)",
"web API-created TypeError (same-origin iframe)",
"web API-created DOMException (cross-site iframe)",
"web API-created DOMException (same-origin iframe)",
"page-created DOMException (worker)"
"web API-created DOMException (same-origin iframe)"
],
"transfer-errors.window.html": false,
"window-postmessage.window.html": false
Expand Down

0 comments on commit bf888d9

Please sign in to comment.