fix: AutistMask does not work in Firefox private windows (closes #646)
Firefox gives an extension page in a private window locks of its own. A popup there could save between the background's read and its write of the stored record, and undo a network switch the background had saved. manifest/firefox.json now sets "incognito": "not_allowed", so a page in a private window cannot read or write extension storage. tests/manifest.test.js pins the key. The README says this in "Stored state and its version". Six code comments drop their private-window exception to the lock. docs/README.md tells Firefox users that AutistMask does not work in private windows. Model: opus-5-5
This commit is contained in:
@@ -1494,11 +1494,12 @@ wrote last, the record says which build's shape it is in.
|
||||
Each write reads the record, changes it and writes it back, holding a lock from
|
||||
the read to the write: the browser's own (`navigator.locks`), taken through
|
||||
`withLock()` in `src/shared/browserApi.js`. Every page of the extension and its
|
||||
background share it, except a page in a Firefox private window, which Firefox
|
||||
gives locks of its own (see https://git.eeqj.de/sneak/AutistMask/issues/646).
|
||||
The popup's `saveState()`, the background's `updateState()` and the
|
||||
StateRecovery reset all take it, so among the pages and the background that
|
||||
share it, no write lands between another write's read and its write, where it
|
||||
background share it. Firefox gives a page in a private window locks of its own.
|
||||
`manifest/firefox.json` sets `"incognito": "not_allowed"`, so such a page cannot
|
||||
read or write extension storage. In Chrome, a page opened from an incognito
|
||||
window still runs outside incognito and shares the lock. The popup's
|
||||
`saveState()`, the background's `updateState()` and the StateRecovery reset all
|
||||
take it, so no write lands between another write's read and its write, where it
|
||||
would be lost. Chrome has it from version 69, older than any Chrome that runs a
|
||||
Manifest V3 extension, in pages and in the service worker; Firefox from version
|
||||
96, older than the 115 `manifest/firefox.json` declares. Where it is missing, a
|
||||
|
||||
Reference in New Issue
Block a user