
morgan pushed to branch mullvad-browser-140.3.0esr-15.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 4bfdd99a by Fatih Kilic at 2025-09-30T13:38:08+00:00 Bug 1984333 - Spoof CPU cores to 4, or 8 if the machine has 8+ cores. r=timhuang Differential Revision: https://phabricator.services.mozilla.com/D261936 - - - - - 28 changed files: - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_etp_iframes.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_aboutblank.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_aboutsrcdoc.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_blob.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_blobcrossorigin.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_data.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_sandboxediframe.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_aboutblank.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_blob.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_blob_noopener.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_data.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_data_noopener.js - browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_noopener.js - browser/components/resistfingerprinting/test/browser/browser_navigator.js - browser/components/resistfingerprinting/test/browser/browser_navigator_iframes.js - browser/components/resistfingerprinting/test/browser/head.js - dom/base/Navigator.cpp - dom/base/test/test_navigator_hardwareConcurrency.html - dom/workers/RuntimeService.cpp - dom/workers/RuntimeService.h - dom/workers/WorkerNavigator.cpp - dom/workers/test/test_navigator_workers_hardwareConcurrency.html - toolkit/components/resistfingerprinting/RFPTargets.inc - toolkit/components/resistfingerprinting/RFPTargetsDefault.inc - toolkit/components/resistfingerprinting/tests/browser/browser_fpiServiceWorkers_fingerprinting.js - toolkit/components/resistfingerprinting/tests/browser/browser_serviceWorker_fingerprinting_webcompat.js Changes: ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_etp_iframes.js ===================================== @@ -10,7 +10,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -27,6 +28,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_aboutblank.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_aboutsrcdoc.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_blob.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_blobcrossorigin.js ===================================== @@ -23,7 +23,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -40,6 +41,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_data.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_iframes_sandboxediframe.js ===================================== @@ -20,7 +20,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups.js ===================================== @@ -16,7 +16,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -33,6 +34,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_aboutblank.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_blob.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_blob_noopener.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_data.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_data_noopener.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_hwconcurrency_popups_noopener.js ===================================== @@ -15,7 +15,8 @@ "use strict"; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency; @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { ); } +add_setup(async function () { + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); +}); + // The following are convenience objects that allow you to quickly see what is // and is not modified from a logical set of values. // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a ===================================== browser/components/resistfingerprinting/test/browser/browser_navigator.js ===================================== @@ -88,7 +88,8 @@ const SPOOFED_UA_OS = { android: "Android 10; Mobile", other: "X11; Linux x86_64", }; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const CONST_APPCODENAME = "Mozilla"; const CONST_APPNAME = "Netscape"; @@ -121,6 +122,12 @@ const SPOOFED_UA_GECKO_TRAIL = { add_setup(async () => { DEFAULT_OSCPU.win = DEFAULT_UA_OS.win = await WindowsOscpuPromise; + + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); }); async function testUserAgentHeader() { ===================================== browser/components/resistfingerprinting/test/browser/browser_navigator_iframes.js ===================================== @@ -103,7 +103,8 @@ const SPOOFED_UA_OS = { android: "Android 10; Mobile", other: "X11; Linux x86_64", }; -const SPOOFED_HW_CONCURRENCY = 2; +const SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const CONST_APPCODENAME = "Mozilla"; const CONST_APPNAME = "Netscape"; @@ -306,6 +307,12 @@ add_setup(async () => { framer_crossOrigin_userAgentHTTPHeader: spoofedUserAgent, framee_crossOrigin_userAgentHTTPHeader: spoofedUserAgent, }; + + registerCleanupFunction(async function () { + Services.prefs.clearUserPref( + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings" + ); + }); }); const uri = `https://${FRAMER_DOMAIN}/browser/browser/components/resistfingerprinting/test/browser/file_navigator_iframer.html`; ===================================== browser/components/resistfingerprinting/test/browser/head.js ===================================== @@ -908,7 +908,7 @@ async function RFPPBMFPP_NormalMode_NoProtectionsTest( ["privacy.fingerprintingProtection", true], [ "privacy.fingerprintingProtection.overrides", - "-NavigatorHWConcurrency,-CanvasRandomization", + "-NavigatorHWConcurrency,-NavigatorHWConcurrencyTiered,-CanvasRandomization", ], ].concat(extraPrefs || []), }); ===================================== dom/base/Navigator.cpp ===================================== @@ -690,7 +690,9 @@ uint64_t Navigator::HardwareConcurrency() { return rts->ClampedHardwareConcurrency( nsGlobalWindowInner::Cast(mWindow)->ShouldResistFingerprinting( - RFPTarget::NavigatorHWConcurrency)); + RFPTarget::NavigatorHWConcurrency), + nsGlobalWindowInner::Cast(mWindow)->ShouldResistFingerprinting( + RFPTarget::NavigatorHWConcurrencyTiered)); } namespace { ===================================== dom/base/test/test_navigator_hardwareConcurrency.html ===================================== @@ -19,8 +19,10 @@ SimpleTest.waitForExplicitFinish(); resistFingerprinting(true).then(() => { + const expected = SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; + const y = navigator.hardwareConcurrency; - ok(y === 2, "hardwareConcurrency should always be 2 when we're resisting fingerprinting."); + ok(y === expected, "hardwareConcurrency should always be 2 when we're resisting fingerprinting."); resistFingerprinting(false).then(() => { const z = navigator.hardwareConcurrency; ===================================== dom/workers/RuntimeService.cpp ===================================== @@ -1980,13 +1980,18 @@ void RuntimeService::MemoryPressureAllWorkers() { BroadcastAllWorkers([](auto& worker) { worker.MemoryPressure(); }); } -uint32_t RuntimeService::ClampedHardwareConcurrency( - bool aShouldResistFingerprinting) const { - // The Firefox Hardware Report says 70% of Firefox users have exactly 2 cores. +uint32_t RuntimeService::ClampedHardwareConcurrency(bool aRFPHardcoded, + bool aRFPTiered) const { + // The Firefox Hardware Report says 34% of Firefox users have exactly 4 cores. // When the resistFingerprinting pref is set, we want to blend into the crowd - // so spoof navigator.hardwareConcurrency = 2 to reduce user uniqueness. - if (MOZ_UNLIKELY(aShouldResistFingerprinting)) { - return 2; + // so spoof navigator.hardwareConcurrency = 4 to reduce user uniqueness. On + // OSX, the majority of Macs have 8 cores. + if (MOZ_UNLIKELY(aRFPHardcoded)) { +#ifdef XP_MACOSX + return 8; +#else + return 4; +#endif } // This needs to be atomic, because multiple workers, and even mainthread, @@ -2014,6 +2019,13 @@ uint32_t RuntimeService::ClampedHardwareConcurrency( numberOfProcessors); } + if (MOZ_UNLIKELY(aRFPTiered)) { + if (unclampedHardwareConcurrency >= 8) { + return 8; + } + return 4; + } + return std::min(uint32_t(unclampedHardwareConcurrency), StaticPrefs::dom_maxHardwareConcurrency()); } ===================================== dom/workers/RuntimeService.h ===================================== @@ -164,7 +164,8 @@ class RuntimeService final : public nsIObserver { void MemoryPressureAllWorkers(); - uint32_t ClampedHardwareConcurrency(bool aShouldResistFingerprinting) const; + uint32_t ClampedHardwareConcurrency(bool aRFPHardcoded, + bool aRFPTiered) const; void CrashIfHanging(); ===================================== dom/workers/WorkerNavigator.cpp ===================================== @@ -222,10 +222,12 @@ uint64_t WorkerNavigator::HardwareConcurrency() const { MOZ_ASSERT(rts); WorkerPrivate* aWorkerPrivate = GetCurrentThreadWorkerPrivate(); - bool rfp = aWorkerPrivate->ShouldResistFingerprinting( - RFPTarget::NavigatorHWConcurrency); - return rts->ClampedHardwareConcurrency(rfp); + return rts->ClampedHardwareConcurrency( + aWorkerPrivate->ShouldResistFingerprinting( + RFPTarget::NavigatorHWConcurrency), + aWorkerPrivate->ShouldResistFingerprinting( + RFPTarget::NavigatorHWConcurrencyTiered)); } StorageManager* WorkerNavigator::Storage() { ===================================== dom/workers/test/test_navigator_workers_hardwareConcurrency.html ===================================== @@ -31,8 +31,9 @@ resistFingerprinting(true).then(() => { ok(true, "resistFingerprinting(true) resolved."); getWorkerHardwareConcurrency(msg => { + const expected = SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; const y = msg.data; - ok(y === 2, "hardwareConcurrency should always be 2 when we're resisting fingerprinting."); + ok(y === expected, "hardwareConcurrency should always be 2 when we're resisting fingerprinting."); resistFingerprinting(false).then(() => { ok(true, "resistFingerprinting(false) resolved."); ===================================== toolkit/components/resistfingerprinting/RFPTargets.inc ===================================== @@ -102,6 +102,7 @@ ITEM_VALUE(ScreenAvailToResolution, 68) ITEM_VALUE(UseHardcodedFontSubstitutes, 69) ITEM_VALUE(DiskStorageLimit, 70) ITEM_VALUE(WebCodecs, 71) +ITEM_VALUE(NavigatorHWConcurrencyTiered,74) // !!! Don't forget to update kDefaultFingerprintingProtections in nsRFPService.cpp ===================================== toolkit/components/resistfingerprinting/RFPTargetsDefault.inc ===================================== @@ -6,7 +6,9 @@ DESKTOP_DEFAULT(CanvasRandomization) DESKTOP_DEFAULT(FontVisibilityLangPack) DESKTOP_DEFAULT(JSMathFdlibm) +DESKTOP_DEFAULT(NavigatorHWConcurrencyTiered) ANDROID_DEFAULT(CanvasRandomization) ANDROID_DEFAULT(FontVisibilityLangPack) ANDROID_DEFAULT(JSMathFdlibm) +ANDROID_DEFAULT(NavigatorHWConcurrencyTiered) ===================================== toolkit/components/resistfingerprinting/tests/browser/browser_fpiServiceWorkers_fingerprinting.js ===================================== @@ -44,7 +44,8 @@ runTestInFirstAndThirdPartyContexts( ); }, async win => { - let SPOOFED_HW_CONCURRENCY = 2; + let SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; // Register service worker for the third-party window. if (!win.sw) { ===================================== toolkit/components/resistfingerprinting/tests/browser/browser_serviceWorker_fingerprinting_webcompat.js ===================================== @@ -7,7 +7,8 @@ runTestInFirstAndThirdPartyContexts( "ServiceWorkers - Ensure the fingerprinting WebCompat overrides the fingerprinting protection in third-party context.", async win => { - let SPOOFED_HW_CONCURRENCY = 2; + let SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; // Register service worker for the first-party window. if (!win.sw) { @@ -90,7 +91,8 @@ runTestInFirstAndThirdPartyContexts( runTestInFirstAndThirdPartyContexts( "ServiceWorkers - Ensure the fingerprinting WebCompat overrides the fingerprinting protection in third-party context with FPI enabled.", async win => { - let SPOOFED_HW_CONCURRENCY = 2; + let SPOOFED_HW_CONCURRENCY = + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; // Register service worker for the first-party window. if (!win.sw) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/4bfd... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/4bfd... You're receiving this email because of your account on gitlab.torproject.org.