fix: AutistMask does not work in Firefox private windows (closes #646)
Firefox gives an extension page in a private window locks of its own, so a popup there could save between the background's read and its write and undo a network switch the background saved. `manifest/firefox.json` now sets `"incognito": "not_allowed"`, so such a page cannot read or write extension storage, and `tests/manifest.test.js` pins the key. README and the user guide say AutistMask does not work in Firefox private windows. Chrome needs no change: in its default incognito mode an extension page shares the background's lock. A Firefox user on "Never remember history" can no longer run AutistMask at all. Model: opus-5-5
This commit was merged in pull request #678.
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, except a page in a Firefox private window, which has 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