← Chrome 151 reference

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 inChrome 151 (Enabled by default via Finch IncognitoStaticStorageQuota)
StatusEnabled by default
ChromeStatus5143175657291776 — IncognitoStaticStorageQuota
API changeBehavioural fix to StorageManager.estimate()
Related featurev148: Predictable reported storage quota (4977371751645184)
Chromium bugissues.chromium.org/464484739
Source: chromestatus.com/feature/5143175657291776; ChromeStatus API record; milestone 151 features

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.

Source: chromestatus feature summary; blink-dev discussion

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:

PropertyTypeBehaviour in Chrome 151+
StorageEstimate.quotanumberIn 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.usagenumberCurrent 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.

Source: Storage Living Standard §StorageManager.estimate(); MDN: StorageManager.estimate()

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

BrowserPredictable Quota (Chrome 148)Static Incognito Quota (Chrome 151)
Chrome (Desktop & Android)Chrome 148+Chrome 151+ (Finch IncognitoStaticStorageQuota)
EdgeEdge 148+Edge 151+
FirefoxNo signal (uses distinct quota heuristics)No signal
SafariNo signal (uses origin-based private storage quota)No signal
Source: chromestatus.com/feature/5143175657291776; chromestatus.com/feature/4977371751645184

see also