From b4fe118dff6c1bd839f0443f9d822ae078895814 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Thu, 7 Sep 2023 12:11:37 +0200 Subject: [PATCH] LibWeb+WebContent: Set ConsoleClient for nested browsing contexts Before page_did_create_main_document() only initialized ConsoleClient for top-level browsing context which means that nested browsing context could not print into the console. With this change, ConsoleClient is initialized for documents created for nested browsing context too. One ConsoleClient is shared between all browsing contexts within the same page. --- Userland/Libraries/LibWeb/Loader/FrameLoader.cpp | 2 +- Userland/Libraries/LibWeb/Page/Page.h | 2 +- Userland/Services/WebContent/ConnectionFromClient.cpp | 8 ++++---- Userland/Services/WebContent/ConnectionFromClient.h | 2 +- Userland/Services/WebContent/PageHost.cpp | 4 ++-- Userland/Services/WebContent/PageHost.h | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp index f49a124c7a..5b84d31c3d 100644 --- a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp +++ b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp @@ -325,7 +325,7 @@ void FrameLoader::resource_did_load() browsing_context().set_active_document(document); if (auto* page = browsing_context().page()) - page->client().page_did_create_main_document(); + page->client().page_did_create_new_document(*document); if (!parse_document(*document, resource()->encoded_data())) { load_error_page(url, "Failed to parse content."); diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index 492cab0967..5d8175c8da 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -200,7 +200,7 @@ public: virtual Gfx::IntRect page_did_request_minimize_window() { return {}; } virtual Gfx::IntRect page_did_request_fullscreen_window() { return {}; } virtual void page_did_start_loading(const AK::URL&, bool is_redirect) { (void)is_redirect; } - virtual void page_did_create_main_document() { } + virtual void page_did_create_new_document(Web::DOM::Document&) { } virtual void page_did_finish_loading(const AK::URL&) { } virtual void page_did_change_selection() { } virtual void page_did_request_cursor_change(Gfx::StandardCursor) { } diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp index 9d106b031e..d7122a2583 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.cpp +++ b/Userland/Services/WebContent/ConnectionFromClient.cpp @@ -601,16 +601,16 @@ Messages::WebContentServer::GetHoveredNodeIdResponse ConnectionFromClient::get_h return (i32)0; } -void ConnectionFromClient::initialize_js_console(Badge) +void ConnectionFromClient::initialize_js_console(Badge, Web::DOM::Document& document) { - auto* document = page().top_level_browsing_context().active_document(); - auto realm = document->realm().make_weak_ptr(); + auto realm = document.realm().make_weak_ptr(); if (m_realm.ptr() == realm.ptr()) return; auto console_object = realm->intrinsics().console_object(); m_realm = realm; - m_console_client = make(console_object->console(), *m_realm, *this); + if (!m_console_client) + m_console_client = make(console_object->console(), *m_realm, *this); console_object->console().set_client(*m_console_client.ptr()); } diff --git a/Userland/Services/WebContent/ConnectionFromClient.h b/Userland/Services/WebContent/ConnectionFromClient.h index fc86b45f52..533e3a80ae 100644 --- a/Userland/Services/WebContent/ConnectionFromClient.h +++ b/Userland/Services/WebContent/ConnectionFromClient.h @@ -33,7 +33,7 @@ public: virtual void die() override; - void initialize_js_console(Badge); + void initialize_js_console(Badge, Web::DOM::Document& document); void request_file(Web::FileRequest); diff --git a/Userland/Services/WebContent/PageHost.cpp b/Userland/Services/WebContent/PageHost.cpp index dd40822025..f5620c1ef0 100644 --- a/Userland/Services/WebContent/PageHost.cpp +++ b/Userland/Services/WebContent/PageHost.cpp @@ -281,9 +281,9 @@ void PageHost::page_did_start_loading(const URL& url, bool is_redirect) m_client.async_did_start_loading(url, is_redirect); } -void PageHost::page_did_create_main_document() +void PageHost::page_did_create_new_document(Web::DOM::Document& document) { - m_client.initialize_js_console({}); + m_client.initialize_js_console({}, document); } void PageHost::page_did_finish_loading(const URL& url) diff --git a/Userland/Services/WebContent/PageHost.h b/Userland/Services/WebContent/PageHost.h index 9f58004992..83969660e1 100644 --- a/Userland/Services/WebContent/PageHost.h +++ b/Userland/Services/WebContent/PageHost.h @@ -93,7 +93,7 @@ private: virtual void page_did_request_image_context_menu(Web::CSSPixelPoint, const URL&, DeprecatedString const& target, unsigned modifiers, Gfx::Bitmap const*) override; virtual void page_did_request_media_context_menu(Web::CSSPixelPoint, DeprecatedString const& target, unsigned modifiers, Web::Page::MediaContextMenu) override; virtual void page_did_start_loading(const URL&, bool) override; - virtual void page_did_create_main_document() override; + virtual void page_did_create_new_document(Web::DOM::Document&) override; virtual void page_did_finish_loading(const URL&) override; virtual void page_did_request_alert(String const&) override; virtual void page_did_request_confirm(String const&) override;