demo · v142
Activation State Debugger
Watch navigator.userActivation.isActive and hasBeenActive in real time. Simulate same-origin renderer-initiated navigations via history.pushState() and see whether sticky activation survives — exactly the Chrome 142 guarantee.
isActive (transient)
—
true for ~5s after click
hasBeenActive (sticky)
—
persists across same-origin navs
Current path: /activation-state-debugger/
Timeline
transient active window (~5s)
sticky (hasBeenActive)
Event log
Test Scenarios
Scenario 1
Click → navigate → check sticky
Scenario 2
Wait 6s → navigate → check sticky persists even after transient expires
Scenario 3
Cross-origin navigation warning
Open popup after navigation
Tries window.open() — requires sticky activation (hasBeenActive) to be true after a simulated navigation.
—
what changed in Chrome 142
// Same-origin renderer-initiated navigations now preserve
// navigator.userActivation.hasBeenActive = true
//
// Before 142: hasBeenActive reset on every navigation
// After 142: hasBeenActive persists across same-origin
// renderer-initiated navigations (pushState,
// replaceState, same-origin link clicks)
// Check it:
window.addEventListener("popstate", () => {
console.log(navigator.userActivation.hasBeenActive);
// true in Chrome 142+ if user clicked before navigating
});
see also
- Sticky activation — feature index
- Sticky Activation
- Post-Nav Popup
- MPA Wizard
- Spec PR 11454