morgan pushed to branch base-browser-140.3.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
-
9ebed81f
by Fatih Kilic at 2025-09-30T13:31:11+00:00
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:
... | ... | @@ -10,7 +10,8 @@ |
10 | 10 | |
11 | 11 | "use strict";
|
12 | 12 | |
13 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
13 | +const SPOOFED_HW_CONCURRENCY =
|
|
14 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
14 | 15 | |
15 | 16 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
16 | 17 | |
... | ... | @@ -27,6 +28,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
27 | 28 | );
|
28 | 29 | }
|
29 | 30 | |
31 | +add_setup(async function () {
|
|
32 | + registerCleanupFunction(async function () {
|
|
33 | + Services.prefs.clearUserPref(
|
|
34 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
35 | + );
|
|
36 | + });
|
|
37 | +});
|
|
38 | + |
|
30 | 39 | // The following are convenience objects that allow you to quickly see what is
|
31 | 40 | // and is not modified from a logical set of values.
|
32 | 41 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -23,7 +23,8 @@ |
23 | 23 | |
24 | 24 | "use strict";
|
25 | 25 | |
26 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
26 | +const SPOOFED_HW_CONCURRENCY =
|
|
27 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
27 | 28 | |
28 | 29 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
29 | 30 | |
... | ... | @@ -40,6 +41,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
40 | 41 | );
|
41 | 42 | }
|
42 | 43 | |
44 | +add_setup(async function () {
|
|
45 | + registerCleanupFunction(async function () {
|
|
46 | + Services.prefs.clearUserPref(
|
|
47 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
48 | + );
|
|
49 | + });
|
|
50 | +});
|
|
51 | + |
|
43 | 52 | // The following are convenience objects that allow you to quickly see what is
|
44 | 53 | // and is not modified from a logical set of values.
|
45 | 54 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -20,7 +20,8 @@ |
20 | 20 | |
21 | 21 | "use strict";
|
22 | 22 | |
23 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
23 | +const SPOOFED_HW_CONCURRENCY =
|
|
24 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
24 | 25 | |
25 | 26 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
26 | 27 | |
... | ... | @@ -37,6 +38,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
37 | 38 | );
|
38 | 39 | }
|
39 | 40 | |
41 | +add_setup(async function () {
|
|
42 | + registerCleanupFunction(async function () {
|
|
43 | + Services.prefs.clearUserPref(
|
|
44 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
45 | + );
|
|
46 | + });
|
|
47 | +});
|
|
48 | + |
|
40 | 49 | // The following are convenience objects that allow you to quickly see what is
|
41 | 50 | // and is not modified from a logical set of values.
|
42 | 51 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -16,7 +16,8 @@ |
16 | 16 | |
17 | 17 | "use strict";
|
18 | 18 | |
19 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
19 | +const SPOOFED_HW_CONCURRENCY =
|
|
20 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
20 | 21 | |
21 | 22 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
22 | 23 | |
... | ... | @@ -33,6 +34,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
33 | 34 | );
|
34 | 35 | }
|
35 | 36 | |
37 | +add_setup(async function () {
|
|
38 | + registerCleanupFunction(async function () {
|
|
39 | + Services.prefs.clearUserPref(
|
|
40 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
41 | + );
|
|
42 | + });
|
|
43 | +});
|
|
44 | + |
|
36 | 45 | // The following are convenience objects that allow you to quickly see what is
|
37 | 46 | // and is not modified from a logical set of values.
|
38 | 47 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -15,7 +15,8 @@ |
15 | 15 | |
16 | 16 | "use strict";
|
17 | 17 | |
18 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
18 | +const SPOOFED_HW_CONCURRENCY =
|
|
19 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
19 | 20 | |
20 | 21 | const DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;
|
21 | 22 | |
... | ... | @@ -32,6 +33,14 @@ async function testHWConcurrency(result, expectedResults, extraData) { |
32 | 33 | );
|
33 | 34 | }
|
34 | 35 | |
36 | +add_setup(async function () {
|
|
37 | + registerCleanupFunction(async function () {
|
|
38 | + Services.prefs.clearUserPref(
|
|
39 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
40 | + );
|
|
41 | + });
|
|
42 | +});
|
|
43 | + |
|
35 | 44 | // The following are convenience objects that allow you to quickly see what is
|
36 | 45 | // and is not modified from a logical set of values.
|
37 | 46 | // Be sure to always use `let expectedResults = structuredClone(allNotSpoofed)` to do a
|
... | ... | @@ -88,7 +88,8 @@ const SPOOFED_UA_OS = { |
88 | 88 | android: "Android 10; Mobile",
|
89 | 89 | other: "X11; Linux x86_64",
|
90 | 90 | };
|
91 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
91 | +const SPOOFED_HW_CONCURRENCY =
|
|
92 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
92 | 93 | |
93 | 94 | const CONST_APPCODENAME = "Mozilla";
|
94 | 95 | const CONST_APPNAME = "Netscape";
|
... | ... | @@ -121,6 +122,12 @@ const SPOOFED_UA_GECKO_TRAIL = { |
121 | 122 | |
122 | 123 | add_setup(async () => {
|
123 | 124 | DEFAULT_OSCPU.win = DEFAULT_UA_OS.win = await WindowsOscpuPromise;
|
125 | + |
|
126 | + registerCleanupFunction(async function () {
|
|
127 | + Services.prefs.clearUserPref(
|
|
128 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
129 | + );
|
|
130 | + });
|
|
124 | 131 | });
|
125 | 132 | |
126 | 133 | async function testUserAgentHeader() {
|
... | ... | @@ -103,7 +103,8 @@ const SPOOFED_UA_OS = { |
103 | 103 | android: "Android 10; Mobile",
|
104 | 104 | other: "X11; Linux x86_64",
|
105 | 105 | };
|
106 | -const SPOOFED_HW_CONCURRENCY = 2;
|
|
106 | +const SPOOFED_HW_CONCURRENCY =
|
|
107 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
107 | 108 | |
108 | 109 | const CONST_APPCODENAME = "Mozilla";
|
109 | 110 | const CONST_APPNAME = "Netscape";
|
... | ... | @@ -306,6 +307,12 @@ add_setup(async () => { |
306 | 307 | framer_crossOrigin_userAgentHTTPHeader: spoofedUserAgent,
|
307 | 308 | framee_crossOrigin_userAgentHTTPHeader: spoofedUserAgent,
|
308 | 309 | };
|
310 | + |
|
311 | + registerCleanupFunction(async function () {
|
|
312 | + Services.prefs.clearUserPref(
|
|
313 | + "privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings"
|
|
314 | + );
|
|
315 | + });
|
|
309 | 316 | });
|
310 | 317 | |
311 | 318 | const uri = `https://${FRAMER_DOMAIN}/browser/browser/components/resistfingerprinting/test/browser/file_navigator_iframer.html`;
|
... | ... | @@ -908,7 +908,7 @@ async function RFPPBMFPP_NormalMode_NoProtectionsTest( |
908 | 908 | ["privacy.fingerprintingProtection", true],
|
909 | 909 | [
|
910 | 910 | "privacy.fingerprintingProtection.overrides",
|
911 | - "-NavigatorHWConcurrency,-CanvasRandomization",
|
|
911 | + "-NavigatorHWConcurrency,-NavigatorHWConcurrencyTiered,-CanvasRandomization",
|
|
912 | 912 | ],
|
913 | 913 | ].concat(extraPrefs || []),
|
914 | 914 | });
|
... | ... | @@ -690,7 +690,9 @@ uint64_t Navigator::HardwareConcurrency() { |
690 | 690 | |
691 | 691 | return rts->ClampedHardwareConcurrency(
|
692 | 692 | nsGlobalWindowInner::Cast(mWindow)->ShouldResistFingerprinting(
|
693 | - RFPTarget::NavigatorHWConcurrency));
|
|
693 | + RFPTarget::NavigatorHWConcurrency),
|
|
694 | + nsGlobalWindowInner::Cast(mWindow)->ShouldResistFingerprinting(
|
|
695 | + RFPTarget::NavigatorHWConcurrencyTiered));
|
|
694 | 696 | }
|
695 | 697 | |
696 | 698 | namespace {
|
... | ... | @@ -19,8 +19,10 @@ |
19 | 19 | SimpleTest.waitForExplicitFinish();
|
20 | 20 | |
21 | 21 | resistFingerprinting(true).then(() => {
|
22 | + const expected = SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
23 | + |
|
22 | 24 | const y = navigator.hardwareConcurrency;
|
23 | - ok(y === 2, "hardwareConcurrency should always be 2 when we're resisting fingerprinting.");
|
|
25 | + ok(y === expected, "hardwareConcurrency should always be 2 when we're resisting fingerprinting.");
|
|
24 | 26 | |
25 | 27 | resistFingerprinting(false).then(() => {
|
26 | 28 | const z = navigator.hardwareConcurrency;
|
... | ... | @@ -1980,13 +1980,18 @@ void RuntimeService::MemoryPressureAllWorkers() { |
1980 | 1980 | BroadcastAllWorkers([](auto& worker) { worker.MemoryPressure(); });
|
1981 | 1981 | }
|
1982 | 1982 | |
1983 | -uint32_t RuntimeService::ClampedHardwareConcurrency(
|
|
1984 | - bool aShouldResistFingerprinting) const {
|
|
1985 | - // The Firefox Hardware Report says 70% of Firefox users have exactly 2 cores.
|
|
1983 | +uint32_t RuntimeService::ClampedHardwareConcurrency(bool aRFPHardcoded,
|
|
1984 | + bool aRFPTiered) const {
|
|
1985 | + // The Firefox Hardware Report says 34% of Firefox users have exactly 4 cores.
|
|
1986 | 1986 | // When the resistFingerprinting pref is set, we want to blend into the crowd
|
1987 | - // so spoof navigator.hardwareConcurrency = 2 to reduce user uniqueness.
|
|
1988 | - if (MOZ_UNLIKELY(aShouldResistFingerprinting)) {
|
|
1989 | - return 2;
|
|
1987 | + // so spoof navigator.hardwareConcurrency = 4 to reduce user uniqueness. On
|
|
1988 | + // OSX, the majority of Macs have 8 cores.
|
|
1989 | + if (MOZ_UNLIKELY(aRFPHardcoded)) {
|
|
1990 | +#ifdef XP_MACOSX
|
|
1991 | + return 8;
|
|
1992 | +#else
|
|
1993 | + return 4;
|
|
1994 | +#endif
|
|
1990 | 1995 | }
|
1991 | 1996 | |
1992 | 1997 | // This needs to be atomic, because multiple workers, and even mainthread,
|
... | ... | @@ -2014,6 +2019,13 @@ uint32_t RuntimeService::ClampedHardwareConcurrency( |
2014 | 2019 | numberOfProcessors);
|
2015 | 2020 | }
|
2016 | 2021 | |
2022 | + if (MOZ_UNLIKELY(aRFPTiered)) {
|
|
2023 | + if (unclampedHardwareConcurrency >= 8) {
|
|
2024 | + return 8;
|
|
2025 | + }
|
|
2026 | + return 4;
|
|
2027 | + }
|
|
2028 | + |
|
2017 | 2029 | return std::min(uint32_t(unclampedHardwareConcurrency),
|
2018 | 2030 | StaticPrefs::dom_maxHardwareConcurrency());
|
2019 | 2031 | }
|
... | ... | @@ -164,7 +164,8 @@ class RuntimeService final : public nsIObserver { |
164 | 164 | |
165 | 165 | void MemoryPressureAllWorkers();
|
166 | 166 | |
167 | - uint32_t ClampedHardwareConcurrency(bool aShouldResistFingerprinting) const;
|
|
167 | + uint32_t ClampedHardwareConcurrency(bool aRFPHardcoded,
|
|
168 | + bool aRFPTiered) const;
|
|
168 | 169 | |
169 | 170 | void CrashIfHanging();
|
170 | 171 |
... | ... | @@ -222,10 +222,12 @@ uint64_t WorkerNavigator::HardwareConcurrency() const { |
222 | 222 | MOZ_ASSERT(rts);
|
223 | 223 | |
224 | 224 | WorkerPrivate* aWorkerPrivate = GetCurrentThreadWorkerPrivate();
|
225 | - bool rfp = aWorkerPrivate->ShouldResistFingerprinting(
|
|
226 | - RFPTarget::NavigatorHWConcurrency);
|
|
227 | 225 | |
228 | - return rts->ClampedHardwareConcurrency(rfp);
|
|
226 | + return rts->ClampedHardwareConcurrency(
|
|
227 | + aWorkerPrivate->ShouldResistFingerprinting(
|
|
228 | + RFPTarget::NavigatorHWConcurrency),
|
|
229 | + aWorkerPrivate->ShouldResistFingerprinting(
|
|
230 | + RFPTarget::NavigatorHWConcurrencyTiered));
|
|
229 | 231 | }
|
230 | 232 | |
231 | 233 | StorageManager* WorkerNavigator::Storage() {
|
... | ... | @@ -31,8 +31,9 @@ |
31 | 31 | resistFingerprinting(true).then(() => {
|
32 | 32 | ok(true, "resistFingerprinting(true) resolved.");
|
33 | 33 | getWorkerHardwareConcurrency(msg => {
|
34 | + const expected = SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
34 | 35 | const y = msg.data;
|
35 | - ok(y === 2, "hardwareConcurrency should always be 2 when we're resisting fingerprinting.");
|
|
36 | + ok(y === expected, "hardwareConcurrency should always be 2 when we're resisting fingerprinting.");
|
|
36 | 37 | |
37 | 38 | resistFingerprinting(false).then(() => {
|
38 | 39 | ok(true, "resistFingerprinting(false) resolved.");
|
... | ... | @@ -102,6 +102,7 @@ ITEM_VALUE(ScreenAvailToResolution, 68) |
102 | 102 | ITEM_VALUE(UseHardcodedFontSubstitutes, 69)
|
103 | 103 | ITEM_VALUE(DiskStorageLimit, 70)
|
104 | 104 | ITEM_VALUE(WebCodecs, 71)
|
105 | +ITEM_VALUE(NavigatorHWConcurrencyTiered,74)
|
|
105 | 106 | |
106 | 107 | |
107 | 108 | // !!! Don't forget to update kDefaultFingerprintingProtections in nsRFPService.cpp
|
... | ... | @@ -6,7 +6,9 @@ |
6 | 6 | DESKTOP_DEFAULT(CanvasRandomization)
|
7 | 7 | DESKTOP_DEFAULT(FontVisibilityLangPack)
|
8 | 8 | DESKTOP_DEFAULT(JSMathFdlibm)
|
9 | +DESKTOP_DEFAULT(NavigatorHWConcurrencyTiered)
|
|
9 | 10 | |
10 | 11 | ANDROID_DEFAULT(CanvasRandomization)
|
11 | 12 | ANDROID_DEFAULT(FontVisibilityLangPack)
|
12 | 13 | ANDROID_DEFAULT(JSMathFdlibm)
|
14 | +ANDROID_DEFAULT(NavigatorHWConcurrencyTiered) |
... | ... | @@ -44,7 +44,8 @@ runTestInFirstAndThirdPartyContexts( |
44 | 44 | );
|
45 | 45 | },
|
46 | 46 | async win => {
|
47 | - let SPOOFED_HW_CONCURRENCY = 2;
|
|
47 | + let SPOOFED_HW_CONCURRENCY =
|
|
48 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
48 | 49 | |
49 | 50 | // Register service worker for the third-party window.
|
50 | 51 | if (!win.sw) {
|
... | ... | @@ -7,7 +7,8 @@ |
7 | 7 | runTestInFirstAndThirdPartyContexts(
|
8 | 8 | "ServiceWorkers - Ensure the fingerprinting WebCompat overrides the fingerprinting protection in third-party context.",
|
9 | 9 | async win => {
|
10 | - let SPOOFED_HW_CONCURRENCY = 2;
|
|
10 | + let SPOOFED_HW_CONCURRENCY =
|
|
11 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
11 | 12 | |
12 | 13 | // Register service worker for the first-party window.
|
13 | 14 | if (!win.sw) {
|
... | ... | @@ -90,7 +91,8 @@ runTestInFirstAndThirdPartyContexts( |
90 | 91 | runTestInFirstAndThirdPartyContexts(
|
91 | 92 | "ServiceWorkers - Ensure the fingerprinting WebCompat overrides the fingerprinting protection in third-party context with FPI enabled.",
|
92 | 93 | async win => {
|
93 | - let SPOOFED_HW_CONCURRENCY = 2;
|
|
94 | + let SPOOFED_HW_CONCURRENCY =
|
|
95 | + SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4;
|
|
94 | 96 | |
95 | 97 | // Register service worker for the first-party window.
|
96 | 98 | if (!win.sw) {
|