demo · v138

Triage dashboard

The pain that motivated the new fields, made concrete. Without isTopLevel and visibilityState, every renderer crash looks the same to an SRE on call. With them, you can split the queue into “visible top tab” (page the user) and “hidden iframe” (open a Jira) automatically.

isTopLevel=true · visibility=visible
0
CRITICAL — user was watching the tab when it crashed. Page on-call.
isTopLevel=true · visibility=hidden
0
MEDIUM — top tab backgrounded. Triage Monday.
isTopLevel=false · visibility=visible
0
LOW — embedded widget on a visible host page. Note for the widget owner.
isTopLevel=false · visibility=hidden
0
NOISE — iframe on a backgrounded tab. Suppress alerts.

Awaiting reports. Click a burst button.

before vs after the new fields

POST /crash-report { "type": "crash", "url": "https://app.example/dashboard", "user_agent": "...", // pre-138: that’s it. No way to tell whether // this killed a tab the user was reading. "body": { "reason": "oom", "isTopLevel": true, // NEW in 138 "visibilityState": "visible" // NEW in 138 } }

The pain the WICG issues called out: ad-tech iframes producing 90–95% of the crash volume but only 5% of user-impacting incidents. With these two fields, the long tail of background-iframe OOMs can be routed straight to a low-priority bucket while real top-level renderer kills surface immediately.

see also