1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 04:38:11 +00:00

LibWebView+WebContent: Wait for dialog responses without blocking IPC

Currently, the WebContent process is completely blocked while waiting
for a response to a dialog request. This patch allows the IPC event loop
to continue executing while only blocking the HTML event loop.

This will allow other processes like WebDriver to continue to operate on
the WebContent process while a dialog is open.
This commit is contained in:
Timothy Flynn 2022-11-15 15:49:36 -05:00 committed by Linus Groh
parent 4b8729aea6
commit 364f44d7d8
11 changed files with 118 additions and 32 deletions

View file

@ -348,20 +348,22 @@ void OutOfProcessWebView::notify_server_did_request_image_context_menu(Badge<Web
void OutOfProcessWebView::notify_server_did_request_alert(Badge<WebContentClient>, String const& message)
{
GUI::MessageBox::show(window(), message, "Alert"sv, GUI::MessageBox::Type::Information);
client().async_alert_closed();
}
bool OutOfProcessWebView::notify_server_did_request_confirm(Badge<WebContentClient>, String const& message)
void OutOfProcessWebView::notify_server_did_request_confirm(Badge<WebContentClient>, String const& message)
{
auto confirm_result = GUI::MessageBox::show(window(), message, "Confirm"sv, GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::OKCancel);
return confirm_result == GUI::Dialog::ExecResult::OK;
client().async_confirm_closed(confirm_result == GUI::Dialog::ExecResult::OK);
}
String OutOfProcessWebView::notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_)
void OutOfProcessWebView::notify_server_did_request_prompt(Badge<WebContentClient>, String const& message, String const& default_)
{
String response { default_ };
if (GUI::InputBox::show(window(), response, message, "Prompt"sv) == GUI::InputBox::ExecResult::OK)
return response;
return {};
client().async_prompt_closed(move(response));
else
client().async_prompt_closed({});
}
void OutOfProcessWebView::notify_server_did_get_source(const AK::URL& url, String const& source)