diff options
author | Andreas Kling <kling@serenityos.org> | 2020-09-27 20:31:13 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-27 20:31:13 +0200 |
commit | 700cbc02ec01213bbcf85a9efc0636681adfed5f (patch) | |
tree | ed9a6aa359ca4237ab97749e51fa97691bf0cc84 | |
parent | 340d6b0ef7e27b936074ca29a3191f7f67fda91b (diff) | |
download | serenity-700cbc02ec01213bbcf85a9efc0636681adfed5f.zip |
LibWeb: Use JS::VM::call() in timer and RAF callback invocation
This removes assumptions about having an Interpreter, and also unbreaks
requestAnimationFrame which was asserting.
-rw-r--r-- | Libraries/LibWeb/DOM/Window.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/Libraries/LibWeb/DOM/Window.cpp b/Libraries/LibWeb/DOM/Window.cpp index 6661639ce6..1bfce5ad6a 100644 --- a/Libraries/LibWeb/DOM/Window.cpp +++ b/Libraries/LibWeb/DOM/Window.cpp @@ -26,7 +26,6 @@ #include <LibGUI/DisplayLink.h> #include <LibGUI/MessageBox.h> -#include <LibJS/Interpreter.h> #include <LibJS/Runtime/Function.h> #include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Timer.h> @@ -86,6 +85,7 @@ void Window::timer_did_fire(Badge<Timer>, Timer& timer) { // We should not be here if there's no JS wrapper for the Window object. ASSERT(wrapper()); + auto& vm = wrapper()->vm(); // NOTE: This protector pointer keeps the timer alive until the end of this function no matter what. NonnullRefPtr protector(timer); @@ -94,10 +94,9 @@ void Window::timer_did_fire(Badge<Timer>, Timer& timer) m_timers.remove(timer.id()); } - auto& interpreter = document().interpreter(); - (void)interpreter.call(timer.callback(), wrapper()); - if (interpreter.exception()) - interpreter.vm().clear_exception(); + (void)vm.call(timer.callback(), wrapper()); + if (vm.exception()) + vm.clear_exception(); } i32 Window::allocate_timer_id(Badge<Timer>) @@ -122,11 +121,11 @@ i32 Window::request_animation_frame(JS::Function& callback) i32 link_id = GUI::DisplayLink::register_callback([handle = make_handle(&callback)](i32 link_id) { auto& function = const_cast<JS::Function&>(static_cast<const JS::Function&>(*handle.cell())); - auto& interpreter = function.interpreter(); + auto& vm = function.vm(); fake_timestamp += 10; - (void)interpreter.call(function, {}, JS::Value(fake_timestamp)); - if (interpreter.exception()) - interpreter.vm().clear_exception(); + (void)vm.call(function, {}, JS::Value(fake_timestamp)); + if (vm.exception()) + vm.clear_exception(); GUI::DisplayLink::unregister_callback(link_id); }); |