From e4528a296f90bb99cb9ba57d1ced92fb7e8b759d Mon Sep 17 00:00:00 2001 From: icepaq <62949848+icepaq@users.noreply.github.com> Date: Tue, 14 Apr 2026 21:54:07 -0400 Subject: [PATCH] Disable Canvas Noise (#528) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: update timezone, geolocation, and locale spoofing patches - timezone-spoofing.patch: per-context timezone via per-realm DateTimeInfo - geolocation-spoofing.patch: CAMOU_CONFIG backwards compatibility for geolocation - locale-spoofing.patch: add camoucfg LOCAL_INCLUDES - anti-font-fingerprinting.patch: add RoverfoxStorageManager exports to moz.build * feat: per-context audio fingerprinting and screen spoofing patches - audio-fingerprint-manager.patch: per-context audio fingerprinting (all 6 API methods) - screen-spoofing.patch: per-context screen dimensions with global MaskConfig fallback - Disable webrtc-ip-spoofing.patch (will re-enable after fixing) - Remove screen-hijacker.patch (superseded by screen-spoofing.patch) * fix: add global MaskConfig hooks for navigator.platform, hardwareConcurrency, and timezone (#443) Fixes issue where global CAMOU_CONFIG settings for navigator.platform, navigator.hardwareConcurrency, and timezone were not applied in the main window Navigator (only WorkerNavigator was patched via fingerprint-injection.patch). * fix: run nsJSUtils::SetTimeZoneOverride() after SpiderMonkey has Initialized to prevent SIGSEGV * Add fingerprint improvements for PR #3 - navigator-spoofing.patch: Global config fixes for platform/hardwareConcurrency/timezone - timezone-spoofing.patch: Persistence across page navigation via SetNewDocument hook - audio-fingerprint-manager.patch: Full 6-method coverage with self-destruct pattern - screen-spoofing.patch: Per-context dimensions with self-destruct pattern - webrtc-ip-spoofing.patch: Re-enabled with getStats() sanitization + comprehensive IPv6 regex * fix: simplify userContextId to BrowsingContext + add per-context docs * feat(navigator): Add per-context spoofing (platform, oscpu, hardwareConcurrency) with global fallback + docs update. * fix(navigator): use 2-arg GetUint(key, value) for RoverfoxStorageManager * fix(navigator): header line count build error * fix(navigator): move NavigatorManager.cpp into SOURCES for leakage error * fix(navigator): more line count build errors * fix(navigator): include nsTHashMap and nsHashKeys.h before RoverfoxStorageManager * feat(webgl): per-context spoofing patch * fix(webgl): changed GetCanvasElement() to mCanvasElement() for firefox version * fix(webgl): remove coupled self-destruct * feat(canvas): per-context spoofing * feat(font-list): per-context spoofing * fix(font-list): use GetOwnerWindow() instead of GetOwner() * feat(speech): per-context spoofing * fix(speech): add /dom/base inside local_includes * fix(speech): changed context to avoid conflicts * feat(navigator): add WorkerNavigator hooks for per-context platform and hardwareConcurrency in workers * feat(timezone): add per-context timezone override to workers * fix(canvas): add OffscreenCanvas userContextId support and skip zero pixels in canvas noise * fix(screen): hook nsMediaFeatures GetDeviceSize for per-context matchMedia device-width/height * fix(webgl): add OffscreenCanvas userContextId fallback in WebGL GetUserContextId * fix(canvas): make canvas noise use proper format for BGRA toDataURL path * fix(canvas): line count fixes * docs: updated hardware per-context documentation * Final Per-Context Hardware Fingerprint Spoofing (#9) * feat(navigator): Add per-context spoofing (platform, oscpu, hardwareConcurrency) with global fallback + docs update. * fix(navigator): use 2-arg GetUint(key, value) for RoverfoxStorageManager * fix(navigator): header line count build error * fix(navigator): move NavigatorManager.cpp into SOURCES for leakage error * fix(navigator): more line count build errors * fix(navigator): include nsTHashMap and nsHashKeys.h before RoverfoxStorageManager * feat(webgl): per-context spoofing patch * fix(webgl): changed GetCanvasElement() to mCanvasElement() for firefox version * fix(webgl): remove coupled self-destruct * feat(canvas): per-context spoofing * feat(font-list): per-context spoofing * fix(font-list): use GetOwnerWindow() instead of GetOwner() * feat(speech): per-context spoofing * fix(speech): add /dom/base inside local_includes * fix(speech): changed context to avoid conflicts * feat(navigator): add WorkerNavigator hooks for per-context platform and hardwareConcurrency in workers * feat(timezone): add per-context timezone override to workers * fix(canvas): add OffscreenCanvas userContextId support and skip zero pixels in canvas noise * fix(screen): hook nsMediaFeatures GetDeviceSize for per-context matchMedia device-width/height * fix(webgl): add OffscreenCanvas userContextId fallback in WebGL GetUserContextId * fix(canvas): make canvas noise use proper format for BGRA toDataURL path * fix(canvas): line count fixes * docs: updated hardware per-context documentation * feat(screen): screen avail per context * fix(font): align userContextId resolution to BrowsingContext * fix(audio): align userContextId resolution to BrowsingContext * Avoid macos caching (#11) * the property to undefined before deleting * undo webrtc undefined * feat: userContextId added to WordCacheKey * fix: hunk line counts for macos cache changes * fix: add WorkerPrivate fallback in OffscreenCanvas * fix(audio): transformation added to mSharedChannels path to ensure consistency * fix(webgl): added WorkerPrivate to ucid * fix(timezone): add ucid=0 fallback for worker timezone resolution * fix(audio): move seed lookup outside window guard for all 6 hooks * fix(canvas): add ucid=0 fallback and WorkerPrivate resolution for workers * fix(navigator): add setNavigatorUserAgent and ucid=0 fallback and WorkerNavigator for UA spoofing fix * fix(webgl): add ucid=0 fallback and WorkerPrivate resolution * fix(webgl): decouple vendor/renderer self-destruct * fix(navigator): add main-thread navigator.userAgent getter hook * fix(navigator): add MaskConfig hook for navigator.appVersion in main window * feat: Add Chakra Petch font for macOS to solidify detection on CreepJS * fix(fontconfig): rename to match Go launcher, add TTC aliases and update .gitignore * fix(navigator): oscpu missing MaskConfig global fallback * feat: add real fingerprint presets (65 firefox profiles) - mainly to test with, more will come when tested. * feat: use real fingerprint presets as default with BrowserForge as fallback * feat: add audio:seed and canvas:seed to property schema and validation * feat: add MaskConfig fallback to seed managers for cross-process worker consistency - don't need to disable fission * fix(font): moved mUserContextId declaration before mRounding in WordCacheKey so init order matches * fix(audio): line count correction * fix(canvas): line count fix * feat: add per-context fingerprinting API (NewContext/AsyncNewContext) + merge upstream - fix seed range - add oscpu derivation from platform, and timezone mapping in from_preset() - new real fingerprints preset support * feat: new presets + en-US only, stripped fonts/language, clamp DPR * feat: random 30-78% font subset generation for NewBrowser and NewContext * fix: add fission.autostart=true to camoufox.cfg - will be changing this soon with new update so processCount is not 1, so it will be undetectable * fix: update macos fonts.conf rendering settings * feat: cross-process fingerprint storage via Firefox Preferences API Replace RoverfoxStorageManager's per-process static HashMap with Firefox's built-in Preferences system. Values stored as CString prefs under "roverfox.s." namespace, auto-synced to all content processes by Firefox. Content processes can't set prefs directly (ENSURE_PARENT_PROCESS), so a single IPDL message (RoverfoxStoragePut) routes writes through the parent. Same public API — all 10 dependent patches require zero changes. Removes dom.ipc.processCount=1 from camoufox.cfg. Firefox now uses Playwright's default multi-process model (fresh process per page) with fission enabled, while fingerprint values remain accessible everywhere. * fix(cross-process): hunk headers and build fixes * fix(storage): add local write-through cache to RoverfoxStorageManager * fix(storage): add sync IPC read fallback for cross-process fingerprint propagation * fix(storage): add NS_IsMainThread guard to sync IPC fallback - prevent crashes * fix(storage): sync IPC + pref whitelist for cross-process fingerprint sync * feat: full documentation update, speech voices generated per context and BrowserForge primary fingerprint generation method for global and per context. * fix: Direct3D NVIDIA GTX 980 renderers incorrectly appearing on mac because of duplicates * Update .gitignore * 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 * remove canvas spoofer * remove canvas spoofer * Update .gitignore * disable canvas noise * Update PULL_REQUEST_TEMPLATE.md --------- Co-authored-by: PopcornDev1 Co-authored-by: Build Co-authored-by: Elliot Coiley <153072396+PopcornDev1@users.noreply.github.com> --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .gitignore | 3 + patches/canvas-spoofing.patch | 317 ------------------------------- patches/navigator-spoofing.patch | 21 +- patches/voice-spoofing.patch | 2 +- 5 files changed, 15 insertions(+), 330 deletions(-) delete mode 100644 patches/canvas-spoofing.patch diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 17a14c4..72c180a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,7 +19,7 @@ Closes # ## Fingerprint Report -Please submit a report from https://camoufox-tester.vercel.app/ and paste the results below. +Please submit a report from both the service tester and build tester.
Fingerprint report diff --git a/.gitignore b/.gitignore index 3c04e0f..9dd3935 100644 --- a/.gitignore +++ b/.gitignore @@ -70,7 +70,10 @@ closedsrc /fonts/ /gmp-clearkey/ /windows-build/ +_bisect_extract/ +node_modules/ node_modules/ proxies.txt checks-bundle.js +.env diff --git a/patches/canvas-spoofing.patch b/patches/canvas-spoofing.patch deleted file mode 100644 index 590d751..0000000 --- a/patches/canvas-spoofing.patch +++ /dev/null @@ -1,317 +0,0 @@ -diff --git a/dom/base/CanvasFingerprintManager.cpp b/dom/base/CanvasFingerprintManager.cpp -new file mode 100644 -index 0000000000..abcdef1234 ---- /dev/null -+++ b/dom/base/CanvasFingerprintManager.cpp -@@ -0,0 +1,79 @@ -+/* Camoufox: Per-context canvas fingerprint manager */ -+#include "CanvasFingerprintManager.h" -+ -+#include -+#include "MaskConfig.hpp" -+#include "mozilla/dom/BrowsingContext.h" -+#include "nsGlobalWindowInner.h" -+#include "xpcpublic.h" -+ -+namespace mozilla { -+namespace dom { -+ -+nsString CanvasFingerprintManager::DisabledKeyForUserContext(uint32_t aId) { -+ nsAutoString key; -+ key.AppendPrintf("canvas_d_%u", aId); -+ return key; -+} -+ -+void CanvasFingerprintManager::SetSeed(uint32_t aId, uint32_t aSeed) { -+ nsAutoString key; -+ key.AppendPrintf("canvasSeed_%u", aId); -+ RoverfoxStorageManager::PutUint(key, aSeed); -+} -+ -+uint32_t CanvasFingerprintManager::GetSeed(uint32_t aId) { -+ nsAutoString key; -+ key.AppendPrintf("canvasSeed_%u", aId); -+ uint32_t seed = 0; -+ if (RoverfoxStorageManager::GetUint(key, seed) && seed != 0) { -+ return seed; -+ } -+ // Fallback to CAMOU_CONFIG for Workers in separate processes -+ if (auto val = MaskConfig::GetUint32("canvas:seed")) { -+ return val.value(); -+ } -+ return 0; -+} -+ -+void CanvasFingerprintManager::ApplyCanvasNoise(uint8_t* data, uint32_t length, -+ uint32_t seed) { -+ if (seed == 0 || length == 0 || !data) return; -+ uint32_t state = seed; -+ for (uint32_t i = 0; i + 3 < length; i += 4) { -+ state = (state * 1664525u + 1013904223u); -+ if (state & 0x100) { -+ // Iterate RGB channels (skip alpha at i+3) to find first non-zero. -+ // This is format-agnostic: works for both RGBA (getImageData) and -+ // BGRA (GetImageBuffer/toDataURL). Skipping zero channels preserves -+ // clearRect transparency and avoids the CreepJS post-clear trap. -+ for (uint32_t c = 0; c < 3; c++) { -+ int32_t val = static_cast(data[i + c]); -+ if (val == 0) continue; -+ data[i + c] = static_cast( -+ (state & 0x200) ? std::min(val + 1, 255) : std::max(val - 1, 0)); -+ break; // Only modify one channel per pixel -+ } -+ } -+ } -+} -+ -+void CanvasFingerprintManager::DisableFunction(uint32_t aId) { -+ RoverfoxStorageManager::PutBool(DisabledKeyForUserContext(aId), true); -+} -+ -+bool CanvasFingerprintManager::IsFunctionEnabledForWebIDL(JSContext* aCx, -+ JSObject* aObj) { -+ nsGlobalWindowInner* win = xpc::WindowOrNull(aObj); -+ if (!win) return false; -+ uint32_t id = 0; -+ if (BrowsingContext* bc = win->GetBrowsingContext()) { -+ id = bc->OriginAttributesRef().mUserContextId; -+ } -+ bool disabled = false; -+ RoverfoxStorageManager::GetBool(DisabledKeyForUserContext(id), disabled); -+ return !disabled; -+} -+ -+} // namespace dom -+} // namespace mozilla -diff --git a/dom/base/CanvasFingerprintManager.h b/dom/base/CanvasFingerprintManager.h -new file mode 100644 -index 0000000000..bcdef12345 ---- /dev/null -+++ b/dom/base/CanvasFingerprintManager.h -@@ -0,0 +1,27 @@ -+/* Camoufox: Per-context canvas fingerprint manager */ -+#ifndef mozilla_dom_CanvasFingerprintManager_h -+#define mozilla_dom_CanvasFingerprintManager_h -+ -+#include "nsString.h" -+#include "nsTHashMap.h" -+#include "nsHashKeys.h" -+#include "RoverfoxStorageManager.h" -+ -+namespace mozilla { -+namespace dom { -+ -+class CanvasFingerprintManager { -+ public: -+ static void SetSeed(uint32_t aUserContextId, uint32_t aSeed); -+ static uint32_t GetSeed(uint32_t aUserContextId); -+ static void ApplyCanvasNoise(uint8_t* data, uint32_t length, uint32_t seed); -+ static void DisableFunction(uint32_t aId); -+ static bool IsFunctionEnabledForWebIDL(JSContext* aCx, JSObject* aObj); -+ private: -+ static nsString DisabledKeyForUserContext(uint32_t aId); -+}; -+ -+} // namespace dom -+} // namespace mozilla -+ -+#endif // mozilla_dom_CanvasFingerprintManager_h -diff --git a/dom/base/moz.build b/dom/base/moz.build -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/base/moz.build -+++ b/dom/base/moz.build -@@ -534,5 +534,13 @@ - "nsPluginArray.cpp", - ] - -+# CanvasFingerprintManager compiled separately to avoid unified build scope issues -+# (includes RoverfoxStorageManager.h which can affect compilation units) -+SOURCES += ["CanvasFingerprintManager.cpp"] -+ -+EXPORTS.mozilla.dom += [ -+ "CanvasFingerprintManager.h", -+] -+ - # Are we targeting x86-32 or x86-64? If so, we want to include SSE2 code for - # CharacterDataBuffer.cpp -diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/base/nsGlobalWindowInner.h -+++ b/dom/base/nsGlobalWindowInner.h -@@ -685,6 +685,9 @@ - - void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); - -+ // Per-context canvas fingerprint seed -+ void SetCanvasSeed(uint32_t seed, mozilla::ErrorResult& aRv); -+ - public: - void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); - void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal, -diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/base/nsGlobalWindowInner.cpp -+++ b/dom/base/nsGlobalWindowInner.cpp -@@ -20,6 +20,7 @@ - #include "AutoplayPolicy.h" - #include "Crypto.h" - #include "MainThreadUtils.h" -+#include "CanvasFingerprintManager.h" - #include "Navigator.h" - #include "PaintWorkletImpl.h" - #include "SessionStorageCache.h" -@@ -7477,6 +7478,28 @@ void nsGlobalWindowInner::ForgetSharedWorker(SharedWorker* aSharedWorker) { - mSharedWorkers.RemoveElement(aSharedWorker); - } - -+ -+void nsGlobalWindowInner::SetCanvasSeed(uint32_t seed, ErrorResult& aRv) { -+ uint32_t userContextId = 0; -+ if (BrowsingContext* bc = GetBrowsingContext()) { -+ userContextId = bc->OriginAttributesRef().mUserContextId; -+ } -+ CanvasFingerprintManager::SetSeed(userContextId, seed); -+ if (userContextId != 0) { -+ CanvasFingerprintManager::SetSeed(0, seed); -+ } -+ CanvasFingerprintManager::DisableFunction(userContextId); -+ // Self-destruct: set to undefined first to bust IC/shape caches on ARM64. -+ if (JSContext* cx = nsContentUtils::GetCurrentJSContext()) { -+ JS::Rooted global(cx, JS::CurrentGlobalOrNull(cx)); -+ if (global) { -+ JS::Rooted undef(cx, JS::UndefinedValue()); -+ JS_SetProperty(cx, global, "setCanvasSeed", undef); -+ JS_DeleteProperty(cx, global, "setCanvasSeed"); -+ } -+ } -+} -+ - RefPtr nsGlobalWindowInner::StorageAccessPermissionChanged( - bool aGranted) { - // Invalidate cached StorageAllowed field so that calls to GetLocalStorage -diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/canvas/CanvasRenderingContext2D.cpp -+++ b/dom/canvas/CanvasRenderingContext2D.cpp -@@ -9,5 +9,9 @@ - #include "CanvasImageCache.h" -+#include "CanvasFingerprintManager.h" -+#include "nsPIDOMWindow.h" -+#include "mozilla/dom/WorkerPrivate.h" -+#include "mozilla/dom/WorkerScope.h" - #include "CanvasUtils.h" - #include "GeckoBindings.h" - #include "ImageEncoder.h" - #include "ImageRegion.h" -@@ -51,6 +52,7 @@ - #include "mozilla/StaticPrefs_gfx.h" - #include "mozilla/TimeStamp.h" - #include "mozilla/UniquePtr.h" -+#include "mozilla/dom/BrowsingContext.h" - #include "mozilla/dom/CanvasGradient.h" - #include "mozilla/dom/CanvasPath.h" - #include "mozilla/dom/CanvasPattern.h" -@@ -2287,5 +2289,34 @@ - SurfaceFormat::A8R8G8B8_UINT32); - } - -+ // Per-context canvas fingerprint noise -+ if (ret) { -+ uint32_t userContextId = 0; -+ if (mCanvasElement) { -+ if (Document* doc = mCanvasElement->OwnerDoc()) { -+ if (BrowsingContext* bc = doc->GetBrowsingContext()) { -+ userContextId = bc->OriginAttributesRef().mUserContextId; -+ } -+ } -+ } else if (mOffscreenCanvas) { -+ if (nsIGlobalObject* global = mOffscreenCanvas->GetOwnerGlobal()) { -+ nsCOMPtr win = do_QueryInterface(global); -+ if (win) { -+ if (BrowsingContext* bc = win->GetBrowsingContext()) { -+ userContextId = bc->OriginAttributesRef().mUserContextId; -+ } -+ } else if (WorkerPrivate* wp = GetCurrentThreadWorkerPrivate()) { -+ userContextId = wp->GetOriginAttributes().mUserContextId; -+ } -+ } -+ } -+ uint32_t canvasSeed = CanvasFingerprintManager::GetSeed(userContextId); -+ if (canvasSeed != 0) { -+ CanvasFingerprintManager::ApplyCanvasNoise( -+ ret.get(), out_imageSize->width * out_imageSize->height * 4, -+ canvasSeed); -+ } -+ } -+ - return ret; - } -@@ -6615,5 +6644,37 @@ - } while (false); - -+ // Per-context canvas fingerprint noise -+ { -+ uint32_t userContextId = 0; -+ if (mCanvasElement) { -+ if (Document* doc = mCanvasElement->OwnerDoc()) { -+ if (BrowsingContext* bc = doc->GetBrowsingContext()) { -+ userContextId = bc->OriginAttributesRef().mUserContextId; -+ } -+ } -+ } else if (mOffscreenCanvas) { -+ if (nsIGlobalObject* global = mOffscreenCanvas->GetOwnerGlobal()) { -+ nsCOMPtr win = do_QueryInterface(global); -+ if (win) { -+ if (BrowsingContext* bc = win->GetBrowsingContext()) { -+ userContextId = bc->OriginAttributesRef().mUserContextId; -+ } -+ } else if (WorkerPrivate* wp = GetCurrentThreadWorkerPrivate()) { -+ userContextId = wp->GetOriginAttributes().mUserContextId; -+ } -+ } -+ } -+ uint32_t canvasSeed = CanvasFingerprintManager::GetSeed(userContextId); -+ if (canvasSeed != 0) { -+ JS::AutoCheckCannotGC nogc2; -+ bool isShared2; -+ uint8_t* pixelData = -+ JS_GetUint8ClampedArrayData(darray, &isShared2, nogc2); -+ CanvasFingerprintManager::ApplyCanvasNoise(pixelData, len.value(), -+ canvasSeed); -+ } -+ } -+ - readback->Unmap(); - *aRetval = darray; - return NS_OK; -diff --git a/dom/canvas/moz.build b/dom/canvas/moz.build -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/canvas/moz.build -+++ b/dom/canvas/moz.build -@@ -188,6 +188,9 @@ SOURCES += [ - # Suppress warnings from third-party code. - SOURCES["MurmurHash3.cpp"].flags += ["-Wno-implicit-fallthrough"] - -+# WorkerPrivate.h for OffscreenCanvas worker context support -+LOCAL_INCLUDES += ["/dom/workers"] -+ - LOCAL_INCLUDES += [ - "/js/xpconnect/wrappers", - ] -diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl -index xxxxxxxxxx..yyyyyyyyyy 100644 ---- a/dom/webidl/Window.webidl -+++ b/dom/webidl/Window.webidl -@@ -892,6 +892,12 @@ partial interface Window { - readonly attribute VisualViewport visualViewport; - }; - -+// Per-context canvas fingerprint seed -+partial interface Window { -+ [Throws, Func="mozilla::dom::CanvasFingerprintManager::IsFunctionEnabledForWebIDL"] -+ undefined setCanvasSeed(unsigned long seed); -+}; -+ - // Used to assign marks to appear on the scrollbar when - // finding on a page. - partial interface Window { diff --git a/patches/navigator-spoofing.patch b/patches/navigator-spoofing.patch index 2202a3b..736731c 100644 --- a/patches/navigator-spoofing.patch +++ b/patches/navigator-spoofing.patch @@ -333,17 +333,16 @@ index f0854f7ca6..6a1438dbac 100644 "NodeInfo.h", "NodeInfoInlines.h", "NodeIterator.h", -@@ -553,6 +554,10 @@ SOURCES += [ +@@ -553,5 +554,9 @@ SOURCES += [ "nsPluginArray.cpp", ] - + +# NavigatorManager compiled separately to avoid unified build scope issues +# (includes RoverfoxStorageManager.h which can affect compilation units) +SOURCES += ["NavigatorManager.cpp"] + - # CanvasFingerprintManager compiled separately to avoid unified build scope issues - # (includes RoverfoxStorageManager.h which can affect compilation units) - SOURCES += ["CanvasFingerprintManager.cpp"] + # FontListManager compiled separately (includes RoverfoxStorageManager.h) + SOURCES += ["FontListManager.cpp"] diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp index cdd544a14d..230ded31c0 100644 --- a/dom/base/nsGlobalWindowInner.cpp @@ -453,10 +452,10 @@ diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h index 87f1e92cec..4991123b64 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h -@@ -700,6 +700,14 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, - +@@ -700,5 +700,13 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget, + void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker); - + + // Per-context navigator property spoofing + void SetNavigatorPlatform(const nsAString& platform, + mozilla::ErrorResult& aRv); @@ -465,9 +464,9 @@ index 87f1e92cec..4991123b64 100644 + mozilla::ErrorResult& aRv); + void SetNavigatorUserAgent(const nsAString& ua, mozilla::ErrorResult& aRv); + - // Per-context canvas fingerprint seed - void SetCanvasSeed(uint32_t seed, mozilla::ErrorResult& aRv); - + public: + void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); + diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl index 6a0570cdf7..cf69daa15d 100644 --- a/dom/webidl/Window.webidl diff --git a/patches/voice-spoofing.patch b/patches/voice-spoofing.patch index 59bc7d5..5d85277 100644 --- a/patches/voice-spoofing.patch +++ b/patches/voice-spoofing.patch @@ -1,7 +1,7 @@ diff --git a/dom/media/webspeech/synth/moz.build b/dom/media/webspeech/synth/moz.build --- a/dom/media/webspeech/synth/moz.build +++ b/dom/media/webspeech/synth/moz.build -@@ -63,4 +63,7 @@ +@@ -63,2 +63,5 @@ "ipc", ] +