line height

TorZillaPrint

TZP is only designed for Firefox [v60+] and the Tor Browser [v8+]. Here are additonal tests, and here is the repo [feel free to drop in]. When re-testing sections, be aware that some pref/option changes may require a page refresh [F5] or even a new browser session.
screen resolution
[ i ] range 500-2560
  [css] screen resolution 1
[matchMedia] screen resolution 2
available resolution
outer window
inner window
[ i ] range 500-2560
  [css] inner window 1, 3
[matchMedia] inner window 2
viewport 4
[css] display-mode
full screen
[ i ] full-screen-api.enabled
  [api] full screen
[ i ] DON'T PANIC as you briefly
enter and then exit full screen
  [test] full screen 4
[ i ] will attempt to open a new
window as big as possible
and grab the dimensions
  new window
[android] new window
private window
orientation
[css] orientation
[css aspect-ratio] orientation
[css device-aspect-ratio] orientation
[matchMedia] window orientation
[inner width vs inner height] window orientation
pixel depth
color depth
[css color] bits per color
dpi
[css resolution] dpi
[matchMedia] dpi
zoom %
devicePixelRatio
[scrollY] devicePixelRatio 5
[clientRect] devicePixelRatio 5
--- android ---
keyboard height
toolbar height
code based on work by Arthur Edelstein 1 , kkapsner & CanvasBlocker 2 , Matt Traudt 3 , earthlng 4 and Alex Catarineu 5
Browser, version and os tests are to show how trivial it is to detect Firefox/Tor Browser, the version and your os. However, some have real entropy, such as math hashes or pixel values. Returning the browser/os here is just for fun. Each test is independent of the others.
[header] http_user_agent
[navigator] userAgent
[navigator] appCodeName
[navigator] appName
[navigator] product
[navigator] appVersion
[navigator] oscpu
[navigator] platform
[navigator] buildID
[navigator] productSub
--- browser, version, os ---
[css] browser
[error messages] browser
[ i ] mozInnerScreenX:
we could also use
mozGetAsFile
mozScreenX
oscpu
scrollMaxX
mozPaintCount
  [feature detection] browser
[resource://] browser
[math] browser
[ i ] Firefox 60+ only
  [feature detection] version
[chrome://] os
[math] os
[ i ]Linux, Mac or Windows
if none show = Android
if all show = fonts are blocked
  [css] os 1
Linux Mac Windows
[css line-height] os
[scrollbar width] os 2, 3
[tcp/ip] os
[widgets] os
error messages
hash
error1
error2
error3
error4
error5
error6
error7
widgets
hash
button|checkbox|color|combobox|datetime-local|radio|text
datetime
textarea
code based on work by Arthur Edelstein 1 , Dr. Neal Krawetz 2 and earthlng 3
6th edition
1st edition
combined
ECMAScript 6th Edition
atanh(0.5)
expm1(1)
sinh(1)
ECMAScript 1st Edition
cos(1e251)
cos(1e140)
cos(1e12)
cos(1e130)
cos(1e272)
cos(1e0)
cos(1e284)
cos(1e75)
ECMAScript 6th edition math code courtesy of Fingerprint Central
[header] http_accept_language
language & locale
timezone
date/time & format
geolocation
--- app language leaks ---
dtd 1
dtd nullprinciple 2
dom.properties 3
MediaDocument.properties 3
xmlparser.properties 3
language & locale
[navigator] languages
[navigator] language
[navigator] languages[0]
[Intl.PluralRules] locale
[resolvedOptions] locale
timezone
timezone offsets
[resolvedOptions] timezone
date/time & format
system date/time
toString
[long] toLocaleString
[long] toLocaleDateString
[long] toLocaleTimeString
[long] Intl.DateTimeFormat
[formatToParts] Intl.DateTimeFormat
toGMTString
toUTCString
toLocaleString
[Typed Array] toLocaleString
toLocaleDateString
Intl.DateTimeFormat
toLocaleTimeString
toTimeString
[resolvedOptions] hourCycle
Intl.RelativeTimeFormat
[formatToParts] Intl.RelativeTimeFormat
Intl.NumberFormat
[formatToParts] Intl.NumberFormat
[BigInt] Intl.NumberFormat
[BigInt] toLocaleString
[resolvedOptions] calendar
[resolvedOptions] numberingSystem
geolocation
[ i ] geo.enabled
  [api] geolocation
[ i ] permissions.default.geo
  [permission] geolocation
app language code based on work by Alex Catarineu here 1 and here 2 and z3t on HackerOne 3
[navigator] doNotTrack
[ i ] dom.netinfo.enabled
  [api] network information
[navigator] connection
[navigator] onLine
------
http_accept
http_accept_encoding
http_dnt
http_upgrade_insecure_requests
server_protocol
The [cookie], [localStorage], [sessionStorage] and [indexedDB] tests, on each run, individually attempt to set a new random name and value, and then to read them back. Only when it successfully reads back a matching value is it deemed to be available and working.
[navigator] cookieEnabled
[test] javascript 1st party session cookie
[test] javascript 1st party persistent cookie
localStorage
[test] localStorage
sessionStorage
[test] sessionStorage
indexedDB
[test] indexedDB
[ i ] browser.cache.offline.enable
  appCache
[test] appCache
worker
[test] web worker
[test] shared worker
[ i ] dom.serviceWorkers.enabled
  service worker
[test] service worker
[ i ] dom.caches.enabled
  service worker cache
[test] service worker cache
notifications
[test] notifications
[permission] notifications
[permission] push
[ i ] dom.storageManager.enabled
  storage manager
[properties] storage manager
[test] storage manager
[permission] persistent storage
[ i ]dom.maxHardwareConcurrency
  [navigator] hardwareConcurrency
[ i ] dom.gamepad.enabled
  [api] gamepad
[ i ] media.navigator.enabled
  mediaDevices
enumerateDevices
[navigator] maxTouchPoints
[css] pointer
[css] any-pointer
[ i ] media.webspeech.synth.enabled
  speech synthesis
speech engines
[ i ] dom.vr.enabled
  [api] webvr
activeVRDisplays
getContext
toDataURL
toBlob
mozGetAsFile
getImageData
winding
isPointInPath
isPointInStroke
fillText
strokeText
[webgl] readPixels
canvas code courtesy of kkapsner & CanvasBlocker
Element.getClientRects
Element.getBoundingClientRect
Range.getClientRects
Range.getBoundingClientRect
click here to view what is being rendered
[ *browserleaks* ][ *getClientRects* ][ Fingerprinting? ][ select ][ progress bar ][ empty button ]
Element.getClientRects
[note: the other three methods have the same hash and values]
x
y
width
height
top
left
right
bottom
Element.getBoundingClientRect
x
y
width
height
top
left
right
bottom
Range.getClientRects
x
y
width
height
top
left
right
bottom
Range.getBoundingClientRect
x
y
width
height
top
left
right
bottom
domrect code courtesy of kkapsner & CanvasBlocker
[ i ] dom.webaudio.enabled
  [api] web audio
getChannelData 1
copyFromChannel 1
sum 1
------
outputLatency 2
audioContext 2
OscillatorNode 2
OscillatorNode/DynamicsCompressor 2
audioContext 2
OscillatorNode 2
OscillatorNode/DynamicsCompressor 2
audio code based on work by kkapsner & CanvasBlocker 1 and openWPM 2
We already know we can enumerate fonts: see the monsta test. These font list tests are more refined: whitelist tests are smaller, faster tests trying to determine entropy within each whitelist, while the os tests are to get metrics on stable fonts per os.
default proportional font
default font sizes
[ i ] layout.css.font-loading-api.enabled
  css font loading api
[ i ] browser.display.use_document_fonts
  document fonts
[offset] unicode glyphs 1
[clientrect] unicode glyphs 1
[ i ] gfx.downloadable_fonts.woff2.enabled
  WOFF2
------
font list
fingerprintjs2 2
font fallback 3
------
font list
fingerprintjs2 2
font fallback 3
whitelist
font fallback [whitelist]
os
font fallback [os]
[offset] unicode glyphs
code based on work by David Fifield & Serge Egelman 1 , fingerprintjs2 2 and Arthur Edelstein 3
[ i ] media.media-capabilities.enabled
  [navigator] mediaCapabilities
webgl 1
webgl 2
prefers-color-scheme
prefers-reduced-motion
system colors
testresult
testresult
testresult
[ i ]beacon.enabled
  [navigator] beacon
[navigator] clipboard
[ i ] dom.IntersectionObserver.enabled
  [api] intersection observer
[ i ] mathml.disabled
  mathml
[test example] mathml x=b ±b24 ac 2a
[ i ] dom.requestIdleCallback.enabled
  requestIdleCallback
[ i ] javascript.options.wasm
  webassembly

[section] perf