diff --git a/Libraries/LibWeb/Internals/Internals.cpp b/Libraries/LibWeb/Internals/Internals.cpp index 06a84d6f0f1..f51853df964 100644 --- a/Libraries/LibWeb/Internals/Internals.cpp +++ b/Libraries/LibWeb/Internals/Internals.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -342,6 +343,11 @@ String Internals::dump_display_list() return window().associated_document().dump_display_list(); } +String Internals::dump_gc_graph() +{ + return Bindings::main_thread_vm().heap().dump_graph().serialized(); +} + GC::Ptr Internals::get_shadow_root(GC::Ref element) { return element->shadow_root(); diff --git a/Libraries/LibWeb/Internals/Internals.h b/Libraries/LibWeb/Internals/Internals.h index 264c66f4f06..ea00854dc56 100644 --- a/Libraries/LibWeb/Internals/Internals.h +++ b/Libraries/LibWeb/Internals/Internals.h @@ -68,6 +68,7 @@ public: bool headless(); String dump_display_list(); + String dump_gc_graph(); GC::Ptr get_shadow_root(GC::Ref); diff --git a/Libraries/LibWeb/Internals/Internals.idl b/Libraries/LibWeb/Internals/Internals.idl index 2921939f4ee..1ca4692a7a7 100644 --- a/Libraries/LibWeb/Internals/Internals.idl +++ b/Libraries/LibWeb/Internals/Internals.idl @@ -57,6 +57,7 @@ interface Internals { readonly attribute boolean headless; DOMString dumpDisplayList(); + DOMString dumpGCGraph(); // Returns the shadow root of the element, if it has one, even if it's not normally accessible to JS. ShadowRoot? getShadowRoot(Element element); diff --git a/Tests/LibWeb/Crash/Internals/dump-gc-graph.html b/Tests/LibWeb/Crash/Internals/dump-gc-graph.html new file mode 100644 index 00000000000..a2df016ed70 --- /dev/null +++ b/Tests/LibWeb/Crash/Internals/dump-gc-graph.html @@ -0,0 +1,4 @@ + +