From 08284e0ef6c238fb4b4851fd9536f9abcb6064e8 Mon Sep 17 00:00:00 2001 From: Tete17 Date: Thu, 14 Aug 2025 23:29:44 +0200 Subject: [PATCH] LibJS: Implement console.dirxml This function actually gets tested in WPT. --- Libraries/LibJS/Console.cpp | 30 ++++++++++++++++++- Libraries/LibJS/Console.h | 1 + Libraries/LibJS/Runtime/CommonPropertyNames.h | 1 + Libraries/LibJS/Runtime/ConsoleObject.cpp | 8 +++++ Libraries/LibJS/Runtime/ConsoleObject.h | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Libraries/LibJS/Console.cpp b/Libraries/LibJS/Console.cpp index 869dbb5267b..a7672e1d1b5 100644 --- a/Libraries/LibJS/Console.cpp +++ b/Libraries/LibJS/Console.cpp @@ -398,6 +398,34 @@ ThrowCompletionOr Console::dir() return js_undefined(); } +// 1.1.11 dirxml(...data) https://console.spec.whatwg.org/#dirxml +ThrowCompletionOr Console::dirxml() +{ + auto& vm = realm().vm(); + + // 1. Let finalList be a new list, initially empty. + GC::RootVector final_list(vm.heap()); + + // 2. For each item of data: + for (size_t i = 0; i < vm.argument_count(); ++i) { + auto item = vm.argument(i); + + // 1. Let converted be a DOM tree representation of item if possible; otherwise let converted be item with + // optimally useful formatting applied. + // FIXME: "Optimally-useful formatting" + + // 2. Append converted to finalList. + final_list.append(item); + } + + // 3. Perform Logger("dirxml", finalList). + if (m_client) { + return m_client->logger(LogLevel::DirXML, final_list); + } + + return js_undefined(); +} + static ThrowCompletionOr label_or_fallback(VM& vm, StringView fallback) { return vm.argument_count() > 0 && !vm.argument(0).is_undefined() @@ -850,7 +878,7 @@ ThrowCompletionOr> ConsoleClient::formatter(GC::RootVector } // 4. If specifier is %o, optionally let converted be current with optimally useful formatting applied. else if (specifier == "%o"sv) { - // TODO: "Optimally-useful formatting" + // FIXME: "Optimally-useful formatting" converted = current; } // 5. If specifier is %O, optionally let converted be current with generic JavaScript object formatting applied. diff --git a/Libraries/LibJS/Console.h b/Libraries/LibJS/Console.h index ad9e26d5db8..33080012c60 100644 --- a/Libraries/LibJS/Console.h +++ b/Libraries/LibJS/Console.h @@ -79,6 +79,7 @@ public: ThrowCompletionOr trace(); ThrowCompletionOr warn(); ThrowCompletionOr dir(); + ThrowCompletionOr dirxml(); ThrowCompletionOr count(); ThrowCompletionOr count_reset(); ThrowCompletionOr group(); diff --git a/Libraries/LibJS/Runtime/CommonPropertyNames.h b/Libraries/LibJS/Runtime/CommonPropertyNames.h index 4c3d67cd33a..999714c442e 100644 --- a/Libraries/LibJS/Runtime/CommonPropertyNames.h +++ b/Libraries/LibJS/Runtime/CommonPropertyNames.h @@ -124,6 +124,7 @@ namespace JS { P(difference) \ P(dir) \ P(direction) \ + P(dirxml) \ P(disabledFeatures) \ P(disambiguation) \ P(disposeAsync) \ diff --git a/Libraries/LibJS/Runtime/ConsoleObject.cpp b/Libraries/LibJS/Runtime/ConsoleObject.cpp index 1fbb26eccc5..e3aff8f65ee 100644 --- a/Libraries/LibJS/Runtime/ConsoleObject.cpp +++ b/Libraries/LibJS/Runtime/ConsoleObject.cpp @@ -49,6 +49,7 @@ void ConsoleObject::initialize(Realm& realm) define_native_function(realm, vm.names.trace, trace, 0, attr); define_native_function(realm, vm.names.warn, warn, 0, attr); define_native_function(realm, vm.names.dir, dir, 0, attr); + define_native_function(realm, vm.names.dirxml, dir, 0, attr); define_native_function(realm, vm.names.count, count, 0, attr); define_native_function(realm, vm.names.countReset, count_reset, 0, attr); define_native_function(realm, vm.names.group, group, 0, attr); @@ -131,6 +132,13 @@ JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::dir) return console_object.console().dir(); } +// 1.1.11 dirxml(...data) https://console.spec.whatwg.org/#dirxml +JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::dirxml) +{ + auto& console_object = *vm.current_realm()->intrinsics().console_object(); + return console_object.console().dirxml(); +} + // 1.2.1. count(label), https://console.spec.whatwg.org/#count JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count) { diff --git a/Libraries/LibJS/Runtime/ConsoleObject.h b/Libraries/LibJS/Runtime/ConsoleObject.h index b7586908ac8..02b803b50e3 100644 --- a/Libraries/LibJS/Runtime/ConsoleObject.h +++ b/Libraries/LibJS/Runtime/ConsoleObject.h @@ -34,6 +34,7 @@ private: JS_DECLARE_NATIVE_FUNCTION(warn); JS_DECLARE_NATIVE_FUNCTION(table); JS_DECLARE_NATIVE_FUNCTION(dir); + JS_DECLARE_NATIVE_FUNCTION(dirxml); JS_DECLARE_NATIVE_FUNCTION(count); JS_DECLARE_NATIVE_FUNCTION(count_reset); JS_DECLARE_NATIVE_FUNCTION(group);