ConsoleAPIStorage stores messages from system modules (.sys.mjs) under filename-based keys. inner-window-destroyed only clears numeric window ID keys, so these entries persist and can leak chrome windows. When mInnerID is 0 (non-window realm), derive the storage key from the first window found in three places: - The captured stack's SavedFrame globals (for chrome windows with their own compartment, e.g. aiWindow.html). - The message argument globals (for objects created in a window realm). - Sandbox argument globals whose prototype is a window (for errors created in DevTools sandboxes). Differential Revision: https://phabricator.services.mozilla.com/D292956
16 lines
593 B
JavaScript
16 lines
593 B
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
// System module whose console has mInnerID=0: messages are stored under
|
|
// a filename key in ConsoleAPIStorage, not under a numeric window ID.
|
|
export function logError(err) {
|
|
console.error(err);
|
|
}
|
|
|
|
export function logSandboxError(win) {
|
|
let sb = Cu.Sandbox(win, { sandboxPrototype: win });
|
|
let err = Cu.evalInSandbox(`new Error("sandbox leak test")`, sb);
|
|
console.error(err);
|
|
}
|