From 74c8490acd9fa1c0687804f30e2f1ec336442c4d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 30 Jan 2021 23:15:40 +0100 Subject: [PATCH] LibWeb: Don't try to create GUI::TextBox inside multi-process web views This is a workaround until we can implement a proper in terms of LibWeb primitives. This makes google.com not crash in multi-process mode (but there is no search box.) --- Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp | 4 ++++ Userland/Libraries/LibWeb/InProcessWebView.h | 1 + Userland/Libraries/LibWeb/Page/Page.h | 1 + Userland/Services/WebContent/PageHost.h | 1 + 4 files changed, 7 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp index c5654c3530..2f0d16168d 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -81,6 +81,10 @@ RefPtr HTMLInputElement::create_layout_node() if (type() == "checkbox") return adopt(*new Layout::CheckBox(document(), *this, move(style))); + // FIXME: Implement in terms of LibWeb primitives. + if (page.client().is_multi_process()) + return nullptr; + auto& text_box = page_view.add(); text_box.set_text(value()); text_box.on_change = [this] { diff --git a/Userland/Libraries/LibWeb/InProcessWebView.h b/Userland/Libraries/LibWeb/InProcessWebView.h index 084c3a01c4..cad88401cd 100644 --- a/Userland/Libraries/LibWeb/InProcessWebView.h +++ b/Userland/Libraries/LibWeb/InProcessWebView.h @@ -85,6 +85,7 @@ private: // ^Web::PageClient virtual Gfx::Palette palette() const override { return GUI::ScrollableWidget::palette(); } + virtual bool is_multi_process() const override { return false; } virtual void page_did_change_title(const String&) override; virtual void page_did_set_document_in_main_frame(DOM::Document*) override; virtual void page_did_start_loading(const URL&) override; diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index 5d7325d283..375bc3c75f 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -81,6 +81,7 @@ private: class PageClient { public: + virtual bool is_multi_process() const = 0; virtual Gfx::Palette palette() const = 0; virtual void page_did_set_document_in_main_frame(DOM::Document*) { } virtual void page_did_change_title(const String&) { } diff --git a/Userland/Services/WebContent/PageHost.h b/Userland/Services/WebContent/PageHost.h index 0ee9e393d9..6983421840 100644 --- a/Userland/Services/WebContent/PageHost.h +++ b/Userland/Services/WebContent/PageHost.h @@ -50,6 +50,7 @@ public: private: // ^PageClient + virtual bool is_multi_process() const override { return true; } virtual Gfx::Palette palette() const override; virtual void page_did_invalidate(const Gfx::IntRect&) override; virtual void page_did_change_selection() override;