Compare commits
1
Commits
next
...
3eddb12569
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3eddb12569 |
@@ -598,14 +598,6 @@ without an `await`. Demonstrated, not assumed: a `throw` placed past the first
|
|||||||
and on Chrome (`pageerror`), with the rest of the run unaffected because the
|
and on Chrome (`pageerror`), with the rest of the run unaffected because the
|
||||||
approval view had already rendered.
|
approval view had already rendered.
|
||||||
|
|
||||||
One error is still tolerated rather than fatal, listed in `ALLOWED_ERRORS` in
|
|
||||||
`tests/e2e/firefox/run.js` and printed on every occurrence so the concession
|
|
||||||
stays visible in the run output: Firefox reporting an extension promise that
|
|
||||||
settled after its page unloaded, from anywhere in the popup. Its cause was the
|
|
||||||
site-approval popup's unawaited `sendMessage` before `window.close()`, which
|
|
||||||
[#275](https://git.eeqj.de/sneak/AutistMask/issues/275) removed; Firefox runs
|
|
||||||
since have not printed it, and
|
|
||||||
[#487](https://git.eeqj.de/sneak/AutistMask/issues/487) removes the entry.
|
|
||||||
Errors are read from the privileged `nsIConsoleService` in Marionette's chrome
|
Errors are read from the privileged `nsIConsoleService` in Marionette's chrome
|
||||||
context and filtered to non-warning entries whose `sourceName` is the extension
|
context and filtered to non-warning entries whose `sourceName` is the extension
|
||||||
origin. That mechanism is not a stylistic choice. WebDriver BiDi's
|
origin. That mechanism is not a stylistic choice. WebDriver BiDi's
|
||||||
|
|||||||
@@ -45,6 +45,14 @@ but the review is broader than any of them.
|
|||||||
|
|
||||||
# Completed Steps
|
# Completed Steps
|
||||||
|
|
||||||
|
- 2026-10-07: The Firefox end-to-end suite no longer tolerates any uncaught
|
||||||
|
extension error ([#487](https://git.eeqj.de/sneak/AutistMask/issues/487)). Its
|
||||||
|
one entry, Firefox reporting a popup promise that settled after the page
|
||||||
|
unloaded, had lost its cause with
|
||||||
|
[#275](https://git.eeqj.de/sneak/AutistMask/issues/275); the entry and the
|
||||||
|
code that printed tolerated errors are gone from `tests/e2e/firefox/run.js`,
|
||||||
|
and so is the README paragraph that described it.
|
||||||
|
|
||||||
- 2026-10-07: The README's end-to-end limits now match what the two browser
|
- 2026-10-07: The README's end-to-end limits now match what the two browser
|
||||||
suites do to the extension
|
suites do to the extension
|
||||||
([#293](https://git.eeqj.de/sneak/AutistMask/issues/293)). The `window.close`
|
([#293](https://git.eeqj.de/sneak/AutistMask/issues/293)). The `window.close`
|
||||||
|
|||||||
@@ -854,37 +854,6 @@ step(
|
|||||||
|
|
||||||
// ------------------------------------------------------------- runner
|
// ------------------------------------------------------------- runner
|
||||||
|
|
||||||
// Uncaught extension errors that are known, tracked and deliberately
|
|
||||||
// tolerated, in the same spirit as ALLOWED_ERRORS in tests/e2e/harness.js:
|
|
||||||
// every entry names the issue that will delete it, and every occurrence is
|
|
||||||
// still printed, so tolerating one is visible in the log rather than silent.
|
|
||||||
// This is the only concession in an otherwise zero-tolerance policy.
|
|
||||||
const ALLOWED_ERRORS = [
|
|
||||||
{
|
|
||||||
// The site-connection buttons in src/popup/views/approval.js send
|
|
||||||
// their decision and call window.close() on the next line. Firefox's
|
|
||||||
// BaseContext.wrapPromise reports, through Cu.reportError, any
|
|
||||||
// extension-API promise that settles after its context unloaded —
|
|
||||||
// whether or not the caller attached a handler, so notify()'s catch
|
|
||||||
// cannot suppress it.
|
|
||||||
//
|
|
||||||
// Pre-existing, and not introduced by the promise shim: the send was
|
|
||||||
// already unawaited, and this suite is merely the first thing to
|
|
||||||
// drive that window on Firefox. It is the same teardown ordering as
|
|
||||||
// the issue below, whose fix — making the outcome independent of when
|
|
||||||
// the popup closes — removes this entry with it.
|
|
||||||
pattern: /Promise (?:resolved|rejected) after context unloaded/,
|
|
||||||
source: /\/src\/popup\/index\.js$/,
|
|
||||||
issue: "https://git.eeqj.de/sneak/AutistMask/issues/275",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
function allowedFor(e) {
|
|
||||||
return ALLOWED_ERRORS.find(
|
|
||||||
(a) => a.pattern.test(e.msg) && a.source.test(e.src),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatError(e) {
|
function formatError(e) {
|
||||||
return (
|
return (
|
||||||
e.msg + " (" + e.src + ":" + e.line + (e.cat ? ", " + e.cat : "") + ")"
|
e.msg + " (" + e.src + ":" + e.line + (e.cat ? ", " + e.cat : "") + ")"
|
||||||
@@ -1001,20 +970,6 @@ async function main() {
|
|||||||
installFailure = null;
|
installFailure = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tolerated errors are set aside, never dropped: each one is
|
|
||||||
// printed with the issue that keeps it on the list, so the
|
|
||||||
// concession stays in the run output.
|
|
||||||
const tolerated = found.filter((e) => allowedFor(e));
|
|
||||||
found = found.filter((e) => !allowedFor(e));
|
|
||||||
for (const e of tolerated) {
|
|
||||||
console.log(
|
|
||||||
"# tolerated (" +
|
|
||||||
allowedFor(e).issue +
|
|
||||||
"): " +
|
|
||||||
formatError(e),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any uncaught error from an extension source fails the step
|
// Any uncaught error from an extension source fails the step
|
||||||
// that provoked it, whether or not its assertions passed.
|
// that provoked it, whether or not its assertions passed.
|
||||||
if (!failure && found.length > 0) {
|
if (!failure && found.length > 0) {
|
||||||
@@ -1039,13 +994,7 @@ async function main() {
|
|||||||
// blamed on any one step, but they are still reported and they
|
// blamed on any one step, but they are still reported and they
|
||||||
// still fail the run.
|
// still fail the run.
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
const trailingAll = await errors.take();
|
const trailing = await errors.take();
|
||||||
for (const e of trailingAll.filter((x) => allowedFor(x))) {
|
|
||||||
console.log(
|
|
||||||
"# tolerated (" + allowedFor(e).issue + "): " + formatError(e),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const trailing = trailingAll.filter((e) => !allowedFor(e));
|
|
||||||
console.log(
|
console.log(
|
||||||
"# " +
|
"# " +
|
||||||
(steps.length - failed) +
|
(steps.length - failed) +
|
||||||
|
|||||||
Reference in New Issue
Block a user