Source code
Revision control
Copy as Markdown
Other Tools
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta
http-equiv="Content-Security-Policy"
content="default-src resource: chrome:; style-src chrome:; object-src 'none'; script-src chrome:"
/>
<title>about:fingerprintingprotection</title>
<link
href="chrome://global/content/usercharacteristics/usercharacteristics.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body>
<div id="test_canvases">
<h2>Test Canvases</h2>
<div>
<h3>WebGL Canvas</h3>
<canvas
class="testcanvas"
width="250"
height="250"
id="glcanvas"
></canvas>
<table>
<tr>
<td>ImageData:</td>
<td>
<input
type="text"
name="glcanvasdata"
id="glcanvasdata"
readonly
/>
</td>
</tr>
</table>
</div>
</div>
<div id="test_canvases">
<h2>Test Canvases Software</h2>
<div>
<h3>WebGL Canvas</h3>
<canvas
class="testcanvas"
width="250"
height="250"
id="glcanvasSoftware"
></canvas>
<table>
<tr>
<td>ImageData:</td>
<td>
<input
type="text"
name="glcanvasdata"
id="glcanvasdata"
readonly
/>
</td>
</tr>
</table>
</div>
</div>
<!--
MathML Width Tests. Last 10 examples from the MathML Torture Test.
-->
<div>
<math id="1">
<mrow>
<munder>
<mo>∑</mo>
<mrow>
<mi>p</mi>
<mtext> prime</mtext>
</mrow>
</munder>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msub>
<mo stretchy="false">∫</mo>
<mrow>
<mi>t</mi>
<mo>></mo>
<mn>1</mn>
</mrow>
</msub>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
<mspace width="thinmathspace"></mspace>
<mi>d</mi>
<mi>π</mi>
<mo stretchy="false">(</mo>
<mi>t</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
<math id="2">
<mrow>
<mo stretchy="false">{</mo>
<munder>
<mrow>
<mover>
<mrow>
<mpadded width="0em">
<mphantom>
<mo>(</mo>
</mphantom>
</mpadded>
<mi>a</mi>
<mo>,</mo>
<mo>...</mo>
<mo>,</mo>
<mi>a</mi>
</mrow>
<mover>
<mo>⏞</mo>
<mrow>
<mi>k</mi>
<mtext> </mtext>
<mi>a</mi>
<mtext>'s</mtext>
</mrow>
</mover>
</mover>
<mo>,</mo>
<mover>
<mrow>
<mpadded width="0em">
<mphantom>
<mo>(</mo>
</mphantom>
</mpadded>
<mi>b</mi>
<mo>,</mo>
<mo>...</mo>
<mo>,</mo>
<mi>b</mi>
</mrow>
<mover>
<mo>⏞</mo>
<mrow>
<mi>ℓ</mi>
<mtext> </mtext>
<mi>b</mi>
<mtext>'s</mtext>
</mrow>
</mover>
</mover>
</mrow>
<munder>
<mo>⏟</mo>
<mrow>
<mi>k</mi>
<mo>+</mo>
<mi>ℓ</mi>
<mtext> elements</mtext>
</mrow>
</munder>
</munder>
<mo stretchy="false">}</mo>
</mrow>
</math>
<math id="3">
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd columnalign="center">
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd columnalign="center">
<mi>a</mi>
</mtd>
<mtd columnalign="center">
<mi>b</mi>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<mi>c</mi>
</mtd>
<mtd columnalign="center">
<mi>d</mi>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
</mtd>
<mtd columnalign="center">
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd columnalign="center">
<mi>e</mi>
</mtd>
<mtd columnalign="center">
<mi>f</mi>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<mi>g</mi>
</mtd>
<mtd columnalign="center">
<mi>h</mi>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<mn>0</mn>
</mtd>
<mtd columnalign="center">
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd columnalign="center">
<mi>i</mi>
</mtd>
<mtd columnalign="center">
<mi>j</mi>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<mi>k</mi>
</mtd>
<mtd columnalign="center">
<mi>l</mi>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
</math>
<math id="4">
<mrow>
<mi>det</mi>
<mo>|</mo>
<mtable>
<mtr>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>0</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>1</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>2</mn>
</msub>
</mtd>
<mtd columnalign="center">
<mo>…</mo>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mi>n</mi>
</msub>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>1</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>2</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>3</mn>
</msub>
</mtd>
<mtd columnalign="center">
<mo>…</mo>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>2</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>3</mn>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mn>4</mn>
</msub>
</mtd>
<mtd columnalign="center">
<mo>…</mo>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>2</mn>
</mrow>
</msub>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<mo>⋮</mo>
</mtd>
<mtd columnalign="center">
<mo>⋮</mo>
</mtd>
<mtd columnalign="center">
<mo>⋮</mo>
</mtd>
<mtd columnalign="center"> </mtd>
<mtd columnalign="center">
<mo>⋮</mo>
</mtd>
</mtr>
<mtr>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mi>n</mi>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mrow>
<mi>n</mi>
<mo>+</mo>
<mn>2</mn>
</mrow>
</msub>
</mtd>
<mtd columnalign="center">
<mo>…</mo>
</mtd>
<mtd columnalign="center">
<msub>
<mi>c</mi>
<mrow>
<mn>2</mn>
<mi>n</mi>
</mrow>
</msub>
</mtd>
</mtr>
</mtable>
<mo>|</mo>
<mo>></mo>
<mn>0</mn>
</mrow>
</math>
<math id="5">
<msub>
<mi>y</mi>
<msub>
<mi>x</mi>
<mn>2</mn>
</msub>
</msub>
</math>
<math id="6">
<mrow>
<msubsup>
<mi>x</mi>
<mn>92</mn>
<mn>31415</mn>
</msubsup>
<mo>+</mo>
<mi>π</mi>
</mrow>
</math>
<math id="7">
<msubsup>
<mi>x</mi>
<msubsup>
<mi>y</mi>
<mi>b</mi>
<mi>a</mi>
</msubsup>
<msubsup>
<mi>z</mi>
<mi>c</mi>
<mi>d</mi>
</msubsup>
</msubsup>
</math>
<math id="8">
<msubsup>
<mi>y</mi>
<mn>3</mn>
<mo>‴</mo>
</msubsup>
</math>
<math id="9" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<munder>
<mo lspace="0em" rspace="0em">lim</mo>
<mrow>
<mi>n</mi>
<mo stretchy="false">→</mo>
<mo>+</mo>
<mn>∞</mn>
</mrow>
</munder>
<mfrac>
<msqrt>
<mrow>
<mn>2</mn>
<mi>π</mi>
<mi>n</mi>
</mrow>
</msqrt>
<mrow>
<mi>n</mi>
<mo>!</mo>
</mrow>
</mfrac>
<msup>
<mrow>
<mo>(</mo>
<mfrac>
<mi>n</mi>
<mi>e</mi>
</mfrac>
<mo>)</mo>
</mrow>
<mi>n</mi>
</msup>
</mrow>
<mo>=</mo>
<mn>1</mn>
</math>
<math id="10" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mrow>
<mo lspace="0em" rspace="0em">det</mo>
<mo stretchy="false">(</mo>
<mi>A</mi>
<mo stretchy="false">)</mo>
</mrow>
<mo>=</mo>
<munder>
<mo>∑</mo>
<mrow>
<mi>σ</mi>
<mo>∊</mo>
<msub>
<mi>S</mi>
<mi>n</mi>
</msub>
</mrow>
</munder>
<mrow>
<mi>ϵ</mi>
<mo stretchy="false">(</mo>
<mi>σ</mi>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<munderover>
<mo>∏</mo>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<msub>
<mi>a</mi>
<mrow>
<mi>i</mi>
<mo>,</mo>
<msub>
<mi>σ</mi>
<mi>i</mi>
</msub>
</mrow>
</msub>
</mrow>
</mrow>
</math>
<!-- New MathML elements for mathml_values metric -->
<!-- These are collected as an array, add more with id="new-2", "new-3", etc. -->
<math id="new-1" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>y</mi>
<mn>2</mn>
</msup>
<mo>=</mo>
<msup>
<mi>z</mi>
<mn>2</mn>
</msup>
</mrow>
</math>
<!--
Diagnostic MathML elements to isolate causes of rendering differences.
Categories:
- new-2 to new-3: Pixel-based mspace (minimal font dependency)
- new-4 to new-5: Em-based mspace (tests font-size only)
- new-6 to new-7: Fractions (tests fractionRuleThickness)
- new-8 to new-9: Radicals (tests radical parameters)
- new-10 to new-12: Scripts (tests sub/superscript shifts)
- new-13 to new-14: Stretchy operators (tests MathVariants)
- new-15 to new-16: Over/under (tests overbar/underbar gaps)
- new-17 to new-19: Single glyphs (baseline for font variation)
These elements use mspace with explicit dimensions where possible to
minimize font glyph dependency while still exercising MATH table
parameters.
-->
<!-- Category 1: Pixel-based mspace (should be identical everywhere) -->
<math id="new-2" xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width="100px" height="50px" depth="10px" />
</math>
<math id="new-3" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mspace width="50px" height="20px" />
<mspace width="30px" height="40px" />
</mrow>
</math>
<!-- Category 2: Em-based mspace (depends only on font-size) -->
<math
id="new-4"
class="mathml-font16"
>
<mspace width="5em" height="2em" />
</math>
<math
id="new-5"
class="mathml-font20"
>
<mspace width="5em" height="2em" />
</math>
<!-- Category 3: Fractions (tests fractionRuleThickness, shifts) -->
<math id="new-6" xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac>
<mspace width="50px" height="10px" />
<mspace width="50px" height="10px" />
</mfrac>
</math>
<math id="new-7" xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac linethickness="0">
<mspace width="50px" height="10px" />
<mspace width="50px" height="10px" />
</mfrac>
</math>
<!-- Category 4: Radicals (tests radicalVerticalGap, radicalRuleThickness) -->
<math id="new-8" xmlns="http://www.w3.org/1998/Math/MathML">
<msqrt>
<mspace width="50px" height="30px" />
</msqrt>
</math>
<math id="new-9" xmlns="http://www.w3.org/1998/Math/MathML">
<msqrt>
<msqrt>
<mspace width="30px" height="20px" />
</msqrt>
</msqrt>
</math>
<!-- Category 5: Sub/superscript (tests script shift parameters) -->
<math id="new-10" xmlns="http://www.w3.org/1998/Math/MathML">
<msub>
<mspace width="20px" height="20px" />
<mspace width="10px" height="10px" />
</msub>
</math>
<math id="new-11" xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
<mspace width="20px" height="20px" />
<mspace width="10px" height="10px" />
</msup>
</math>
<math id="new-12" xmlns="http://www.w3.org/1998/Math/MathML">
<msubsup>
<mspace width="20px" height="20px" />
<mspace width="10px" height="10px" />
<mspace width="10px" height="10px" />
</msubsup>
</math>
<!-- Category 6: Stretchy operators (tests MathVariants table) -->
<math id="new-13" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mo>(</mo>
<mspace width="20px" height="100px" />
<mo>)</mo>
</mrow>
</math>
<math id="new-14" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mo>(</mo>
<mspace width="20px" height="200px" />
<mo>)</mo>
</mrow>
</math>
<!-- Category 7: Over/under (tests overbar/underbar gaps) -->
<math id="new-15" xmlns="http://www.w3.org/1998/Math/MathML">
<mover>
<mspace width="50px" height="20px" />
<mo>―</mo>
</mover>
</math>
<math id="new-16" xmlns="http://www.w3.org/1998/Math/MathML">
<munder>
<mspace width="50px" height="20px" />
<mo>―</mo>
</munder>
</math>
<!-- Category 8: Single glyphs (baseline for font variation) -->
<math
id="new-17"
class="mathml-font48"
>
<mi>x</mi>
</math>
<math
id="new-18"
class="mathml-font48"
>
<mo>+</mo>
</math>
<math
id="new-19"
class="mathml-font48"
>
<mo>∑</mo>
</math>
</div>
<script src="chrome://global/content/usercharacteristics/gl-matrix.js"></script>
<script src="chrome://global/content/usercharacteristics/ssdeep.js"></script>
<script src="chrome://global/content/usercharacteristics/usercharacteristics.js"></script>
</body>
</html>