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:
parent
56b2ae5ac0
commit
40a70461a0
60 changed files with 261 additions and 235 deletions
|
@ -34,6 +34,6 @@ protected:
|
|||
|
||||
namespace Web::Bindings {
|
||||
|
||||
HTMLOptionsCollectionWrapper* wrap(JS::GlobalObject&, HTML::HTMLOptionsCollection&);
|
||||
HTMLOptionsCollectionWrapper* wrap(JS::Realm&, HTML::HTMLOptionsCollection&);
|
||||
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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&);
|
||||
|
|
|
@ -49,6 +49,6 @@ private:
|
|||
|
||||
namespace Web::Bindings {
|
||||
|
||||
StorageWrapper* wrap(JS::GlobalObject&, HTML::Storage&);
|
||||
StorageWrapper* wrap(JS::Realm&, HTML::Storage&);
|
||||
|
||||
}
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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&);
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue