Consolidates the following individual fixes into one changeset, all rebased
onto the current Firefox 152 base and validated together via a full build:
- webrtc: stop real-IP leak under a proxy; sanitize getStats IP + fabricate a
synthetic srflx when ICE produces none (TCP-proxy case).
- proxy: re-enable launch-arg proxy by disabling https_first.
- screen: make MaskConfig the single source for screen + CSS device dims so
matchMedia(device-width) agrees with screen.width.
- stealth: spoof CSS2 system-font keyword resolution (font-system-fonts-css2).
- juggler: filepicker reliability + skip mouse-move coalescing for synthetic
(juggler) events so input dispatch can't stall under parallel load.
- juggler: emit a single input event for insertText on form fields.
- juggler: reload about:blank via browsingContext.reload.
- locale: propagate launch-arg locale to BrowsingContext.
- build: create v150-removed dirs before copy-additions.
- stealth: BrowserForge headless / impossible-geometry tell corrections and
speech-voice spoofing (host-voice leak fix).
Supersedes daijro/camoufox #637-#647.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix v150 patches
* screen related patch fixes
* fix juggler issues with 150
* Update grading.py
improved build tester scoring
* fix windows build for v150
- scripts/_mixin.py: switch moz_target from x86_64-pc-mingw32 (no longer
supported in FF150) to x86_64-pc-windows-msvc
- additions/juggler/screencast/HeadlessWindowCapturer.h: typedef pid_t
on XP_WIN; libwebrtc headers (video_capture.h, desktop_capturer.h)
reference pid_t which is POSIX-only
- patches/anti-font-fingerprinting.patch: include mozilla/dom/Document.h
in gfxTextRun.cpp; on Windows it is not transitively included so
doc->GetInnerWindow() failed with "incomplete type 'Document'"
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* make service test use local binary
* updated ff fingerprint versions
* Update README.md
---------
Co-authored-by: Ubuntu <ubuntu@ip-172-31-15-96.us-east-2.compute.internal>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Allow disabling font spacing perturbation (seed=0 no-op, matching audio)
The audio fingerprint manager treats seed==0 as "no perturbation", but
font spacing had a hardcoded fallback (0x6D2B79F5u) that made it always
active — even when no seed was explicitly set.
C++ change: remove the hardcoded fallback and add `if (seed != 0)` guard
around the LCG + glyph offset loop (mirrors AudioFingerprintManager).
Also removes the debug printf that fired on every ShapeText() call.
To disable font spacing from the Python API, set fonts:spacing_seed to 0
in the config/preset — same convention as audio:seed and canvas:seed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add local channel install script for custom builds
Installs build artifacts to browsers/local/ instead of overwriting
official slots. Survives camoufox fetch. Handles permissions and
version.json automatically.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* example files
* contributing guides
* simple service test
* run tests in sync
* update pr template
* pip updates
* Update README.md
* typo fixes
* undo pip package update lol
* upgraded service test
* undo injections
* test with proxies
* auto set timezone and proxy url
* delete checks bundle
* split up service tests
* split up build tests
* rename service tests to service tester
* Update CONTRIBUTING.md
* fix entry vs exit ip
* allow alpha versions
* fix patch issues on macos
* bidirectional patch
* Add note on experimental pip package
* fix: migrate Services import to lazy loading pattern and disable dark theme to prevent XPIProvider crash
- Changed Services from ChromeUtils.defineLazyGetter to ChromeUtils.defineESModuleGetters with lazy object
- Updated all Services references to lazy.Services throughout Juggler.js
- Added re-copying of additions and settings after git reset in patch.py
- Removed juggler components.conf copy logic from patch.py (now handled by copy-additions.sh)
- Disabled dark theme preference in camoufox.cfg to
* fix: revert Services import to direct ESM import and re-enable dark theme preference
- Changed Services from lazy loading pattern back to direct ChromeUtils.importESModule()
- Removed lazy object wrapper and ChromeUtils.defineESModuleGetters usage
- Updated all lazy.Services references to Services throughout Juggler.js
- Re-enabled dark theme preference in camoufox.cfg (extensions.activeThemeID)
- Removed XPIProvider crash prevention comment as issue is resolved
* fix: remove redundant Services import as it's available globally in XPCOM component context
- Removed ChromeUtils.importESModule imports for XPCOMUtils, ComponentUtils, and Services
- Added comment explaining Services is available as a global in XPCOM component context
- Services.scriptloader.loadSubScript call continues to work with global Services reference
* fix: correct JugglerFrameChild.sys.mjs path by removing duplicate content directory
- Changed esModuleURI from 'chrome://juggler/content/content/JugglerFrameChild.sys.mjs' to 'chrome://juggler/content/JugglerFrameChild.sys.mjs'
- Removes erroneous duplicate 'content' directory in the child actor module path
* fix: add ESM module entries and correct JugglerFrameChild.jsm path in jar.mn
- Added JugglerFrameParent.sys.mjs entry to juggler.jar manifest
- Added JugglerFrameChild.sys.mjs entry to juggler.jar manifest
- Fixed JugglerFrameChild.jsm path from 'content/content/JugglerFrameChild.jsm' to 'content/JugglerFrameChild.jsm' removing duplicate content directory
* fix: remove redundant Services lazy getter as it's available globally in content process context
- Removed ChromeUtils.defineLazyGetter for Services in main.js
- Added comment explaining Services is available as a global
- Services reference continues to work with global availability in content process
---------
Co-authored-by: Nirupam Bhowmick <48842933+heydryft@users.noreply.github.com>
- Added --binary flag to preserve line endings (CRLF vs LF)
- Removed -F3 (fuzz factor) flag
- Helps with cross-platform patching where line endings may differ
- Changed --fuzz=3 to -F3 for consistent short option format
- Added -l flag to ignore whitespace differences when applying patches
- Maintains --forward flag to skip already applied patches
- Removed MOZ_APP_VENDOR and MOZ_APP_PROFILE from configure.sh branding file
- Added note that these must be set via imply_option() in browser/moz.configure
- Updated disable-data-reporting-at-compile-time.patch to set MOZ_APP_VENDOR="Camoufox" and MOZ_APP_PROFILE="camoufox"
- Changed juggler components.conf to use "type" instead of "constructor" for Firefox 146+ compatibility
- Added automatic
Add comprehensive task list documenting the Firefox upgrade from v135.0.1 to v147.0b3 (12 major versions). Includes status tracking for all 45 patches after syncing with upstream LibreWolf (Firefox 146) and Playwright repositories.
Key changes:
- 25 broken patches identified (56% failure rate)
- 20 patches applying cleanly (44% success rate)
- LibreWolf patches updated from upstream: 17 patches synced, 5 deleted, 2 auto-fixed
-
- Added ability to spoof webgl2 supported extensions
- Added ability to block parameters that aren't defined in config
- Passing null in config will block the value
- Added more parameters to the demo site
Experimental WebGL fingerprint injection.
- Allows the ability to set all WebGL parameters, supported extension list, shader precision formats, & context attributes.
- Added a demo website under scripts/examples/webgl.html that can be used to generate Camoufox config data