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.

Reply via email to