Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8a4ec0dfb94b3328822b688329c223e7a95683ac
https://github.com/WebKit/WebKit/commit/8a4ec0dfb94b3328822b688329c223e7a95683ac
Author: Marcos Caceres <[email protected]>
Date: 2026-07-30 (Thu, 30 Jul 2026)
Changed paths:
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
Log Message:
-----------
[iOS] Digital Credentials get() rejects with "requires transient user
activation" for a tap on a page with no touch event listeners
https://bugs.webkit.org/show_bug.cgi?id=319878
rdar://182780988
Reviewed by Pascoe and Abrar Rahman Protyasha.
WebPageProxy recorded the UI-process user-activation timestamp
(lastActivationTimestamp) only inside the send*Event functions. On iOS a
tap on a page with no touch event listeners takes the NotTracking early
return in handlePreventableTouchEvent and never reaches
sendPreventableTouchEvent, so the UI process never recorded the
activation. showDigitalCredentialsChooser, which independently verifies a
recent user activation, then rejected the request with NotAllowedError
even for a genuine tap.
Record the activation at the UI-process input receipt points
(handleMouseEvent, handleKeyboardEvent, handlePreventableTouchEvent,
handleUnpreventableTouchEvent) rather than in the send*Event functions.
Because the send*Event functions are re-entered when forwarding an event
to a site-isolated subframe, this also stops a single gesture from
re-stamping the timestamp and authorizing more than one chooser.
Speculative fix: WebKitTestRunner's synthesized taps do not exercise the
NotTracking gesture path that a real tap takes, so a deterministic layout
test was not possible. Verified manually in MobileSafari on iOS 27: get()
is rejected before the change and proceeds after.
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::sendMouseEvent):
(WebKit::WebPageProxy::recordUIProcessUserActivation):
(WebKit::WebPageProxy::handleMouseEvent):
(WebKit::WebPageProxy::sendKeyEvent):
(WebKit::WebPageProxy::handleKeyboardEvent):
(WebKit::WebPageProxy::sendPreventableTouchEvent):
(WebKit::WebPageProxy::handlePreventableTouchEvent):
(WebKit::WebPageProxy::sendUnpreventableTouchEvent):
(WebKit::WebPageProxy::handleUnpreventableTouchEvent):
* Source/WebKit/UIProcess/WebPageProxy.h:
Canonical link: https://commits.webkit.org/318229@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications