Ready for Developer Testing: Popup Capability Delegation

346 views
Skip to first unread message

Chromestatus

unread,
Oct 12, 2026, 11:30:10 PMOct 12
to blin...@chromium.org, pwa...@chromium.org, dmu...@google.com
Contact emails
dmu...@google.com

Explainer
https://github.com/WICG/capability-delegation/blob/main/explainers/popup-delegation.md

Specification
No information provided

Design docs

https://github.com/WICG/capability-delegation/blob/main/explainers/popup-delegation.md

Summary
Allows Service Workers to delegate their transient popup capability (acquired from a user interaction like a notification click) to same-origin client windows. This enables client windows to open child (pop-up) windows, such as email previews or chat windows, without being blocked by the popup blocker. This allows developers to take advantage of frame state-sharing performance (e.g. sharing in-memory state via `window.opener`), instead of requiring a new top-level browsing context (which is what `Clients.openWindow` does).

Blink component
UI>Notifications

Web Feature ID
Missing feature

Search tags
capability delegation, popup, notification, pop-up

Goals for experimentation
None

Risks


Interoperability and Compatibility
Low compatibility risk: this is an opt-in extension ({delegate: 'popup'}) to ServiceWorkerClient.postMessage(). Existing callers are unaffected, and developers can gracefully fall back to clients.openWindow() inside a try/catch if the browser does not support popup capability delegation. Interoperability risk is that other browser engines have not yet implemented the Capability Delegation API or its Service Worker extension (https://github.com/WICG/capability-delegation/issues/42).

Gecko: No signal

WebKit: No signal

Web developers: Positive (https://github.com/WICG/capability-delegation/issues/42) Directly requested by web application partners (e.g., email and chat applications) that need certain notification clicks to open lightweight auxiliary/preview popup windows sharing state with an existing client window rather than forcing a full top-level navigation via clients.openWindow().

Other signals:

Ergonomics
None. Used in tandem with the Notifications API (notificationclick in Service Workers), Clients.matchAll(), WindowClient.focus(), and window.open() on the receiving Window. Calling await client.focus() is explicitly decoupled from the popup delegation token so focusing the client window first does not consume the popup capability.

Activation
Low. Feature detection and fallback are straightforward: if client.postMessage(msg, {delegate: 'popup'}) throws NotSupportedError (or if no WindowClient is open), the Service Worker can fall back to clients.openWindow(url).

Security
Popup capability delegation is restricted strictly to Service Workers with active transient window-interaction privileges (e.g., during a notificationclick event) posting to a same-origin WindowClient: - Delegating 'popup' from a Window (window.postMessage) is rejected with NotSupportedError and enforced in the browser process (RenderFrameProxyHost::RouteMessageEvent / ServiceWorkerContainerHostForClient::PostMessageToClient). - Delegating 'popup' without an active notification click throws NotAllowedError. - Both the Service Worker sender token (5s window) and the client window receiver token (1s window) are single-use and short-lived.

WebView application risks

Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications?

No information provided


Debuggability
Standard DevTools console and exception debugging apply when postMessage(..., {delegate: 'popup'}) throws NotSupportedError (unsupported context/target) or NotAllowedError (missing or already-consumed transient activation).

Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, ChromeOS, Android, and Android WebView)?
Yes
The Blink and //content capability delegation plumbing is enabled across all platforms, though opening auxiliary popup windows via window.open() from an existing client window is primarily targeted at desktop platforms where multi-window popups are used alongside persistent web clients.

Is this feature fully tested by web-platform-tests?
No
Frame-to-frame restriction is tested in WPT: https://wpt.fyi/results/html/capability-delegation/frame-capability-delegation-popup-blocked.tentative.html?label=experimental&label=master&aligned End-to-end Service Worker notificationclick popup delegation is tested in Chromium Blink web tests (http/tests/serviceworker/clients-capability-delegation.html) and unit/browser tests (WebFrameTest.CapabilityDelegation*, SecurityExploitBrowserTest) because WPT test_driver does not currently support simulating web notification clicks (testRunner.simulateWebNotificationClick).

DevTrial instructions
https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/capability-delegation-popup/README.md

Flag name on about://flags
enable-experimental-web-platform-features

Finch feature name
CapabilityDelegationPopup

Requires code in //chrome?
False

Tracking bug
https://issues.chromium.org/issues/542314185

Estimated milestones
DevTrial on desktop157
DevTrial on Android157


Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5091965583622144

Links to previous Intent discussions
Intent to Prototype: https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6a711a6f.b7546e61.256888.01d2.GAE%40google.com


This intent message was generated by Chrome Platform Status.
Reply all
Reply to author
Forward
0 new messages