From 758f4887bc1a2bbbf111fb3bee120e491322ba32 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 23 Jul 2024 09:57:19 -0400 Subject: [PATCH] WebContent: Limit the Console client to the top-level navigable client We don't want to set the intrinsic Console object's client to non-top- level clients, created for e.g. SVG elements or subframes. We also want to make sure the Console client is updated if the top-level document has changed. --- Userland/Services/WebContent/PageClient.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Userland/Services/WebContent/PageClient.cpp b/Userland/Services/WebContent/PageClient.cpp index 0c87fb3c26d..8cdfdbd4e49 100644 --- a/Userland/Services/WebContent/PageClient.cpp +++ b/Userland/Services/WebContent/PageClient.cpp @@ -342,8 +342,13 @@ void PageClient::page_did_create_new_document(Web::DOM::Document& document) void PageClient::page_did_change_active_document_in_top_level_browsing_context(Web::DOM::Document& document) { + auto& realm = document.realm(); + VERIFY(m_console_clients.contains(document)); m_top_level_document_console_client = *m_console_clients.get(document).value(); + + auto console_object = realm.intrinsics().console_object(); + console_object->console().set_client(*m_top_level_document_console_client); } void PageClient::page_did_destroy_document(Web::DOM::Document& document) @@ -666,7 +671,6 @@ void PageClient::initialize_js_console(Web::DOM::Document& document) auto& realm = document.realm(); auto console_object = realm.intrinsics().console_object(); auto console_client = heap().allocate_without_realm(console_object->console(), document.realm(), *this); - console_object->console().set_client(*console_client); m_console_clients.set(document, console_client); }