Skip to content

Commit e3cdead

Browse files
tcl3trflynn89
authored andcommitted
LibWeb: Add --headless=manual option to run until explicit exit
This headless mode will stay open until it is closed by manually or by calling `window.close()`.
1 parent 57c925c commit e3cdead

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Libraries/LibWebView/Application.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ ErrorOr<void> Application::initialize(Main::Arguments const& arguments)
133133

134134
args_parser.add_option(Core::ArgsParser::Option {
135135
.argument_mode = Core::ArgsParser::OptionArgumentMode::Optional,
136-
.help_string = "Run Ladybird without a browser window. Mode may be 'screenshot' (default), 'layout-tree', or 'text'.",
136+
.help_string = "Run Ladybird without a browser window. Mode may be 'screenshot' (default), 'layout-tree', 'text', or 'manual'.",
137137
.long_name = "headless",
138138
.value_name = "mode",
139139
.accept_value = [&](StringView value) {
@@ -146,6 +146,8 @@ ErrorOr<void> Application::initialize(Main::Arguments const& arguments)
146146
headless_mode = HeadlessMode::LayoutTree;
147147
else if (value.equals_ignoring_ascii_case("text"sv))
148148
headless_mode = HeadlessMode::Text;
149+
else if (value.equals_ignoring_ascii_case("manual"sv))
150+
headless_mode = HeadlessMode::Manual;
149151

150152
return headless_mode.has_value();
151153
},
@@ -512,6 +514,15 @@ static void load_page_for_info_and_exit(Core::EventLoop& event_loop, HeadlessWeb
512514
view.load(url);
513515
}
514516

517+
static void load_page_and_exit_on_close(Core::EventLoop& event_loop, HeadlessWebView& view, URL::URL const& url)
518+
{
519+
view.on_close = [&event_loop]() {
520+
event_loop.quit(0);
521+
};
522+
523+
view.load(url);
524+
}
525+
515526
ErrorOr<int> Application::execute()
516527
{
517528
OwnPtr<HeadlessWebView> view;
@@ -537,6 +548,9 @@ ErrorOr<int> Application::execute()
537548
case HeadlessMode::Text:
538549
load_page_for_info_and_exit(*m_event_loop, *view, m_browser_options.urls.first(), WebView::PageInfoType::Text);
539550
break;
551+
case HeadlessMode::Manual:
552+
load_page_and_exit_on_close(*m_event_loop, *view, m_browser_options.urls.first());
553+
break;
540554
case HeadlessMode::Test:
541555
VERIFY_NOT_REACHED();
542556
}

Libraries/LibWebView/Options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ enum class HeadlessMode {
1919
Screenshot,
2020
LayoutTree,
2121
Text,
22+
Manual,
2223
Test,
2324
};
2425

0 commit comments

Comments
 (0)