From 6c5450f9ceb17572098c907e2b494db9ff1ebba5 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 24 Nov 2023 15:18:57 +0000 Subject: [PATCH] LibWeb: Report if anything is delaying load event, not the count Some elements that delay the load event are more complicated than a simple count will allow for. We'll implement those in a bit! --- Userland/Libraries/LibWeb/DOM/Document.cpp | 10 ++++++++++ Userland/Libraries/LibWeb/DOM/Document.h | 2 +- Userland/Libraries/LibWeb/HTML/Navigable.h | 1 + Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp | 3 +-- Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 268c6de6fa..3168b221ac 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -2384,6 +2384,16 @@ void Document::decrement_number_of_things_delaying_the_load_event(Badgeclient().page_did_update_resource_count(m_number_of_things_delaying_the_load_event); } +bool Document::anything_is_delaying_the_load_event() const +{ + if (m_number_of_things_delaying_the_load_event > 0) + return true; + + // FIXME: Track down all the things that are supposed to delay the load event. + + return false; +} + void Document::invalidate_stacking_context_tree() { if (auto* paintable_box = this->paintable_box()) diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 4fc4c68530..bbe9c1bc44 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -365,7 +365,7 @@ public: [[nodiscard]] JS::GCPtr location(); - size_t number_of_things_delaying_the_load_event() const { return m_number_of_things_delaying_the_load_event; } + bool anything_is_delaying_the_load_event() const; void increment_number_of_things_delaying_the_load_event(Badge); void decrement_number_of_things_delaying_the_load_event(Badge); diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.h b/Userland/Libraries/LibWeb/HTML/Navigable.h index 0f4ab7a852..94827f7fa7 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.h +++ b/Userland/Libraries/LibWeb/HTML/Navigable.h @@ -64,6 +64,7 @@ public: void set_closing(bool value) { m_closing = value; } void set_delaying_load_events(bool value); + bool is_delaying_load_events() const { return m_delaying_the_load_event.has_value(); } JS::GCPtr active_session_history_entry() const { return m_active_session_history_entry; } void set_active_session_history_entry(JS::GCPtr entry) { m_active_session_history_entry = entry; } diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp index 299576b908..0bce504276 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp @@ -304,9 +304,8 @@ void HTMLParser::the_end() }); // 8. Spin the event loop until there is nothing that delays the load event in the Document. - // FIXME: Track down all the things that are supposed to delay the load event. main_thread_event_loop().spin_until([&] { - return m_document->number_of_things_delaying_the_load_event() == 0; + return !m_document->anything_is_delaying_the_load_event(); }); // 9. Queue a global task on the DOM manipulation task source given the Document's relevant global object to run the following steps: diff --git a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp index 5343b8f38c..f9e582073e 100644 --- a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp +++ b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp @@ -219,7 +219,7 @@ void XMLDocumentBuilder::document_end() // Spin the event loop until there is nothing that delays the load event in the Document. HTML::main_thread_event_loop().spin_until([&] { - return m_document->number_of_things_delaying_the_load_event() == 0; + return !m_document->anything_is_delaying_the_load_event(); }); // Queue a global task on the DOM manipulation task source given the Document's relevant global object to run the following steps: