@@ -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+
515526ErrorOr<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 }
0 commit comments