From c759055c08bb67307f7cb0e2596a9323ffd6a205 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 9 Sep 2021 02:11:11 +0200 Subject: [PATCH] LibWeb: Implement "Document has a style sheet that is blocking scripts" This will be used by the HTML parser to determine whether it's okay to start running a script. Note that we don't actually count the script-blocking style sheets yet. This patch only adds a the checking mechanism for the parser. --- Userland/Libraries/LibWeb/DOM/Document.cpp | 14 ++++++++++++++ Userland/Libraries/LibWeb/DOM/Document.h | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 1a1a11eab2..c6d8d29e3b 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -948,4 +948,18 @@ String Document::dump_dom_tree_as_json() const return builder.to_string(); } +// https://html.spec.whatwg.org/multipage/semantics.html#has-a-style-sheet-that-is-blocking-scripts +bool Document::has_a_style_sheet_that_is_blocking_scripts() const +{ + // A Document has a style sheet that is blocking scripts if its script-blocking style sheet counter is greater than 0, + if (m_script_blocking_style_sheet_counter > 0) + return true; + + // ...or if that Document has a non-null browsing context whose container document is non-null and has a script-blocking style sheet counter greater than 0. + if (!browsing_context() || !browsing_context()->container_document()) + return false; + + return browsing_context()->container_document()->m_script_blocking_style_sheet_counter > 0; +} + } diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 45f859bef4..db9a7ea77f 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -270,6 +270,8 @@ public: String dump_dom_tree_as_json() const; + bool has_a_style_sheet_that_is_blocking_scripts() const; + private: explicit Document(const URL&); @@ -347,6 +349,9 @@ private: bool m_should_invalidate_styles_on_attribute_changes { true }; u32 m_ignore_destructive_writes_counter { 0 }; + + // https://html.spec.whatwg.org/multipage/semantics.html#script-blocking-style-sheet-counter + u32 m_script_blocking_style_sheet_counter { 0 }; }; }