summaryrefslogtreecommitdiffstats
path: root/toolkit/components/resistfingerprinting/tests/browser/browser_rfp_canvasplaceholder_pdfjs.js
blob: d80abfdc81c5ef1a1ca4d0b092f3f0154761fba7 (plain)
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
const PDF_FILE =
  getRootDirectory(gTestPath).replace(
    "chrome://mochitests/content",
    "https://example.com"
  ) + "file_pdf.pdf";

add_task(async function canvas_placeholder_pdfjs() {
  await SpecialPowers.pushPrefEnv({
    set: [["privacy.resistFingerprinting", true]],
  });

  const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, PDF_FILE);

  const data = await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
    function extractCanvasData() {
      const canvas = document.createElement("canvas");
      canvas.width = 10;
      canvas.height = 10;

      const context = canvas.getContext("2d");

      context.fillStyle = "#332211";
      context.fillRect(0, 0, 10, 10);

      // Add the canvas element to the document
      document.body.appendChild(canvas);

      return context.getImageData(0, 0, 10, 10).data;
    }

    return content.eval(`(${extractCanvasData})()`);
  });

  is(data.length, 10 * 10 * 4, "correct canvas data size");

  let failure = false;
  for (var i = 0; i < 10 * 10 * 4; i += 4) {
    if (
      data[i] != 0x33 ||
      data[i + 1] != 0x22 ||
      data[i + 2] != 0x11 ||
      data[i + 3] != 0xff
    ) {
      ok(false, `incorrect data ${data.slice(i, i + 4)} @ ${i}..${i + 3}`);
      failure = true;
      break;
    }
  }
  ok(!failure, "canvas is correct");

  BrowserTestUtils.removeTab(tab);
});