v151 · storage · privacy · bug fix
IncognitoStaticStorageQuota
Chrome 151 patches a residual Incognito detection vector in the predictable-storage-quota rollout: by returning a truly static quota from navigator.storage.estimate() in Incognito mode, rather than a value that leaks information about the user's available RAM or hardware configuration.
at a glance
| Shipped in | Chrome 151 (Enabled by default via Finch IncognitoStaticStorageQuota) |
|---|---|
| Status | Enabled by default |
| ChromeStatus | 5143175657291776 — IncognitoStaticStorageQuota |
| API change | Behavioural fix to StorageManager.estimate() |
| Related feature | v148: Predictable reported storage quota (4977371751645184) |
| Chromium bug | issues.chromium.org/464484739 |
Implementation-status divergence, both sides reported rather than resolved (fetched 2026-10-07): this page records IncognitoStaticStorageQuota as shipping enabled by default in Chrome 151, while the ChromeStatus API record top-level status field reads “Proposed” and lists feature_type: "No developer-visible change" with null milestone fields (accurate_as_of 2026-04-10). Additionally, while early explanations attributed the Incognito leakage to disk-size rounding, the ChromeStatus summary clarifies that the Incognito quota had actually remained based on a fraction of physical RAM, which allowed sites to detect Incognito mode by comparing RAM-derived quotas against expected disk-backed estimates.
why it exists
Chrome 148 introduced Predictable reported storage quota (issue 369865059), which changed navigator.storage.estimate() to bucket quota values for sites without unlimited storage permission. However, in Incognito mode, Chromium calculated the underlying quota using available system RAM rather than persistent disk space. This divergence created an Incognito fingerprinting vector: scripts could detect Incognito sessions by identifying RAM-scale quotas that did not match normal disk-scale quota boundaries.
Chrome 151 resolves this by fixing the quota returned by StorageManager.estimate() in Incognito mode to a constant maximal bucket: usage + 10 GiB. This eliminates RAM and hardware-derived fingerprinting surfaces in private browsing, while preserving standard eviction and quota enforcement behaviour.
shape of the API and quota semantics
The method signature per the WHATWG Storage Living Standard remains unchanged:
navigator.storage.estimate(): Promise<StorageEstimate>
The returned StorageEstimate dictionary contains:
| Property | Type | Behaviour in Chrome 151+ |
|---|---|---|
StorageEstimate.quota | number | In Incognito: static maximal bucket usage + 10 GiB (10,737,418,240 bytes); in regular windows: usage + min(10 GiB, disk rounded up to 1 GiB) |
StorageEstimate.usage | number | Current storage usage in bytes for the origin (unaltered) |
Calling navigator.storage.estimate() in an invalid context (such as a detached iframe or document without a browsing context) rejects the returned promise with a TypeError per standard Web IDL binding rules.
examples
No code changes are required for existing web applications. navigator.storage.estimate() continues to return a valid StorageEstimate promise:
// Query origin storage usage and quota
try {
const estimate = await navigator.storage.estimate();
const usageMB = ((estimate.usage || 0) / (1024 * 1024)).toFixed(2);
const quotaGB = ((estimate.quota || 0) / (1024 * 1024 * 1024)).toFixed(2);
console.log(`Storage: ${usageMB} MB used of ${quotaGB} GB quota`);
// In Chrome 151+ Incognito, quota is always (usage + 10 GiB),
// preventing fingerprinting of system RAM or drive capacity.
} catch (err) {
console.error("Storage estimation failed:", err);
}
browser support
| Browser | Predictable Quota (Chrome 148) | Static Incognito Quota (Chrome 151) |
|---|---|---|
| Chrome (Desktop & Android) | Chrome 148+ | Chrome 151+ (Finch IncognitoStaticStorageQuota) |
| Edge | Edge 148+ | Edge 151+ |
| Firefox | No signal (uses distinct quota heuristics) | No signal |
| Safari | No signal (uses origin-based private storage quota) | No signal |
see also
- Chrome Platform Status — IncognitoStaticStorageQuota (5143175657291776)
- ChromeStatus API record (5143175657291776)
- ChromeStatus milestone 151 features query
- Chrome Platform Status — Predictable reported storage quota (4977371751645184)
- ChromeStatus API record — Predictable reported storage quota
- gendn — v148: Predictable reported storage quota
- Chromium Issue 464484739 — IncognitoStaticStorageQuota
- Chromium Issue 369865059 — Predictable storage quota implementation
- blink-dev discussion on predictable storage quota
- Storage Living Standard — StorageManager.estimate()
- MDN Web Docs — StorageManager.estimate()