summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-09-27 20:31:13 +0200
committerAndreas Kling <kling@serenityos.org>2020-09-27 20:31:13 +0200
commit700cbc02ec01213bbcf85a9efc0636681adfed5f (patch)
treeed9a6aa359ca4237ab97749e51fa97691bf0cc84
parent340d6b0ef7e27b936074ca29a3191f7f67fda91b (diff)
downloadserenity-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.cpp17
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);
});