v151 · Storage · Privacy

Quota Comparator

Call navigator.storage.estimate() live in this tab and inspect the returned quota. Then use the simulation panel to see exactly how the old leak worked — Incognito returned a tiny RAM-derived value — and why Chrome 151's fix makes normal and Incognito indistinguishable.

Open this page in both a normal tab and an Incognito tab, and compare the live quota values. In Chrome 151+, both should show the same bucketed value.
live storage estimate — this tab
quota
usage
available
persisted cross-tab readings
tab quota usage available age
Waiting for a storage estimate.
Same-profile tabs update through BroadcastChannel and storage events. Normal and Incognito windows are isolated, so use copy/import for that comparison.
simulation: the old Incognito quota leak (pre-Chrome 151)
16 GB
Pre-151: Normal mode
quota signal: large
Pre-151: Incognito mode (leaked)
detectable as Incognito ✗
Chrome 151+: Normal mode
quota signal: large
Chrome 151+: Incognito mode (fixed)
indistinguishable ✓

how the detection worked (pre-Chrome 151)

const { quota } = await navigator.storage.estimate();

// Pre-Chrome 151: Incognito returned ~RAM/20 instead of disk-based quota
// On a 16GB device: ~120MB (Incognito) vs ~10+ GB (normal mode)
const INCOGNITO_THRESHOLD = 500 * 1024 * 1024; // 500 MB
const isLikelyIncognito = quota < INCOGNITO_THRESHOLD;

// Chrome 151 fix: both modes return the same bucketed disk-based value
// The above detection no longer works reliably.

see also

implementation reference

Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗