Bug 318408
| Summary: | Digital Credentials: concurrent "wait" requests from separate processes can clobber WebPageProxy's single pending-handler slot under site isolation | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Marcos Caceres <marcosc> |
| Component: | WebDriver | Assignee: | Nobody <webkit-unassigned> |
| Status: | NEW | ||
| Severity: | Normal | CC: | bburg, webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari 26 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Bug Depends on: | |||
| Bug Blocks: | 268516 | ||
Marcos Caceres
Under site isolation, a cross-origin subframe runs in its own WebProcess with its own WebCore::Page and CredentialRequestCoordinator. The concurrent-request guard in CredentialRequestCoordinator::prepareCredentialRequests only serializes requests within a single process (it checks that coordinator's InteractionState). Two cross-origin iframes in different processes therefore each pass their own guard and both dispatch ShowDigitalCredentialsChooser to the same WebPageProxy.
WebPageProxy tracks a pending "wait"-parked request with a single slot (m_pendingDigitalCredentialsWaitContextID for the BiDi automation agent; internals().testingPendingDigitalCredentialHandler for WebKitTestRunner). When a second concurrent request arrives while one is parked, the slot is overwritten and the first request's parked completion handler is orphaned (never settled until session teardown). In debug builds this trips ASSERT(!m_pendingDigitalCredentialsWaitContextID) in WebPageProxy::showDigitalCredentialsChooser.
This affects only automated testing of the Digital Credentials "wait"/virtual-wallet path across site-isolated cross-origin iframes; same-process requests are correctly serialized.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/181198108>