Security

(public)

User Story

Now that bug 1034726 has landed, AsyncShutdownTimeout crashes may contain JavaScript stacks that will generally be much more useful than the native stack. Among other applications, they should often let us determine at a glance whether the offending code is an add-on. However, reading the stacks from the JSON will be quite annoying. Also, the AsyncShutdownTimeout metadata contains optional state information, which is critical for finding out in which state the component was during the crash.
It would be great if we could display both the JS stacks and the state information, if available, on the main page, before the native stacks.
The data structure contained in the AsyncShutdownTimeout payload looks like:
{
phase: string,
conditions: array of [{
name: string, // <=== Display this
stack: optional string, // <== And that
state: either arbitrary JSON or the string "(none)" <== And that
// ...
}]
}
e.g.
{
phase: "profile-before-change",
conditions: [
{
name: "OS.File flushing its data during profileBeforeChange",
stack: "chrome://resources/osfile/osfile_async_front.jsm:104\n....",
state: {shutdown: false, started: true, ...},
// ...
},
{
name: "Sqlite.jsm flushing its data during profileBeforeChange",
stack: "...",
state: "(none)",
// ...
]
}
I would like to see something along the lines of
*** JS Stacks
Client: OS.File flushing its data during profileBeforeChange
stack: chrome://resources/osfile/osfile_async_front.jsm:104
chrome://...
// ...
offending_add_on.jsm
state: {shutdown: false, started: true, ...}
Client: Sqlite.jsm flushing its data during profileBeforeChange
stack: chrome://...
// ...
offending_internal_client.jsm
state: (none)