mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
f4f4f7781d
When launched with the new --enable-idl-tracing option, we now log every call to web platform APIs declared via IDL, along with the arguments passed. This can be very helpful when trying to figure out what a site is doing, especially if it's not doing what you'd expect.
43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2024, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/Format.h>
|
|
#include <AK/StringBuilder.h>
|
|
#include <LibJS/Runtime/VM.h>
|
|
#include <LibWeb/WebIDL/Tracing.h>
|
|
|
|
namespace Web::WebIDL {
|
|
|
|
bool g_enable_idl_tracing = false;
|
|
|
|
void log_trace_impl(JS::VM& vm, char const* function)
|
|
{
|
|
if (!g_enable_idl_tracing)
|
|
return;
|
|
|
|
StringBuilder builder;
|
|
for (size_t i = 0; i < vm.argument_count(); ++i) {
|
|
if (i != 0)
|
|
builder.append(", "sv);
|
|
auto argument = vm.argument(i);
|
|
if (argument.is_string())
|
|
builder.append_code_point('"');
|
|
auto string = argument.to_string_without_side_effects();
|
|
for (auto code_point : string.code_points()) {
|
|
if (code_point < 0x20) {
|
|
builder.appendff("\\u{:04x}", code_point);
|
|
continue;
|
|
}
|
|
builder.append_code_point(code_point);
|
|
}
|
|
if (argument.is_string())
|
|
builder.append_code_point('"');
|
|
}
|
|
dbgln("{}({})", function, builder.string_view());
|
|
}
|
|
|
|
}
|