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

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