mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibWeb+WebContent: Store console clients on the DOM document
We explicitly stopped visting the map of documents to console clients in
commit 44659f2f2a
to avoid keeping the
document alive. However, if nothing else visits the console clients, we
may set the top-level console client to a client that has been garbage
collected.
So instead of storing this map, just store the console client on the
document itself. This will allow the document to visit its client.
This commit is contained in:
parent
a1c57ed79a
commit
0a819e628e
Notes:
github-actions[bot]
2024-08-01 09:36:46 +00:00
Author: https://github.com/trflynn89
Commit: 0a819e628e
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/916
5 changed files with 12 additions and 26 deletions
|
@ -80,7 +80,6 @@ void PageClient::visit_edges(JS::Cell::Visitor& visitor)
|
|||
{
|
||||
Base::visit_edges(visitor);
|
||||
visitor.visit(m_page);
|
||||
visitor.ignore(m_console_clients);
|
||||
}
|
||||
|
||||
ConnectionFromClient& PageClient::client() const
|
||||
|
@ -342,13 +341,10 @@ 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)
|
||||
{
|
||||
if (auto console_client = m_console_clients.get(document); console_client.has_value())
|
||||
m_top_level_document_console_client = *console_client.value();
|
||||
}
|
||||
|
||||
void PageClient::page_did_destroy_document(Web::DOM::Document& document)
|
||||
{
|
||||
destroy_js_console(document);
|
||||
if (auto console_client = document.console_client()) {
|
||||
auto& web_content_console_client = verify_cast<WebContentConsoleClient>(*console_client);
|
||||
m_top_level_document_console_client = web_content_console_client;
|
||||
}
|
||||
}
|
||||
|
||||
void PageClient::page_did_finish_loading(URL::URL const& url)
|
||||
|
@ -671,12 +667,7 @@ void PageClient::initialize_js_console(Web::DOM::Document& document)
|
|||
auto console_client = heap().allocate_without_realm<WebContentConsoleClient>(console_object->console(), document.realm(), *this);
|
||||
console_object->console().set_client(*console_client);
|
||||
|
||||
m_console_clients.set(document, console_client);
|
||||
}
|
||||
|
||||
void PageClient::destroy_js_console(Web::DOM::Document& document)
|
||||
{
|
||||
m_console_clients.remove(document);
|
||||
document.set_console_client(console_client);
|
||||
}
|
||||
|
||||
void PageClient::js_console_input(ByteString const& js_source)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue