Skip to content
All fingerprint checksAutomation surface

navigator.storage quota is the same in the window and a same-origin worker

Check id storage-quota-worker-vs-main

What an ordinary browser yields

The quota reported in the window and inside a same-origin worker agree to within 5% — they read one partition through one QuotaManager.

What a detector infers

navigator.storage.estimate().quota describes one storage partition, and a same-origin worker shares that partition — a single QuotaManager in the browser process answers both, keyed by one storage key. So the window and the worker must quote the same quota. This is the cleanest recorded instance of the main-world-only spoof failing: a page patched all three quota APIs from the main thread, and a detector simply read the quota inside a Worker, which a page-world override never reaches. The maintainer of the tracker said it in as many words — reading quota from a Web Worker bypasses page-script patches entirely — and the eventual fix was a binary-level flag, because a main-world-only override is incoherent by construction. The check compares quota only, never usage and never magnitude: no threshold, no ratio, nothing that could rot or unfairly flag a small disk or an incognito window. A 5% relative tolerance absorbs the few-megabyte drift a free-space-derived quota can show between two reads and is still far tighter than the documented spoof gap. It goes quiet rather than failing whenever StorageManager is absent on either side, the worker is blocked by a strict CSP without blob: in worker-src, or it times out.

How to resolve it

Quota is answered by one manager in the browser process, keyed by the storage partition, so it cannot differ between the window and a same-origin worker. A main-world override of navigator.storage.estimate does not reach a worker own navigator. Change it below JavaScript, or leave it native.

Coherence over camouflage: why a plausible identity beats a hidden one

Read in the wild by

CloakBrowser issues

The canonical recorded case: a page patched all three quota APIs from the main world and a detector read the real value from a Worker the patch never reached.

CloakHQ/CloakBrowser #46, #44 (quota readable from Web Workers, bypassing page patches)

CloakHQ/CloakBrowser#46

Every attribution traces to a published artifact. See the sources and their limits.

Nearby checks in Automation surface

See all 27 checks in Automation surface
Who builds this test

Clearcote is a browser built for fingerprint coherence

It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.

This audit takes no position on how Clearcote scores on Automation surface checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.

See the other checks in Automation surface — the family storage-quota-worker-vs-main belongs to.