diff --git a/Tests/LibWeb/Text/expected/Crypto/SubtleCrypto-generateKey.txt b/Tests/LibWeb/Text/expected/Crypto/SubtleCrypto-generateKey.txt index 2b4f3e43e4a..78f347fad1f 100644 --- a/Tests/LibWeb/Text/expected/Crypto/SubtleCrypto-generateKey.txt +++ b/Tests/LibWeb/Text/expected/Crypto/SubtleCrypto-generateKey.txt @@ -10,6 +10,6 @@ privateKey type: private privateKey extractable: true privateKey usages: decrypt,unwrapKey invalid usages throw -Error: [object DOMException] +Error: SyntaxError: Invalid key usage 'sign' no usages for private key throws -Error: [object DOMException] +Error: SyntaxError: usages must not be empty diff --git a/Tests/LibWeb/Text/expected/abortsignal-abort.txt b/Tests/LibWeb/Text/expected/abortsignal-abort.txt index 9005fe02e23..37723f302a5 100644 --- a/Tests/LibWeb/Text/expected/abortsignal-abort.txt +++ b/Tests/LibWeb/Text/expected/abortsignal-abort.txt @@ -1,4 +1,4 @@ Aborted: true -Reason: "[object DOMException]" +Reason: "AbortError: Aborted without reason" Aborted: true Reason: "This is a test" diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.cpp index e031be2751c..b366ff77d1f 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.cpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace Web::HTML { @@ -25,11 +26,19 @@ void report_exception_to_console(JS::Value value, JS::Realm& realm, ErrorInPromi auto message = object.get_without_side_effects(vm.names.message).value_or(JS::js_undefined()); if (name.is_accessor() || message.is_accessor()) { // The result is not going to be useful, let's just print the value. This affects DOMExceptions, for example. - dbgln("\033[31;1mUnhandled JavaScript exception{}:\033[0m {}", error_in_promise == ErrorInPromise::Yes ? " (in promise)" : "", JS::Value(&object)); + if (is(object)) { + auto const& exception = static_cast(object); + dbgln("\033[31;1mUnhandled JavaScript exception{}:\033[0m {}: {}", error_in_promise == ErrorInPromise::Yes ? " (in promise)" : "", exception.name(), exception.message()); + } else { + dbgln("\033[31;1mUnhandled JavaScript exception{}:\033[0m {}", error_in_promise == ErrorInPromise::Yes ? " (in promise)" : "", JS::Value(&object)); + } } else { dbgln("\033[31;1mUnhandled JavaScript exception{}:\033[0m [{}] {}", error_in_promise == ErrorInPromise::Yes ? " (in promise)" : "", name, message); } if (is(object)) { + // FIXME: We should be doing this for DOMException as well + // https://webidl.spec.whatwg.org/#js-DOMException-specialness + // "Additionally, if an implementation gives native Error objects special powers or nonstandard properties (such as a stack property), it should also expose those on DOMException objects." auto const& error_value = static_cast(object); dbgln("{}", error_value.stack_string(JS::CompactTraceback::Yes)); console.report_exception(error_value, error_in_promise == ErrorInPromise::Yes);