| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| checksums.txt | 2026-05-23 | 217 Bytes | |
| firefox-150.0.1-stealth-linux-x86_64.tar.gz | 2026-05-23 | 118.4 MB | |
| firefox-150.0.1-stealth-win-x86_64.zip | 2026-05-23 | 129.8 MB | |
| invisible-firefox (150.0.1) rev 7 source code.tar.gz | 2026-05-22 | 9.1 MB | |
| invisible-firefox (150.0.1) rev 7 source code.zip | 2026-05-22 | 9.1 MB | |
| README.md | 2026-05-22 | 1.3 kB | |
| Totals: 6 Items | 266.5 MB | 24 | |
Fixes [#18] (id.sky.com tab crash on Windows headless=True). Two separate bugs that only triggered together on the alt-desktop scenario:
The Chromium content sandbox at the default level 6 sets STARTUPINFO.lpDesktop=kAlternateWinstation, putting content processes on a different desktop than the wrapper's hidden alt-desktop (which is created via CreateDesktop for window hiding when headless=True). Cross-process navigations like the ones Adobe AppMeasurement triggers can't reparent windows across desktops and the new content process exits cleanly. Wrapper-side fix lowers content sandbox to level 4 so all processes stay on the parent's desktop.
The canvas2d getImageData stealth spoof was writing to a read-only mapped DataSourceSurface. On CPU-backed canvases the write succeeded in practice; on GPU-backed canvases the memory is write-protected and the write segfaulted. That's why the crash showed up at browser.close — id.sky.com runs a final getImageData during page unload. Source-side fix moves the noise application to the JS Uint8ClampedArray's writable backing buffer after the swizzle step.
Tested end-to-end with InvisiblePlaywright headless=True + UK proxy: page survives 30s+, no crash in loop or at close.
Built from feder-cr/invisible-firefox commit 2e17b4871f93 on stealth/150.