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
<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
<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
<mailto: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
<mailto: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>.