From dcab11f5e9acf76dc00421db5934d43e5c1cc823 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 6 Sep 2022 00:42:16 +0200 Subject: [PATCH] Ladybird: Fix build after LibWeb+LibJS GC changes --- Ladybird/ConsoleClient.cpp | 22 ++++++++++++---------- Ladybird/ConsoleClient.h | 4 +++- Ladybird/ConsoleGlobalObject.cpp | 8 ++------ Ladybird/ConsoleGlobalObject.h | 8 ++++---- Ladybird/WebView.cpp | 13 ++++++------- 5 files changed, 27 insertions(+), 28 deletions(-) diff --git a/Ladybird/ConsoleClient.cpp b/Ladybird/ConsoleClient.cpp index 071fa802a8..1a65859fc6 100644 --- a/Ladybird/ConsoleClient.cpp +++ b/Ladybird/ConsoleClient.cpp @@ -12,28 +12,27 @@ #include "WebView.h" #include #include -#include #include #include +#include namespace Ladybird { -ConsoleClient::ConsoleClient(JS::Console& console, WeakPtr interpreter, WebView& view) +ConsoleClient::ConsoleClient(JS::Console& console, JS::Realm& realm, WebView& view) : JS::ConsoleClient(console) , m_view(view) - , m_interpreter(interpreter) + , m_realm(realm) { - JS::DeferGC defer_gc(m_interpreter->heap()); + JS::DeferGC defer_gc(realm.heap()); - auto& vm = m_interpreter->vm(); - auto& realm = m_interpreter->realm(); - auto& window = static_cast(realm.global_object()); + auto& vm = realm.vm(); + auto& window = static_cast(realm.global_object()); - auto console_global_object = m_interpreter->heap().allocate_without_realm(realm, window); + auto console_global_object = realm.heap().allocate_without_realm(realm, window); // NOTE: We need to push an execution context here for NativeFunction::create() to succeed during global object initialization. // It gets removed immediately after creating the interpreter in Document::interpreter(). - auto& eso = verify_cast(*m_interpreter->realm().host_defined()); + auto& eso = verify_cast(*realm.host_defined()); vm.push_execution_context(eso.realm_execution_context()); console_global_object->initialize(realm); vm.pop_execution_context(); @@ -43,7 +42,10 @@ ConsoleClient::ConsoleClient(JS::Console& console, WeakPtr inte void ConsoleClient::handle_input(String const& js_source) { - auto& settings = verify_cast(*m_interpreter->realm().host_defined()); + if (!m_realm) + return; + + auto& settings = verify_cast(*m_realm->host_defined()); auto script = Web::HTML::ClassicScript::create("(console)", js_source, settings, settings.api_base_url()); // FIXME: Add parse error printouts back once ClassicScript can report parse errors. diff --git a/Ladybird/ConsoleClient.h b/Ladybird/ConsoleClient.h index 54d32a2173..df4d9d6191 100644 --- a/Ladybird/ConsoleClient.h +++ b/Ladybird/ConsoleClient.h @@ -23,7 +23,7 @@ namespace Ladybird { class ConsoleClient final : public JS::ConsoleClient { public: - ConsoleClient(JS::Console&, WeakPtr, WebView&); + ConsoleClient(JS::Console&, JS::Realm&, WebView&); void handle_input(String const& js_source); void send_messages(i32 start_index); @@ -54,6 +54,8 @@ private: String data; }; Vector m_message_log; + + WeakPtr m_realm; }; } diff --git a/Ladybird/ConsoleGlobalObject.cpp b/Ladybird/ConsoleGlobalObject.cpp index cc7222af40..94d484fc14 100644 --- a/Ladybird/ConsoleGlobalObject.cpp +++ b/Ladybird/ConsoleGlobalObject.cpp @@ -7,15 +7,12 @@ #include "ConsoleGlobalObject.h" #include -#include -#include -#include #include #include namespace Ladybird { -ConsoleGlobalObject::ConsoleGlobalObject(JS::Realm& realm, Web::Bindings::WindowObject& parent_object) +ConsoleGlobalObject::ConsoleGlobalObject(JS::Realm& realm, Web::HTML::Window& parent_object) : JS::GlobalObject(realm) , m_window_object(&parent_object) { @@ -98,7 +95,6 @@ JS::ThrowCompletionOr> ConsoleGlobalObject::internal JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::inspected_node_getter) { - auto& realm = *vm.current_realm(); auto* this_object = TRY(vm.this_value().to_object(vm)); if (!is(this_object)) @@ -110,7 +106,7 @@ JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::inspected_node_getter) if (!inspected_node) return JS::js_undefined(); - return Web::Bindings::wrap(realm, *inspected_node); + return &*inspected_node; } } diff --git a/Ladybird/ConsoleGlobalObject.h b/Ladybird/ConsoleGlobalObject.h index c3fe6fc54f..85923d6a4c 100644 --- a/Ladybird/ConsoleGlobalObject.h +++ b/Ladybird/ConsoleGlobalObject.h @@ -13,8 +13,8 @@ #include #include -namespace Web::Bindings { -class WindowObject; +namespace Web::HTML { +class Window; } namespace Ladybird { @@ -23,7 +23,7 @@ class ConsoleGlobalObject final : public JS::GlobalObject { JS_OBJECT(ConsoleGlobalObject, JS::GlobalObject); public: - ConsoleGlobalObject(JS::Realm&, Web::Bindings::WindowObject&); + ConsoleGlobalObject(JS::Realm&, Web::HTML::Window&); virtual void initialize(JS::Realm&) override; virtual ~ConsoleGlobalObject() override = default; @@ -45,7 +45,7 @@ private: // Because $0 is not a nice C++ function name JS_DECLARE_NATIVE_FUNCTION(inspected_node_getter); - Web::Bindings::WindowObject* m_window_object; + Web::HTML::Window* m_window_object; }; } diff --git a/Ladybird/WebView.cpp b/Ladybird/WebView.cpp index d9b3593d4f..61b1c90392 100644 --- a/Ladybird/WebView.cpp +++ b/Ladybird/WebView.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -182,14 +181,14 @@ public: void initialize_js_console() { auto* document = page().top_level_browsing_context().active_document(); - auto interpreter = document->interpreter().make_weak_ptr(); - if (m_interpreter.ptr() == interpreter.ptr()) + auto realm = document->realm().make_weak_ptr(); + if (m_realm && m_realm.ptr() == realm.ptr()) return; - m_interpreter = interpreter; + m_realm = realm; - auto& console_object = *interpreter->realm().intrinsics().console_object(); - m_console_client = make(console_object.console(), interpreter, m_view); + auto& console_object = *document->realm().intrinsics().console_object(); + m_console_client = make(console_object.console(), *realm, m_view); console_object.console().set_client(*m_console_client.ptr()); } @@ -336,7 +335,7 @@ public: Browser::CookieJar m_cookie_jar; OwnPtr m_console_client; - WeakPtr m_interpreter; + WeakPtr m_realm; RefPtr m_palette_impl; Gfx::IntRect m_viewport_rect { 0, 0, 800, 600 }; Web::CSS::PreferredColorScheme m_preferred_color_scheme { Web::CSS::PreferredColorScheme::Auto };