1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:07:35 +00:00

LibWeb: Replace GlobalObject with Realm in wrapper functions

Similar to create() in LibJS, wrap() et al. are on a low enough level to
warrant passing a Realm directly instead of relying on the current realm
from the VM, as a wrapper may need to be allocated while no JS is being
executed.
This commit is contained in:
Linus Groh 2022-08-22 18:31:08 +01:00
parent 56b2ae5ac0
commit 40a70461a0
60 changed files with 261 additions and 235 deletions

View file

@ -34,6 +34,6 @@ protected:
namespace Web::Bindings {
HTMLOptionsCollectionWrapper* wrap(JS::GlobalObject&, HTML::HTMLOptionsCollection&);
HTMLOptionsCollectionWrapper* wrap(JS::Realm&, HTML::HTMLOptionsCollection&);
}

View file

@ -84,9 +84,9 @@ void MessagePort::post_message(JS::Value message)
}));
}
JS::Object* MessagePort::create_wrapper(JS::GlobalObject& global_object)
JS::Object* MessagePort::create_wrapper(JS::Realm& realm)
{
return wrap(global_object, *this);
return wrap(realm, *this);
}
void MessagePort::start()

View file

@ -40,7 +40,7 @@ public:
// ^EventTarget
virtual void ref_event_target() override { ref(); }
virtual void unref_event_target() override { unref(); }
virtual JS::Object* create_wrapper(JS::GlobalObject&) override;
virtual JS::Object* create_wrapper(JS::Realm&) override;
// https://html.spec.whatwg.org/multipage/web-messaging.html#entangle
void entangle_with(MessagePort&);

View file

@ -49,6 +49,6 @@ private:
namespace Web::Bindings {
StorageWrapper* wrap(JS::GlobalObject&, HTML::Storage&);
StorageWrapper* wrap(JS::Realm&, HTML::Storage&);
}

View file

@ -284,9 +284,9 @@ bool Window::dispatch_event(NonnullRefPtr<DOM::Event> event)
return DOM::EventDispatcher::dispatch(*this, event, true);
}
JS::Object* Window::create_wrapper(JS::GlobalObject& global_object)
JS::Object* Window::create_wrapper(JS::Realm& realm)
{
return &global_object;
return &realm.global_object();
}
// https://www.w3.org/TR/cssom-view-1/#dom-window-innerwidth
@ -653,8 +653,8 @@ u32 Window::request_idle_callback(NonnullOwnPtr<Bindings::CallbackType> callback
auto handle = window.m_idle_callback_identifier;
// 4. Push callback to the end of window's list of idle request callbacks, associated with handle.
auto handler = [callback = move(callback)](NonnullRefPtr<RequestIdleCallback::IdleDeadline> deadline) -> JS::Completion {
auto& global_object = callback->callback.cell()->global_object();
auto* wrapped_deadline = Bindings::wrap(global_object, *deadline);
auto& realm = callback->callback.cell()->shape().realm();
auto* wrapped_deadline = Bindings::wrap(realm, *deadline);
return Bindings::IDL::invoke_callback(const_cast<Bindings::CallbackType&>(*callback), {}, JS::Value(wrapped_deadline));
};
window.m_idle_request_callbacks.append(adopt_ref(*new IdleCallback(move(handler), handle)));

View file

@ -44,7 +44,7 @@ public:
virtual void ref_event_target() override { RefCounted::ref(); }
virtual void unref_event_target() override { RefCounted::unref(); }
virtual bool dispatch_event(NonnullRefPtr<DOM::Event>) override;
virtual JS::Object* create_wrapper(JS::GlobalObject&) override;
virtual JS::Object* create_wrapper(JS::Realm&) override;
Page* page();
Page const* page() const;

View file

@ -314,9 +314,9 @@ void Worker::post_message(JS::Value message, JS::Value)
target_port->post_message(message);
}
JS::Object* Worker::create_wrapper(JS::GlobalObject& global_object)
JS::Object* Worker::create_wrapper(JS::Realm& realm)
{
return wrap(global_object, *this);
return wrap(realm, *this);
}
#undef __ENUMERATE

View file

@ -58,7 +58,7 @@ public:
// ^EventTarget
virtual void ref_event_target() override { ref(); }
virtual void unref_event_target() override { unref(); }
virtual JS::Object* create_wrapper(JS::GlobalObject&) override;
virtual JS::Object* create_wrapper(JS::Realm&) override;
MessagePort* implicit_message_port() { return m_implicit_port; }
RefPtr<MessagePort> outside_message_port() { return m_outside_port; }
@ -102,6 +102,6 @@ private:
namespace Web::Bindings {
WorkerWrapper* wrap(JS::GlobalObject&, HTML::Worker&);
WorkerWrapper* wrap(JS::Realm&, HTML::Worker&);
}

View file

@ -54,9 +54,9 @@ DOM::ExceptionOr<void> WorkerGlobalScope::import_scripts(Vector<String> urls)
return {};
}
JS::Object* WorkerGlobalScope::create_wrapper(JS::GlobalObject& global_object)
JS::Object* WorkerGlobalScope::create_wrapper(JS::Realm& realm)
{
return wrap(global_object, *this);
return wrap(realm, *this);
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerglobalscope-location

View file

@ -44,7 +44,7 @@ public:
// ^EventTarget
virtual void ref_event_target() override { ref(); }
virtual void unref_event_target() override { unref(); }
virtual JS::Object* create_wrapper(JS::GlobalObject&) override;
virtual JS::Object* create_wrapper(JS::Realm&) override;
// Following methods are from the WorkerGlobalScope IDL definition
// https://html.spec.whatwg.org/multipage/workers.html#the-workerglobalscope-common-interface