mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 22:38:51 +00:00
LibWeb: Only prepare scripts on insertion if they're not parser inserted
Also updates the "inserted_into" function as per the previous commit. Changes the FIXME, as according to the spec there is no notification system to be notified of things such as the node becoming connected. Instead, "becomes connected" means when the insertion steps are run, the element is now connected when it previously wasn't. https://html.spec.whatwg.org/multipage/infrastructure.html#becomes-connected This is done in this PR because the insertion steps are run when the start tag is inserted. This made it try to prepare the script too early for inline scripts. The order of operations in the HTML document parser ensures that the parser document is set before the insertion steps are run.
This commit is contained in:
parent
e3d01c5e10
commit
be47a94876
Notes:
sideshowbarker
2024-07-18 20:43:05 +09:00
Author: https://github.com/Lubrsi
Commit: be47a94876
Pull-request: https://github.com/SerenityOS/serenity/pull/6158
2 changed files with 13 additions and 13 deletions
|
@ -203,9 +203,6 @@ void HTMLScriptElement::prepare_script()
|
|||
// FIXME: Cryptographic nonce
|
||||
// FIXME: Check "integrity" attribute
|
||||
// FIXME: Check "referrerpolicy" attribute
|
||||
|
||||
m_parser_inserted = !!m_parser_document;
|
||||
|
||||
// FIXME: Check fetch options
|
||||
|
||||
if (has_attribute(HTML::AttributeNames::src)) {
|
||||
|
@ -254,15 +251,15 @@ void HTMLScriptElement::prepare_script()
|
|||
}
|
||||
}
|
||||
|
||||
if ((m_script_type == ScriptType::Classic && has_attribute(HTML::AttributeNames::src) && has_attribute(HTML::AttributeNames::defer) && m_parser_inserted && !has_attribute(HTML::AttributeNames::async))
|
||||
|| (m_script_type == ScriptType::Module && m_parser_inserted && !has_attribute(HTML::AttributeNames::async))) {
|
||||
if ((m_script_type == ScriptType::Classic && has_attribute(HTML::AttributeNames::src) && has_attribute(HTML::AttributeNames::defer) && is_parser_inserted() && !has_attribute(HTML::AttributeNames::async))
|
||||
|| (m_script_type == ScriptType::Module && is_parser_inserted() && !has_attribute(HTML::AttributeNames::async))) {
|
||||
document().add_script_to_execute_when_parsing_has_finished({}, *this);
|
||||
when_the_script_is_ready([this] {
|
||||
m_ready_to_be_parser_executed = true;
|
||||
});
|
||||
}
|
||||
|
||||
else if (m_script_type == ScriptType::Classic && has_attribute(HTML::AttributeNames::src) && m_parser_inserted && !has_attribute(HTML::AttributeNames::async)) {
|
||||
else if (m_script_type == ScriptType::Classic && has_attribute(HTML::AttributeNames::src) && is_parser_inserted() && !has_attribute(HTML::AttributeNames::async)) {
|
||||
document().set_pending_parsing_blocking_script({}, this);
|
||||
when_the_script_is_ready([this] {
|
||||
m_ready_to_be_parser_executed = true;
|
||||
|
@ -329,13 +326,15 @@ void HTMLScriptElement::when_the_script_is_ready(Function<void()> callback)
|
|||
m_script_ready_callback = move(callback);
|
||||
}
|
||||
|
||||
void HTMLScriptElement::inserted_into(Node& parent)
|
||||
void HTMLScriptElement::inserted()
|
||||
{
|
||||
// FIXME: It would be nice to have a notification for "node became connected"
|
||||
if (is_connected()) {
|
||||
prepare_script();
|
||||
if (!is_parser_inserted()) {
|
||||
// FIXME: Only do this if the element was previously not connected.
|
||||
if (is_connected()) {
|
||||
prepare_script();
|
||||
}
|
||||
}
|
||||
HTMLElement::inserted_into(parent);
|
||||
HTMLElement::inserted();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue