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 }; }; }