Skip to content

Commit 059da51

Browse files
committed
AX: VoiceOver hangs in Safari when selecting "Sign in with Apple" on kickstarter.com and elsewhere
https://bugs.webkit.org/show_bug.cgi?id=250867 rdar://problem/104449619 Reviewed by Chris Fleizach. "Sign in with Apple" on kickstarter.com triggers sync IPC through WebChromeClient::createWindow. Depending on how the client handles this request, this IPC may not return for an arbitrary amount of time. In this case, Safari opens a native dialog, and the sync IPC does not return until the dialog is closed. This causes web content to become unresponsive to VoiceOver because the main-thread is hung. This patch fixes this by using IPC::SendSyncOption::InformPlatformProcessWillSuspend to tell VoiceOver we will become unresponsive until the IPC completes. I couldn't find a good way to test this in an automated fashion. * Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::createWindow): Canonical link: https://commits.webkit.org/259147@main
1 parent 8984da7 commit 059da51

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ Page* WebChromeClient::createWindow(Frame& frame, const WindowFeatures& windowFe
332332

333333
WebFrame* webFrame = WebFrame::fromCoreFrame(frame);
334334

335-
auto sendResult = webProcess.parentProcessConnection()->sendSync(Messages::WebPageProxy::CreateNewPage(webFrame->info(), webFrame->page()->webPageProxyIdentifier(), navigationAction.resourceRequest(), windowFeatures, navigationActionData), m_page.identifier(), IPC::Timeout::infinity(), IPC::SendSyncOption::MaintainOrderingWithAsyncMessages);
335+
auto sendResult = webProcess.parentProcessConnection()->sendSync(Messages::WebPageProxy::CreateNewPage(webFrame->info(), webFrame->page()->webPageProxyIdentifier(), navigationAction.resourceRequest(), windowFeatures, navigationActionData), m_page.identifier(), IPC::Timeout::infinity(), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages, IPC::SendSyncOption::InformPlatformProcessWillSuspend });
336336
if (!sendResult)
337337
return nullptr;
338338

0 commit comments

Comments
 (0)