From 9d4278ad9a73d8b570faa6917761e61bddcad829 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 14 Jan 2024 16:42:41 +1300 Subject: [PATCH] LibWeb: Wait until new document is active before running SVG scripts This is the same fix as 07928129dd62fc8478fd1e9967efe4cd16909340 also applied to the SVG script element case. Fixes a crash for the following HTML: ```html ``` As with the linked commit: > With this change WebContent does not crash when `location.reload()` is > invoked but `Navigable::reload()` still not working because of spec > issue (whatwg/html#9869) so we can't add a > test yet. --- Userland/Libraries/LibWeb/SVG/SVGScriptElement.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/SVG/SVGScriptElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGScriptElement.cpp index 540b1f01c1..e4f092eaff 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGScriptElement.cpp +++ b/Userland/Libraries/LibWeb/SVG/SVGScriptElement.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Shannon Booth + * Copyright (c) 2023-2024, Shannon Booth * * SPDX-License-Identifier: BSD-2-Clause */ @@ -55,6 +55,12 @@ void SVGScriptElement::process_the_script_element() // 4. If the script content is inline, or if it is external and was fetched successfully, then the // script is executed. Note that at this point, these steps may be re-entrant if the execution // of the script results in further 'script' elements being inserted into the document. + + // https://html.spec.whatwg.org/multipage/document-lifecycle.html#read-html + // Before any script execution occurs, the user agent must wait for scripts may run for the newly-created document to be true for document. + if (!m_document->ready_to_run_scripts()) + HTML::main_thread_event_loop().spin_until([&] { return m_document->ready_to_run_scripts(); }); + // FIXME: Support non-inline scripts. auto& settings_object = document().relevant_settings_object(); auto base_url = document().base_url();