File: browser_fpiServiceWorkers_fingerprinting.js

package info (click to toggle)
firefox-esr 128.13.0esr-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 4,230,012 kB
  • sloc: cpp: 7,103,971; javascript: 6,088,450; ansic: 3,653,980; python: 1,212,330; xml: 594,604; asm: 420,652; java: 182,969; sh: 71,124; makefile: 20,747; perl: 13,449; objc: 12,399; yacc: 4,583; cs: 3,846; pascal: 2,973; lex: 1,720; ruby: 1,194; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (85 lines) | stat: -rw-r--r-- 2,670 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* import-globals-from testHelpers.js */

// This test ensures that a service worker for an exempted domain is exempted when it is
// in the first party context, and not exempted when it is in a third party context.

runTestInFirstAndThirdPartyContexts(
  "ServiceWorkers - Check that RFP correctly is exempted and not exempted when FPI is enabled",
  async win => {
    // Quickly unset and reset these prefs so we can get the real navigator.hardwareConcurrency
    // It can't be set externally and then captured because this function gets stringified and
    // then evaled in a new scope.
    await SpecialPowers.pushPrefEnv({
      set: [
        ["privacy.firstParty.isolate", false],
        ["privacy.resistFingerprinting", false],
      ],
    });

    var DEFAULT_HARDWARE_CONCURRENCY = navigator.hardwareConcurrency;

    await SpecialPowers.popPrefEnv();

    // Register service worker for the first-party window.
    if (!win.sw) {
      win.sw = await registerServiceWorker(win, "serviceWorker.js");
    }

    // Check navigator HW concurrency from the first-party service worker.
    let res = await sendAndWaitWorkerMessage(
      win.sw,
      win.navigator.serviceWorker,
      { type: "GetHWConcurrency" }
    );
    console.info(
      "First Party, got: " +
        res.value +
        " Expected: " +
        DEFAULT_HARDWARE_CONCURRENCY
    );
    is(
      res.value,
      DEFAULT_HARDWARE_CONCURRENCY,
      "As a first party, HW Concurrency should not be spoofed"
    );
  },
  async win => {
    let SPOOFED_HW_CONCURRENCY = 2;

    // Register service worker for the third-party window.
    if (!win.sw) {
      win.sw = await registerServiceWorker(win, "serviceWorker.js");
    }

    // Check navigator HW concurrency from the first-party service worker.
    let res = await sendAndWaitWorkerMessage(
      win.sw,
      win.navigator.serviceWorker,
      { type: "GetHWConcurrency" }
    );
    console.info(
      "Third Party, got: " + res.value + " Expected: " + SPOOFED_HW_CONCURRENCY
    );
    is(
      res.value,
      SPOOFED_HW_CONCURRENCY,
      "As a third party, HW Concurrency should be spoofed"
    );
  },
  async _ => {
    await new Promise(resolve => {
      Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
        resolve()
      );
    });
  },
  [
    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
    ["dom.ipc.processCount", 1],
    ["dom.serviceWorkers.enabled", true],
    ["dom.serviceWorkers.testing.enabled", true],
    ["privacy.firstparty.isolate", true],
    ["privacy.resistFingerprinting", true],
    ["privacy.resistFingerprinting.exemptedDomains", "example.com"],
  ]
);