diff --git a/Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp b/Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp index a2412ac5c0..60450d515d 100644 --- a/Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp +++ b/Userland/Libraries/LibWeb/WebDriver/ExecuteScript.cpp @@ -311,6 +311,8 @@ ExecuteScriptResultSerialized execute_script(Web::Page& page, DeprecatedString c ExecuteScriptResultSerialized execute_async_script(Web::Page& page, DeprecatedString const& body, JS::MarkedVector arguments, Optional const& timeout) { + auto* document = page.top_level_browsing_context().active_document(); + auto& settings_object = document->relevant_settings_object(); auto* window = page.top_level_browsing_context().active_window(); auto& realm = window->realm(); auto& vm = window->vm(); @@ -321,9 +323,15 @@ ExecuteScriptResultSerialized execute_async_script(Web::Page& page, DeprecatedSt // FIXME: 5 Run the following substeps in parallel: auto result = [&] { + // NOTE: We need to push an execution context in order to make create_resolving_functions() succeed. + vm.push_execution_context(settings_object.realm_execution_context()); + // 1. Let resolvingFunctions be CreateResolvingFunctions(promise). auto resolving_functions = promise->create_resolving_functions(); + VERIFY(&settings_object.realm_execution_context() == &vm.running_execution_context()); + vm.pop_execution_context(); + // 2. Append resolvingFunctions.[[Resolve]] to arguments. arguments.append(&resolving_functions.resolve);