diff --git a/Userland/Libraries/LibWeb/HTML/Navigation.cpp b/Userland/Libraries/LibWeb/HTML/Navigation.cpp
index 6d8634a071..2e3be11bdd 100644
--- a/Userland/Libraries/LibWeb/HTML/Navigation.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Navigation.cpp
@@ -1067,7 +1067,7 @@ bool Navigation::inner_navigate_event_firing_algorithm(
// 31. Prepare to run script given navigation's relevant settings object.
// NOTE: There's a massive spec note here
- TemporaryExecutionContext execution_context { relevant_settings_object(*this) };
+ TemporaryExecutionContext execution_context { relevant_settings_object(*this), TemporaryExecutionContext::CallbacksEnabled::Yes };
// 32. If event's interception state is not "none":
if (event->interception_state() != NavigateEvent::InterceptionState::None) {
diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.cpp
index eb2d63d8f1..831743a286 100644
--- a/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.cpp
@@ -9,15 +9,20 @@
namespace Web::HTML {
-TemporaryExecutionContext::TemporaryExecutionContext(EnvironmentSettingsObject& environment_settings)
+TemporaryExecutionContext::TemporaryExecutionContext(EnvironmentSettingsObject& environment_settings, CallbacksEnabled callbacks_enabled)
: m_environment_settings(environment_settings)
+ , m_callbacks_enabled(callbacks_enabled)
{
m_environment_settings.prepare_to_run_script();
+ if (m_callbacks_enabled == CallbacksEnabled::Yes)
+ m_environment_settings.prepare_to_run_callback();
}
TemporaryExecutionContext::~TemporaryExecutionContext()
{
m_environment_settings.clean_up_after_running_script();
+ if (m_callbacks_enabled == CallbacksEnabled::Yes)
+ m_environment_settings.clean_up_after_running_callback();
}
}
diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.h b/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.h
index 04ece3efe0..e331efe9f3 100644
--- a/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.h
+++ b/Userland/Libraries/LibWeb/HTML/Scripting/TemporaryExecutionContext.h
@@ -15,11 +15,17 @@ namespace Web::HTML {
// this is a workaround to temporarily push an execution context.
class TemporaryExecutionContext {
public:
- explicit TemporaryExecutionContext(EnvironmentSettingsObject&);
+ enum class CallbacksEnabled {
+ No,
+ Yes,
+ };
+
+ explicit TemporaryExecutionContext(EnvironmentSettingsObject&, CallbacksEnabled = CallbacksEnabled::No);
~TemporaryExecutionContext();
private:
EnvironmentSettingsObject& m_environment_settings;
+ CallbacksEnabled m_callbacks_enabled { CallbacksEnabled::No };
};
}