Any more info I can provide? On Wednesday, January 22, 2025 at 11:42:20 AM UTC-5 Reema A wrote:
> Sure, I enabled the flag in Chrome Beta and navigated around each of the > examples. I didn't notice any issues. However, since as I mentioned I'm not > sure how they're using the API, I can't ensure I'm using up quota. > On Wednesday, January 22, 2025 at 9:47:24 AM UTC-5 Yoav Weiss wrote: > >> On Tue, Jan 21, 2025 at 8:08 PM Reema A <ree...@chromium.org> wrote: >> >>> Sorry for the delayed response! >>> >>> > One more question: what are the actual Quota limits for storage on >>> mobile (including low-end devices), and WebView? Are any of them lower than >>> 10GiB? >>> Quota is 60% of total disk space per origin. For UMA-enabled Chrome >>> installations on Android, ~3% of weekly active clients have less than >>> 16.67GB of total storage and thus less than 10GB of quota. >>> For WebView, we can't get per-device quota numbers; we can only get data >>> about the number of UMA records, which means some devices will be counted >>> multiple times. With that caveat, <4% of UMA records come from devices with >>> less than 10GB of quota. The fraction of low quota devices may be similar >>> to the fraction of records, but this cannot be verified. >>> >>> > I'd like to better understand the risk to sites who are not using this >>> for incognito detection. Could you do a random sampling of say, 10 non-FP >>> usages of quota estimation and see if they are in fact handling >>> QuotaExceededErrors? >>> I looked at a few examples. >>> >>> Methodology: >>> - I searched in the Sources tab in Developer Tools for scripts using >>> estimate() and checked if the same script had references to >>> QuotaExceededErrors. >>> - I skipped scripts that seemed to just be logging the quota estimate to >>> the console. >>> - I skipped scripts that seemed to be fingerprinting, which was the >>> majority of examples. >>> >>> Major caveat: It’s very hard to tell what these sites are doing due to >>> code minification, obfuscation, the lack of context, etc. >>> >>> I found 9 examples I looked at that were not obviously fingerprinting, >>> although I couldn’t always tell what they were using the API for. Of these, >>> I saw references to QuotaExceededErrors in 5 instances. >>> >> >> Is it possible to test these instances out with the flag for this >> feature, to see if they are likely to break or not? >> >> >>> >>> On Thursday, December 19, 2024 at 2:54:55 PM UTC-5 Reema A wrote: >>> >>>> > I'd like to better understand the risk to sites who are not using >>>> this for incognito detection. Could you do a random sampling of say, 10 >>>> non-FP usages of quota estimation and see if they are in fact handling >>>> QuotaExceededErrors? >>>> >>>> Still working on sampling some sites to provide this analysis, will get >>>> back to you ASAP. So far the only one I’ve found that doesn’t have >>>> minified >>>> JS and have been trivially able to Ctrl+F for relevant strings does seem >>>> to >>>> be handling the error. >>>> >>>> > One more question: what are the actual Quota limits for storage on >>>> mobile (including low-end devices), and WebView? Are any of them lower >>>> than >>>> 10GiB? >>>> >>>> There is some data on this available internally here >>>> <https://uma.googleplex.com/p/chrome/timeline_v2?sid=9ee25b5a495da6245b706c020008ea0e>. >>>> >>>> I’ll see if I can follow up with more specifics. >>>> >>>> > Probably a silly question, but why is the storage made available in >>>> incognito inherently smaller than regular mode? Couldn't we increase the >>>> incognito quotas, while still keeping them ephemeral? >>>> >>>> Incognito uses in-memory storage only to avoid data leaks to persistent >>>> storage. In theory this could be changed and it would fix the underlying >>>> problem but doing so would be a much, much larger effort (for example, >>>> here’s >>>> <https://docs.google.com/document/d/1RzkoiCx_ZgffCPo5iWXDC9mzywCG95gNjyanmqt0bs4/edit?tab=t.0#heading=h.7nki9mck5t64> >>>> >>>> a prior proposal). I don’t think there’s a way to increase incognito quota >>>> to be significantly closer to non-incognito quota while still using >>>> in-memory storage. >>>> >>>> > Would that cause issues for sites where `quota`-`usage` < 10GB ? >>>> Would developers run a risk of thinking they are safe to save more data >>>> when in fact they are out of quota? (I guess I'm not familiar with how >>>> developers use `estimate()` today and how confident they are that the >>>> estimate is accurate) >>>> >>>> Yes, it’s possible, but as mentioned in my reply above sites should >>>> already be handling QuotaExceededErrors since the estimate can already be >>>> quite different than the actual quota (more data about this to come as per >>>> Mike’s request). >>>> >>>> On Wednesday, December 18, 2024 at 11:40:15 AM UTC-5 Yoav Weiss wrote: >>>> >>>>> On Wed, Dec 18, 2024 at 5:32 PM Mike Taylor <miketa...@chromium.org> >>>>> wrote: >>>>> >>>>>> We discussed this in our OWNERs meeting, and agreed this should be an >>>>>> I2S that requires 3LGTMs to ship. But, we can just use this thread - no >>>>>> need to send more mail. Some other folks have other questions, but I'll >>>>>> let >>>>>> them send them independently. >>>>>> On 12/13/24 12:57 PM, Mike Taylor wrote: >>>>>> >>>>>> Thanks Reema - these are helpful answers. And it seems you're most of >>>>>> the way to an I2S here - I think "PSA" was probably the incorrect >>>>>> category. >>>>>> >>>>>> > We have manually looked at how sites seem to be using >>>>>> navigator.storage.estimate() and most of the cases we’ve seen seem to be >>>>>> using it for incognito detection. >>>>>> >>>>>> I'd like to better understand the risk to sites who are not using >>>>>> this for incognito detection. Could you do a random sampling of say, 10 >>>>>> non-FP usages of quota estimation and see if they are in fact handling >>>>>> QuotaExceededErrors? >>>>>> >>>>>> One more question: what are the actual Quota limits for storage on >>>>>> mobile (including low-end devices), and WebView? Are any of them lower >>>>>> than >>>>>> 10GiB? >>>>>> On 12/12/24 1:41 PM, Reema A wrote: >>>>>> >>>>>> Thanks for the feedback. Wrote out some more details and answers to >>>>>> questions that have been asked below: >>>>>> >>>>>> *Problem:* >>>>>> It is trivially easy to detect if a user is in incognito mode through >>>>>> the Storage Manager’s estimate API because the amount of storage made >>>>>> available in incognito mode is significantly smaller than in regular >>>>>> mode. >>>>>> We have found some libraries that seem to be taking advantage of this >>>>>> fact >>>>>> and using navigator.storage.estimate() to detect if a user is in >>>>>> incognito >>>>>> mode. >>>>>> >>>>>> >>>>> Probably a silly question, but why is the storage made available in >>>>> incognito inherently smaller than regular mode? >>>>> Couldn't we increase the incognito quotas, while still keeping them >>>>> ephemeral? >>>>> >>>>>> >>>>>> *Goals:* >>>>>> Mitigate detecting incognito mode through >>>>>> navigator.storage.estimate() and navigator.storageBuckets.estimate() >>>>>> Reduce fingerprinting value of the estimate() API >>>>>> Allow estimate() to still be functional for sites with unlimited >>>>>> storage permissions >>>>>> Leave quota enforcement unaffected >>>>>> Minimize potential site breakages >>>>>> >>>>>> *Non-goals:* >>>>>> Mitigating all possible methods of incognito mode detection >>>>>> Mitigating detecting incognito mode through quota exhausted errors >>>>>> >>>>>> *Relevant spec:* >>>>>> The storage spec <https://storage.spec.whatwg.org/#usage-and-quota> >>>>>> defines quota as follows: “The storage quota of a storage shelf is an >>>>>> implementation-defined conservative estimate of the total amount of >>>>>> bytes >>>>>> it can hold. This amount should be less than the total storage space on >>>>>> the >>>>>> device. It must not be a function of the available storage space on the >>>>>> device.” >>>>>> >>>>>> *Current state:* >>>>>> The value returned by estimate() is already just an estimate and in >>>>>> some cases the actual amount of space available to use may be different. >>>>>> >>>>>> *Proposed change:* >>>>>> Return an artificial quota equal to usage + 10 GiB in the Storage >>>>>> Manager and Storage Bucket APIs estimate() method in both incognito mode >>>>>> and regular mode. However, continue to return the old value returned if >>>>>> the >>>>>> site has unlimited storage permission. Additionally, enforced quota will >>>>>> be >>>>>> unaffected. >>>>>> >>>>>> Would that cause issues for sites where `quota`-`usage` < 10GB ? >>>>> Would developers run a risk of thinking they are safe to save more >>>>> data when in fact they are out of quota? (I guess I'm not familiar with >>>>> how >>>>> developers use `estimate()` today and how confident they are that the >>>>> estimate is accurate) >>>>> >>>>>> >>>>>> *Details:* >>>>>> navigator.storage.estimate().quota returns usage + 10 GiB. For >>>>>> storage buckets, StorageBucket.estimate().quota will return either the >>>>>> requested quota set when opening the bucket or usage + 10 GiB if the >>>>>> default quota is being used. >>>>>> >>>>>> *FAQ:* >>>>>> Q: What about sites that rely on the quota value returned? >>>>>> As mentioned in the spec, the quota is only an estimate and sites >>>>>> should already be handling QuotaExceededErrors. >>>>>> >>>>>> Q: Why not just return some error indicator? >>>>>> A: This is more likely to unexpectedly break sites. >>>>>> >>>>>> Q: Why return the same value in incognito and non-incognito? >>>>>> A: To ensure that they’re indistinguishable. >>>>>> >>>>>> Q: Why 10 GiB? >>>>>> This number was proposed because it is likely to be sufficiently high >>>>>> enough that sites are unlikely to change their behavior based on the >>>>>> quota >>>>>> estimate being too low for their use case. It is also similar to the >>>>>> Firefox implementation. >>>>>> >>>>>> Q: Why not a random value? >>>>>> This could result in a unique ID that could be used for >>>>>> fingerprinting. >>>>>> >>>>>> Q: Why (usage + 10 GiB) and not just 10 GiB? >>>>>> A: To ensure that usage is always less than the quota estimate to >>>>>> avoid a counterintuitive behavior that might break a site. >>>>>> >>>>>> Q: What do other browsers do? >>>>>> Firefox: In best-effort mode, Firefox returns the minimum of 10GiB or >>>>>> 10% of the total disk size. If the origin has been granted persistent >>>>>> storage, then it returns the min of 8 TiB or 50% of the total disk size. >>>>>> [source >>>>>> 1 >>>>>> <https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria>, >>>>>> >>>>>> source 2 >>>>>> <https://searchfox.org/mozilla-central/source/dom/quota/ActorsParent.cpp#6828> >>>>>> ] >>>>>> Safari: The docs >>>>>> <https://www.webkit.org/blog/14403/updates-to-storage-policy/> say >>>>>> “Note that the quota is an upper limit of how much can be stored — there >>>>>> is >>>>>> no guarantee that a site can store that much, so error handling for >>>>>> QuotaExceededError is necessary. Also, to reduce fingerprinting risk >>>>>> introduced by exposing usage and quota, quota might change based on >>>>>> factors >>>>>> like existing usage and site visit frequency.” >>>>>> >>>>>> Q: Have you looked at different use cases and how they might be >>>>>> impacted? >>>>>> We have manually looked at how sites seem to be using >>>>>> navigator.storage.estimate() and most of the cases we’ve seen seem to be >>>>>> using it for incognito detection. >>>>>> >>>>>> Q: Do we have test coverage? >>>>>> Yes, we have unit tests, browser tests, and web platform tests. CLs >>>>>> <https://chromium-review.googlesource.com/q/a:reemaa+quota> >>>>>> >>>>>> Q: What if sites break? >>>>>> Developers can disable this change via >>>>>> chrome://flags/#predictable-reported-quota to validate if this is >>>>>> the cause of the breakage. We can also flip the flag off via Finch if >>>>>> needed. >>>>>> >>>>>> *Notes:* >>>>>> This is based on an investigation and solution proposed by >>>>>> t...@chromium.org. >>>>>> >>>>>> Thanks! >>>>>> Reema >>>>>> >>>>>> On Monday, December 9, 2024 at 6:18:21 AM UTC-5 Mike Taylor wrote: >>>>>> >>>>>>> On 12/6/24 5:48 AM, Chromestatus wrote: >>>>>>> >>>>>>> Contact emails ree...@chromium.org >>>>>>> >>>>>>> Specification None >>>>>>> >>>>>>> Summary >>>>>>> >>>>>>> Report a predictable storage quota from StorageManager's estimate >>>>>>> API for sites that do not have unlimited storage permissions. It is >>>>>>> possible to detect a user's browsing mode via the reported storage >>>>>>> quota >>>>>>> because the storage space made available is significantly smaller in >>>>>>> incognito mode than in regular mode. This is a mitigation that prevents >>>>>>> detection of a user's browsing mode via the storage API by reporting an >>>>>>> artificial quota, equal to usage + 10 Gib, in all browsing modes for >>>>>>> sites >>>>>>> with limited storage permissions. Sites with unlimited storage >>>>>>> permissions >>>>>>> will be unaffected. Enforced quota will also be unaffected. >>>>>>> >>>>>>> A small explainer (or more details) would be useful here, it's not >>>>>>> immediately obvious what changes you're proposing to make. Are we >>>>>>> making >>>>>>> this change only to incognito mode, or to regular mode as well? Do we >>>>>>> need >>>>>>> to update a spec somewhere, or is this already allowed (pointer to the >>>>>>> relevant spec would be useful)? >>>>>>> >>>>>>> Blink component Blink>Storage>Quota >>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EStorage%3EQuota> >>>>>>> >>>>>>> >>>>>>> TAG review None >>>>>>> >>>>>>> TAG review status Not applicable >>>>>>> >>>>>>> Risks >>>>>>> >>>>>>> >>>>>>> Interoperability and Compatibility >>>>>>> >>>>>>> Could you flesh out interop and compat risks here please, i.e. What >>>>>>> do other browsers do? What do we expect to break (or not) as a result? >>>>>>> You >>>>>>> mention Incognito mode detection (I'm making an educated guess that >>>>>>> "user's >>>>>>> browsing mode" refers to) - have you looked at different use cases and >>>>>>> how >>>>>>> they might be impacted? Do we have test coverage? >>>>>>> >>>>>>> None >>>>>>> >>>>>>> >>>>>>> *Gecko*: No signal >>>>>>> >>>>>>> *WebKit*: No signal >>>>>>> >>>>>>> *Web developers*: No signals >>>>>>> >>>>>>> *Other signals*: >>>>>>> >>>>>>> WebView application risks >>>>>>> >>>>>>> Does this intent deprecate or change behavior of existing APIs, such >>>>>>> that it has potentially high risk for Android WebView-based >>>>>>> applications? >>>>>>> >>>>>>> None >>>>>>> >>>>>>> >>>>>>> Debuggability >>>>>>> >>>>>>> None >>>>>>> >>>>>>> >>>>>>> Will this feature be supported on all six Blink platforms (Windows, >>>>>>> Mac, Linux, ChromeOS, Android, and Android WebView)? No >>>>>>> >>>>>>> Is this feature fully tested by web-platform-tests >>>>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>>>> ? No >>>>>>> >>>>>>> Flag name on about://flags predictable-reported-quota >>>>>>> >>>>>>> Finch feature name StaticStorageQuota >>>>>>> >>>>>>> Requires code in //chrome? False >>>>>>> >>>>>>> Tracking bug https://issues.chromium.org/issues/369865059 >>>>>>> >>>>>>> Estimated milestones >>>>>>> Shipping on desktop 133 >>>>>>> Shipping on Android 133 >>>>>>> Shipping on WebView 133 >>>>>>> >>>>>>> Anticipated spec changes >>>>>>> >>>>>>> Open questions about a feature may be a source of future web compat >>>>>>> or interop issues. Please list open issues (e.g. links to known github >>>>>>> issues in the project for the feature specification) whose resolution >>>>>>> may >>>>>>> introduce web compat/interop risk (e.g., changing to naming or >>>>>>> structure of >>>>>>> the API in a non-backward-compatible way). >>>>>>> None >>>>>>> >>>>>>> Link to entry on the Chrome Platform Status >>>>>>> https://chromestatus.com/feature/4977371751645184?gate=4955779474653184 >>>>>>> >>>>>>> This intent message was generated by Chrome Platform Status >>>>>>> <https://chromestatus.com>. >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "blink-dev" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to blink-dev+unsubscr...@chromium.org. >>>>>>> To view this discussion visit >>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/675211ae.050a0220.55f02.00d8.GAE%40google.com >>>>>>> >>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/675211ae.050a0220.55f02.00d8.GAE%40google.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "blink-dev" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to blink-dev+unsubscr...@chromium.org. >>>>>> >>>>> To view this discussion visit >>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/866e1227-d7b2-4a7c-bb9e-026cdfc376f7%40chromium.org >>>>>> >>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/866e1227-d7b2-4a7c-bb9e-026cdfc376f7%40chromium.org?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/aa8719be-df07-4e3f-944b-b730389ba56dn%40chromium.org.