Contact emails [email protected]
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 (eg 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 (eg, 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 (eg, 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 desktop 157 DevTrial on Android 157 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. -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6acda5ad.689201d9.70dc.0003.GAE%40google.com.
