mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 02:54:54 +03:00
Browser+LibWebView: Run with the JavaScript bytecode VM by default
The AST interpreter is still available behind a new `--ast` flag.
This commit is contained in:
parent
c3e5487f00
commit
a3e97ea153
Notes:
sideshowbarker
2024-07-17 03:05:16 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/a3e97ea153 Pull-request: https://github.com/SerenityOS/serenity/pull/20195
@ -57,9 +57,10 @@ static DeprecatedString search_engines_file_path()
|
|||||||
return builder.to_deprecated_string();
|
return builder.to_deprecated_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
BrowserWindow::BrowserWindow(CookieJar& cookie_jar, URL url)
|
BrowserWindow::BrowserWindow(CookieJar& cookie_jar, URL url, WebView::UseJavaScriptBytecode use_javascript_bytecode)
|
||||||
: m_cookie_jar(cookie_jar)
|
: m_cookie_jar(cookie_jar)
|
||||||
, m_window_actions(*this)
|
, m_window_actions(*this)
|
||||||
|
, m_use_javascript_bytecode(use_javascript_bytecode)
|
||||||
{
|
{
|
||||||
auto app_icon = GUI::Icon::default_icon("app-browser"sv);
|
auto app_icon = GUI::Icon::default_icon("app-browser"sv);
|
||||||
m_bookmarks_bar = Browser::BookmarksBarWidget::construct(Browser::bookmarks_file_path(), true);
|
m_bookmarks_bar = Browser::BookmarksBarWidget::construct(Browser::bookmarks_file_path(), true);
|
||||||
@ -563,7 +564,7 @@ void BrowserWindow::set_window_title_for_tab(Tab const& tab)
|
|||||||
|
|
||||||
Tab& BrowserWindow::create_new_tab(URL url, Web::HTML::ActivateTab activate)
|
Tab& BrowserWindow::create_new_tab(URL url, Web::HTML::ActivateTab activate)
|
||||||
{
|
{
|
||||||
auto& new_tab = m_tab_widget->add_tab<Browser::Tab>("New tab"_short_string, *this);
|
auto& new_tab = m_tab_widget->add_tab<Browser::Tab>("New tab"_short_string, *this, m_use_javascript_bytecode);
|
||||||
|
|
||||||
m_tab_widget->set_bar_visible(!is_fullscreen() && m_tab_widget->children().size() > 1);
|
m_tab_widget->set_bar_visible(!is_fullscreen() && m_tab_widget->children().size() > 1);
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ public:
|
|||||||
void broadcast_window_size(Gfx::IntSize);
|
void broadcast_window_size(Gfx::IntSize);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit BrowserWindow(CookieJar&, URL);
|
BrowserWindow(CookieJar&, URL, WebView::UseJavaScriptBytecode);
|
||||||
|
|
||||||
void build_menus();
|
void build_menus();
|
||||||
ErrorOr<void> load_search_engines(GUI::Menu& settings_menu);
|
ErrorOr<void> load_search_engines(GUI::Menu& settings_menu);
|
||||||
@ -86,6 +86,8 @@ private:
|
|||||||
RefPtr<GUI::Action> m_disable_user_agent_spoofing;
|
RefPtr<GUI::Action> m_disable_user_agent_spoofing;
|
||||||
RefPtr<GUI::Action> m_disable_search_engine_action;
|
RefPtr<GUI::Action> m_disable_search_engine_action;
|
||||||
RefPtr<GUI::Action> m_change_homepage_action;
|
RefPtr<GUI::Action> m_change_homepage_action;
|
||||||
|
|
||||||
|
WebView::UseJavaScriptBytecode m_use_javascript_bytecode {};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ void Tab::update_status(Optional<String> text_override, i32 count_waiting)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Tab::Tab(BrowserWindow& window)
|
Tab::Tab(BrowserWindow& window, WebView::UseJavaScriptBytecode use_javascript_bytecode)
|
||||||
{
|
{
|
||||||
load_from_gml(tab_gml).release_value_but_fixme_should_propagate_errors();
|
load_from_gml(tab_gml).release_value_but_fixme_should_propagate_errors();
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ Tab::Tab(BrowserWindow& window)
|
|||||||
|
|
||||||
auto& webview_container = *find_descendant_of_type_named<GUI::Widget>("webview_container");
|
auto& webview_container = *find_descendant_of_type_named<GUI::Widget>("webview_container");
|
||||||
|
|
||||||
m_web_content_view = webview_container.add<WebView::OutOfProcessWebView>();
|
m_web_content_view = webview_container.add<WebView::OutOfProcessWebView>(use_javascript_bytecode);
|
||||||
|
|
||||||
auto preferred_color_scheme = Web::CSS::preferred_color_scheme_from_string(Config::read_string("Browser"sv, "Preferences"sv, "ColorScheme"sv, Browser::default_color_scheme));
|
auto preferred_color_scheme = Web::CSS::preferred_color_scheme_from_string(Config::read_string("Browser"sv, "Preferences"sv, "ColorScheme"sv, Browser::default_color_scheme));
|
||||||
m_web_content_view->set_preferred_color_scheme(preferred_color_scheme);
|
m_web_content_view->set_preferred_color_scheme(preferred_color_scheme);
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
#include <LibHTTP/Job.h>
|
#include <LibHTTP/Job.h>
|
||||||
#include <LibWeb/Forward.h>
|
#include <LibWeb/Forward.h>
|
||||||
|
#include <LibWebView/ViewImplementation.h>
|
||||||
|
|
||||||
namespace WebView {
|
namespace WebView {
|
||||||
class OutOfProcessWebView;
|
class OutOfProcessWebView;
|
||||||
@ -98,7 +99,7 @@ public:
|
|||||||
WebView::OutOfProcessWebView& view() { return *m_web_content_view; }
|
WebView::OutOfProcessWebView& view() { return *m_web_content_view; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Tab(BrowserWindow&);
|
Tab(BrowserWindow&, WebView::UseJavaScriptBytecode);
|
||||||
|
|
||||||
virtual void show_event(GUI::ShowEvent&) override;
|
virtual void show_event(GUI::ShowEvent&) override;
|
||||||
virtual void hide_event(GUI::HideEvent&) override;
|
virtual void hide_event(GUI::HideEvent&) override;
|
||||||
|
@ -96,10 +96,12 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||||||
TRY(Core::System::pledge("stdio recvfd sendfd unix fattr cpath rpath wpath proc exec"));
|
TRY(Core::System::pledge("stdio recvfd sendfd unix fattr cpath rpath wpath proc exec"));
|
||||||
|
|
||||||
Vector<DeprecatedString> specified_urls;
|
Vector<DeprecatedString> specified_urls;
|
||||||
|
bool use_ast_interpreter = false;
|
||||||
|
|
||||||
Core::ArgsParser args_parser;
|
Core::ArgsParser args_parser;
|
||||||
args_parser.add_positional_argument(specified_urls, "URLs to open", "url", Core::ArgsParser::Required::No);
|
args_parser.add_positional_argument(specified_urls, "URLs to open", "url", Core::ArgsParser::Required::No);
|
||||||
args_parser.add_option(Browser::g_webdriver_content_ipc_path, "Path to WebDriver IPC for WebContent", "webdriver-content-path", 0, "path");
|
args_parser.add_option(Browser::g_webdriver_content_ipc_path, "Path to WebDriver IPC for WebContent", "webdriver-content-path", 0, "path");
|
||||||
|
args_parser.add_option(use_ast_interpreter, "Enable JavaScript AST interpreter (deprecated)", "ast", 0);
|
||||||
|
|
||||||
args_parser.parse(arguments);
|
args_parser.parse(arguments);
|
||||||
|
|
||||||
@ -173,7 +175,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||||||
first_url = TRY(url_from_argument_string(specified_urls.first()));
|
first_url = TRY(url_from_argument_string(specified_urls.first()));
|
||||||
|
|
||||||
auto cookie_jar = TRY(Browser::CookieJar::create(*database));
|
auto cookie_jar = TRY(Browser::CookieJar::create(*database));
|
||||||
auto window = Browser::BrowserWindow::construct(cookie_jar, first_url);
|
auto window = Browser::BrowserWindow::construct(cookie_jar, first_url, use_ast_interpreter ? WebView::UseJavaScriptBytecode::No : WebView::UseJavaScriptBytecode::Yes);
|
||||||
|
|
||||||
auto content_filters_watcher = TRY(Core::FileWatcher::create());
|
auto content_filters_watcher = TRY(Core::FileWatcher::create());
|
||||||
content_filters_watcher->on_change = [&](Core::FileWatcherEvent const&) {
|
content_filters_watcher->on_change = [&](Core::FileWatcherEvent const&) {
|
||||||
|
@ -47,6 +47,8 @@ void OutOfProcessWebView::create_client(EnableCallgrindProfiling)
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
client().async_set_use_javascript_bytecode(use_javascript_bytecode() == UseJavaScriptBytecode::Yes);
|
||||||
|
|
||||||
m_client_state.client_handle = Web::Crypto::generate_random_uuid().release_value_but_fixme_should_propagate_errors();
|
m_client_state.client_handle = Web::Crypto::generate_random_uuid().release_value_but_fixme_should_propagate_errors();
|
||||||
client().async_set_window_handle(m_client_state.client_handle);
|
client().async_set_window_handle(m_client_state.client_handle);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
#include <LibGfx/Font/FontDatabase.h>
|
#include <LibGfx/Font/FontDatabase.h>
|
||||||
#include <LibGfx/SystemTheme.h>
|
#include <LibGfx/SystemTheme.h>
|
||||||
|
#include <LibJS/Bytecode/Interpreter.h>
|
||||||
#include <LibJS/Console.h>
|
#include <LibJS/Console.h>
|
||||||
#include <LibJS/Heap/Heap.h>
|
#include <LibJS/Heap/Heap.h>
|
||||||
#include <LibJS/Runtime/ConsoleObject.h>
|
#include <LibJS/Runtime/ConsoleObject.h>
|
||||||
@ -64,6 +65,11 @@ Web::Page const& ConnectionFromClient::page() const
|
|||||||
return m_page_host->page();
|
return m_page_host->page();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConnectionFromClient::set_use_javascript_bytecode(bool use_bytecode)
|
||||||
|
{
|
||||||
|
JS::Bytecode::Interpreter::set_enabled(use_bytecode);
|
||||||
|
}
|
||||||
|
|
||||||
Messages::WebContentServer::GetWindowHandleResponse ConnectionFromClient::get_window_handle()
|
Messages::WebContentServer::GetWindowHandleResponse ConnectionFromClient::get_window_handle()
|
||||||
{
|
{
|
||||||
return m_page_host->page().top_level_browsing_context().window_handle();
|
return m_page_host->page().top_level_browsing_context().window_handle();
|
||||||
|
@ -48,6 +48,7 @@ private:
|
|||||||
Web::Page& page();
|
Web::Page& page();
|
||||||
Web::Page const& page() const;
|
Web::Page const& page() const;
|
||||||
|
|
||||||
|
virtual void set_use_javascript_bytecode(bool) override;
|
||||||
virtual Messages::WebContentServer::GetWindowHandleResponse get_window_handle() override;
|
virtual Messages::WebContentServer::GetWindowHandleResponse get_window_handle() override;
|
||||||
virtual void set_window_handle(String const& handle) override;
|
virtual void set_window_handle(String const& handle) override;
|
||||||
virtual void connect_to_webdriver(DeprecatedString const& webdriver_ipc_path) override;
|
virtual void connect_to_webdriver(DeprecatedString const& webdriver_ipc_path) override;
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
|
|
||||||
endpoint WebContentServer
|
endpoint WebContentServer
|
||||||
{
|
{
|
||||||
|
// NOTE: This is only used on SerenityOS when attaching to a WebContent process served by SystemServer.
|
||||||
|
set_use_javascript_bytecode(bool use_javascript_bytecode) =|
|
||||||
|
|
||||||
get_window_handle() => (String handle)
|
get_window_handle() => (String handle)
|
||||||
set_window_handle(String handle) =|
|
set_window_handle(String handle) =|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user