Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fad8a7409a4ca19ee6b14b6d324184d37b694ae8
      
https://github.com/WebKit/WebKit/commit/fad8a7409a4ca19ee6b14b6d324184d37b694ae8
  Author: Ben Nham <[email protected]>
  Date:   2025-02-12 (Wed, 12 Feb 2025)

  Changed paths:
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebProcessActivityState.cpp
    M Source/WebKit/UIProcess/WebProcessActivityState.h
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Tools/TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm

  Log Message:
  -----------
  Prevent frontmost tab from suspending if it has vended a remote accessibility 
element
https://bugs.webkit.org/show_bug.cgi?id=287530
rdar://142642077

Reviewed by Per Arne Vollan.

We are seeing some hangs in accessibility clients that are trying to capture a 
snapshot of the
accessibility hierarchy of a Safari window. This occurs if the window is 
occluded or hidden, which
makes the frontmost tab's web content eligible for suspension. When the 
WKWebView associated with
the frontmost tab is backed by a suspended WebContent process, the IPC to 
acquire the AX hierarchy
in the suspended WebContent process hangs forever.

To work around this, if a client ever asks for the the AX children of a 
WKWebView, we acquire a
background activity to prevent suspension of the associated page as long as 
it's in a window. This
fixes the most common case of hangs in where a client tries to recursively 
snapshot the AX hierarchy
of an occluded or hidden Safari window.

* Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivateForTesting.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView _hasAccessibilityActivityForTesting]):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::takeAccessibilityActivityWhenInWindow):
(WebKit::WebPageProxy::hasAccessibilityActivityForTesting):
(WebKit::WebPageProxy::viewDidLeaveWindow):
(WebKit::WebPageProxy::viewDidEnterWindow):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessActivityState.cpp:
(WebKit::WebProcessActivityState::takeAccessibilityActivityWhenInWindow):
(WebKit::WebProcessActivityState::takeAccessibilityActivity):
(WebKit::WebProcessActivityState::hasAccessibilityActivityForTesting const):
(WebKit::WebProcessActivityState::viewDidEnterWindow):
(WebKit::WebProcessActivityState::viewDidLeaveWindow):
* Source/WebKit/UIProcess/WebProcessActivityState.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::accessibilityAttributeValue):
* Tools/TestWebKitAPI/Tests/WebKit/EnableAccessibility.mm:
(TEST(WebKit, AccessibilityChildrenPreventsProcessSuspensionOnFrontmostTab)):

Canonical link: https://commits.webkit.org/290271@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to