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.
[ i ]range 500-2560
  [css min-device-] screen resolution 1
[matchMedia] screen resolution 2
screen resolution
available resolution
outer window
inner window
[ i ] range 500-2560
  [css min-] inner window 1, 3
[matchMedia] inner window 2
viewport 4
[css | matchMedia] 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
[screen] orientation | mozOrientation | angle
[css] -moz- | orientation | aspect-ratio | device-aspect-ratio | | |
[matchMedia] -moz- | orientation | aspect-ratio | device-aspect-ratio
[screen] pixel depth | color depth
[css | matchMedia] color |
dpi
[css min-resolution] dpi
[matchMedia max-resolution] dpi | dppx | dpcm
zoom %
devicePixelRatio
[matchMedia -webkit- | -moz-] device-pixel-ratio |
--- android ---
keyboard height
toolbar height
code based on work by Arthur Edelstein 1 , kkapsner & CanvasBlocker 2 , Matt Traudt 3 and earthlng 4
The extra browser, version & os tests are to show how easy it is to detect them via other means. They don't have to be "correct"; the measurements provide the real entropy, such as math hashes, branding dimensions, and pixel values. Each test is independent of the others.
[header] http_user_agent
hash
userAgent
appCodeName
appName
product
appVersion
oscpu
platform
buildID
productSub
vendor
vendorSub
that's implausible and you are now highly fingerprintable
--- navigator checks ---
web worker
shared worker
nested worker
service worker
[iframe] hash
[nested iframe] hash
[window.open] hash
--- browser, version, os ---
[ i ] uses some feature
detection results
  hash
[css] branding
[css] browser
[collation] browser
[error messages] 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
[viewport scrollbar width] os 2, 3
[element scrollbar width] os
[widgets] os
error messages
hash
error1
error2
error3
error4
error5
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
language & locale
timezone
date/time & format
geolocation
language & locale
http_accept_language
languages
language
languages[0]
[Intl.PluralRules] locale
[resolvedOptions] locale
timezone
timezone offsets
[resolvedOptions] timezone
date/time & format
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
[currency] toLocaleString
[resolvedOptions] calendar
[resolvedOptions] numberingSystem
geolocation
[ i ] geo.enabled
  [api] geolocation
[ i ] permissions.default.geo
  [permission] geolocation
[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
[javascript 1st party cookie] session | persistent |
localStorage | test |
sessionStorage | test |
indexedDB | test |
[ i ] browser.cache.offline.enable
  appCache | test
|
worker
web worker | shared worker |
[ i ] dom.serviceWorkers.enabled
  service worker | test
|
[ i ] dom.caches.enabled
  service worker cache | test
|
notifications | test |
[permission] notifications | push | persistent storage | |
[ i ] dom.storageManager.enabled
  storage manager
[properties] storage manager
[test] storage manager
plugins
mimeTypes
[ i ] dom.maxHardwareConcurrency
  hardwareConcurrency
[api] pointer event
[css | matchMedia] any-hover | hover | |
[css | matchMedia] any-pointer | pointer | |
[ i ] media.webspeech.recognition.enable
  speech recognition
[ i ] media.webspeech.synth.enabled
  speech synthesis
speech engines
[ i ] maxTouchPoints
-moz-touch-enabled
ontouchstart
ontouchend
TouchEvent
  touch
------
[ i ] dom.gamepad.enabled
  [api] gamepad
gamepads
[ i ] media.navigator.enabled
  mediaDevices
enumerateDevices
[ 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
------
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
[textmetrics] unicode glyphs 1
[clientrect] unicode glyphs 1
[getClientRects] unicode glyphs 1
[ i ] gfx.downloadable_fonts.woff2.enabled
Firefox 68 or lower
  WOFF2
textMetrics
width
actualBoundingBoxAscent
actualBoundingBoxDescent
actualBoundingBoxLeft
actualBoundingBoxRight
alphabeticBaseline
emHeightAscent
emHeightDescent
fontBoundingBoxAscent
fontBoundingBoxDescent
hangingBaseline
ideographicBaseline
[offset] unicode glyphs
------
font list
fingerprintjs2 2
font fallback 3
------
font list
fingerprintjs2 2
font fallback 3
whitelist
font fallback [whitelist]
os
font fallback [os]
code based on work by David Fifield & Serge Egelman 1 , fingerprintjs2 2 and Arthur Edelstein 3
[ i ] media.media-capabilities.enabled
  mediaCapabilities
[canPlayType] audio
[isTypeSupported] audio
[canPlayType] video
[isTypeSupported] video
audio
video
webgl 1
webgl 2
  [-moz-] colors
[system] colors
[ i ] ui.systemUsesDarkTheme
  [css | matchMedia] prefers-color-scheme
|
[css | matchMedia] prefers-reduced-motion |
testresult
testresult
testresult
[ i ]beacon.enabled
  [navigator] beacon
[ i ] dom.events.asyncClipboard
  [api] clipboard
[ i ] dom.IntersectionObserver.enabled
  [api] intersection observer
[ i ] mathml.disabled
  mathml
[test example] mathml
[ i ] dom.media.mediasession.enabled
  [api] mediaSession
[ i ] dom.reporting.enabled
  [api] reporting
[ i ] dom.requestIdleCallback.enabled
  requestIdleCallback
[ i ] svg.disabled
  svg
[ i ] basic test using
performance.now()
  timing
[ i ] javascript.options.wasm
  webassembly
[ i ] security.webauth.webauthn
security.webauth.u2f
  web authentication | u2f
[ i ] dom.webshare.enabled
  [api] web share
------
[ i ] dom.use_components_shim
  component interfaces
navigator properties
component
navigator
section perf
tor browser detection points