v157 · capabilities · the real, shipping gate
Transient activation playground
Everything on this page is real in your browser right now — it is the activation-gated window.open() behaviour that popup capability delegation extends. Each experiment calls the genuine API and logs the genuine return value: a WindowProxy when the popup opened, null when the popup blocker refused it.
Popup settings matter: if you have told this browser to block (or always allow) popups for this site, you will see that choice reflected here — which is itself the honest behaviour. The expected defaults: open-on-click succeeds, delayed and repeated opens are blocked.
navigator.userActivation, live
- userActivation.isActive (transient)
- …
- userActivation.hasBeenActive (sticky)
- …
- open popups this page created
- 0
The transient flag flips on with each real interaction (click, keypress) and expires after a few seconds or when an activation-consuming API — like a successful window.open() — spends it. The delegated "popup" token is a second, parallel way to pass this gate.
Experiments (each calls window.open for real)
No experiments run yet.
what this proves
The popup blocker's rule is: permit the open if the calling window has transient user activation — then consume it. Experiment 1 passes the gate; experiment 2 shows the ~5-second expiry; experiment 3 shows consumption (one activation, one popup). Popup capability delegation adds exactly one alternative to that rule: …or an unexpired delegated
, consumed the same way — which is why the explainer can promise a strict 1-notification-click-1-popup invariant. See it attempted for real in the notification lab."popup" timestamp is present