diff --git a/Ladybird/BrowserWindow.cpp b/Ladybird/BrowserWindow.cpp index c03d85e656..36ff872b6f 100644 --- a/Ladybird/BrowserWindow.cpp +++ b/Ladybird/BrowserWindow.cpp @@ -219,6 +219,13 @@ BrowserWindow::BrowserWindow(Browser::CookieJar& cookie_jar, StringView webdrive debug_request("dump-style-sheets"); }); + auto* dump_styles_action = new QAction("Dump All Resolved Styles", this); + dump_styles_action->setIcon(QIcon(QString("%1/res/icons/16x16/filetype-css.png").arg(s_serenity_resource_root.characters()))); + debug_menu->addAction(dump_styles_action); + QObject::connect(dump_styles_action, &QAction::triggered, this, [this] { + debug_request("dump-all-resolved-styles"); + }); + auto* dump_history_action = new QAction("Dump History", this); dump_history_action->setIcon(QIcon(QString("%1/res/icons/16x16/history.png").arg(s_serenity_resource_root.characters()))); debug_menu->addAction(dump_history_action); diff --git a/Userland/Applications/Browser/BrowserWindow.cpp b/Userland/Applications/Browser/BrowserWindow.cpp index eb3f235a1f..b4146262ae 100644 --- a/Userland/Applications/Browser/BrowserWindow.cpp +++ b/Userland/Applications/Browser/BrowserWindow.cpp @@ -364,6 +364,11 @@ void BrowserWindow::build_menus() active_tab().view().debug_request("dump-style-sheets"); }, this)); + debug_menu.add_action(GUI::Action::create( + "Dump &All Resolved Styles", g_icon_bag.filetype_css, [this](auto&) { + active_tab().view().debug_request("dump-all-resolved-styles"); + }, + this)); debug_menu.add_action(GUI::Action::create("Dump &History", { Mod_Ctrl, Key_H }, g_icon_bag.history, [this](auto&) { active_tab().m_history.dump(); })); diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index e93fa55e2e..a876bd99fc 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -368,6 +368,26 @@ void ConnectionFromClient::debug_request(DeprecatedString const& request, Deprec } } + if (request == "dump-all-resolved-styles") { + if (auto* doc = page().top_level_browsing_context().active_document()) { + Queue elements_to_visit; + elements_to_visit.enqueue(doc->document_element()); + while (!elements_to_visit.is_empty()) { + auto element = elements_to_visit.dequeue(); + for (auto& child : element->children_as_vector()) + elements_to_visit.enqueue(child.ptr()); + if (element->is_element()) { + auto styles = doc->style_computer().compute_style(*static_cast(element)).release_value_but_fixme_should_propagate_errors(); + dbgln("+ Element {}", element->debug_description()); + auto& properties = styles->properties(); + for (size_t i = 0; i < properties.size(); ++i) + dbgln("| {} = {}", Web::CSS::string_from_property_id(static_cast(i)), properties[i].has_value() ? properties[i]->style->to_string() : ""_short_string); + dbgln("---"); + } + } + } + } + if (request == "collect-garbage") { Web::Bindings::main_thread_vm().heap().collect_garbage(JS::Heap::CollectionType::CollectGarbage, true); }