diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.cpp index 709b5f734a..2e7492729c 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.cpp @@ -309,7 +309,7 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript const& // 1. Fetch the descendants of module script, given fetch client settings object, destination, visited set, and onFetchDescendantsComplete as defined below. // If performFetch was given, pass it along as well. // FIXME: Pass performFetch if given. - fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [on_complete = move(on_complete)](JavaScriptModuleScript const* result) { + fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [&fetch_client_settings_object, on_complete = move(on_complete)](JavaScriptModuleScript const* result) { // onFetchDescendantsComplete given result is the following algorithm: // 1. If result is null, then run onComplete given result, and abort these steps. if (!result) { @@ -324,9 +324,15 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript const& // 1. Let record be result's record. auto const& record = *result->record(); + // NOTE: Although the spec does not say this we have to have a proper execution context when linking so we modify the stack here. + // FIXME: Determine whether we are missing something from the spec or the spec is missing this step. + fetch_client_settings_object.realm().vm().push_execution_context(fetch_client_settings_object.realm_execution_context()); + // 2. Perform record.Link(). auto linking_result = const_cast(record).link(result->vm()); + fetch_client_settings_object.realm().vm().pop_execution_context(); + // TODO: If this throws an exception, set result's error to rethrow to that exception. if (linking_result.is_error()) TODO();