v148 · privacy · shipped

Predictable reported storage quota

StorageManager's estimate() now returns a predictable quota for sites that don't hold unlimited-storage permission. This closes a side channel that let pages detect whether the user was in incognito by reading the dramatically smaller available space.

concepts

  1. Quota Inspector

    Call navigator.storage.estimate() live and see what the browser reports. Compare regular vs incognito: the numbers should be indistinguishable in Chrome 148+.

  2. Incognito Fingerprint Sandbox

    Reproduce the privacy attack this change closes. The same heuristic ("quota under ~120 MB ⇒ incognito") that pre-148 fingerprinted users reliably now produces an unreliable verdict. Run in regular + incognito tabs and compare.

  3. Quota Planner

    Use StorageManager.estimate() to read the predictable quota Chrome 148 reports, then plan your storage budget across IndexedDB, Cache API, and OPFS with interactive sliders and a live stacked bar chart.

  4. Quota Budget Planner

    Shows real navigator.storage.estimate() with a usageDetails breakdown bar chart. Asset budget sliders track pages, images, SW cache, and IDB records against your real quota. A mode comparison toggle simulates the pre-Chrome-148 incognito fingerprinting gap, and a cleanup generator outputs LRU eviction and quota-threshold code snippets.

  5. Storage Privacy Tester

    Calls navigator.storage.estimate() live and shows your actual quota, usage, and available space. Then simulates the pre-Chrome-148 incognito fingerprinting attack — comparing your quota against the 120 MB detection threshold — with a verdict showing whether the old heuristic would have flagged your session as incognito.

why it shipped

This mitigates an avenue through which it was possible to detect that a user is in incognito mode. Incognito allocates a much smaller storage quota than regular browsing; any page could read that quota via navigator.storage.estimate() and reliably fingerprint the user's mode. Chrome 148 makes the reported quota predictable enough that the side channel closes without changing actual storage behaviour.

references

implementation reference

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