-
Notifications
You must be signed in to change notification settings - Fork 174
Upgrade QuotaExceededError to a DOMException derived interface #1465
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
domenic
wants to merge
2
commits into
main
Choose a base branch
from
quotaexceedederror-upgrade
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+93
−52
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This was referenced Jan 27, 2025
domenic
added a commit
to webmachinelearning/writing-assistance-apis
that referenced
this pull request
Mar 4, 2025
Closes #5. Closes #31 by obsoleting it. Depends on whatwg/webidl#1465.
This was referenced Mar 4, 2025
Merged
domenic
added a commit
to webmachinelearning/writing-assistance-apis
that referenced
this pull request
Mar 5, 2025
Closes #5. Closes #31 by obsoleting it. Depends on whatwg/webidl#1465.
This was referenced Mar 5, 2025
domenic
added a commit
to webmachinelearning/writing-assistance-apis
that referenced
this pull request
Mar 7, 2025
Closes #5. Obsoletes #31. Depends on whatwg/webidl#1465.
aarongable
pushed a commit
to chromium/chromium
that referenced
this pull request
May 14, 2025
This change introduces a new QuotaExceededError class to update the existing QuotaExceededError so services can return `quota` and `requested` properties as needed. Implemented behind RuntimeEnabledFlag `QuotaExceededErrorUpdate`. Changes to update services throwing QuotaExceededError to use the new class will be made in following changes (except for IDB which triggered failures with this change). Proposal: whatwg/webidl#1465 Chromestatus: https://chromestatus.com/feature/6194847180128256 Bug: 406162261 Change-Id: I68e91e15724e64c0995365ee63d4abe627fe06d3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6516473 Reviewed-by: Domenic Denicola <domenic@chromium.org> Commit-Queue: Ayu Ishii <ayui@chromium.org> Reviewed-by: Joey Arhar <jarhar@chromium.org> Reviewed-by: Joe Mason <joenotcharles@google.com> Cr-Commit-Position: refs/heads/main@{#1460403}
chromium-wpt-export-bot
pushed a commit
to web-platform-tests/wpt
that referenced
this pull request
May 14, 2025
This change introduces a new QuotaExceededError class to update the existing QuotaExceededError so services can return `quota` and `requested` properties as needed. Implemented behind RuntimeEnabledFlag `QuotaExceededErrorUpdate`. Changes to update services throwing QuotaExceededError to use the new class will be made in following changes (except for IDB which triggered failures with this change). Proposal: whatwg/webidl#1465 Chromestatus: https://chromestatus.com/feature/6194847180128256 Bug: 406162261 Change-Id: I68e91e15724e64c0995365ee63d4abe627fe06d3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6516473 Reviewed-by: Domenic Denicola <domenic@chromium.org> Commit-Queue: Ayu Ishii <ayui@chromium.org> Reviewed-by: Joey Arhar <jarhar@chromium.org> Reviewed-by: Joe Mason <joenotcharles@google.com> Cr-Commit-Position: refs/heads/main@{#1460403}
DanielRyanSmith
pushed a commit
to web-platform-tests/wpt
that referenced
this pull request
May 15, 2025
This change introduces a new QuotaExceededError class to update the existing QuotaExceededError so services can return `quota` and `requested` properties as needed. Implemented behind RuntimeEnabledFlag `QuotaExceededErrorUpdate`. Changes to update services throwing QuotaExceededError to use the new class will be made in following changes (except for IDB which triggered failures with this change). Proposal: whatwg/webidl#1465 Chromestatus: https://chromestatus.com/feature/6194847180128256 Bug: 406162261 Change-Id: I68e91e15724e64c0995365ee63d4abe627fe06d3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6516473 Reviewed-by: Domenic Denicola <domenic@chromium.org> Commit-Queue: Ayu Ishii <ayui@chromium.org> Reviewed-by: Joey Arhar <jarhar@chromium.org> Reviewed-by: Joe Mason <joenotcharles@google.com> Cr-Commit-Position: refs/heads/main@{#1460403} Co-authored-by: Ayu Ishii <ayui@chromium.org>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The proposal
The web platform benefits from having a type of exception that tells you about when you exceed quotas. In some cases, it can be helpful to tell you what the quota was, and by how much you exceeded it. webmachinelearning/writing-assistance-apis#5 gives one specific use case.
The web platform already has an exception type for telling you when you exceed quotas: it is
DOMException
, with the specificname
property set to"QuotaExceededError"
. However, this does not allow carrying additional information.This PR proposes removing
"QuotaExceededError"
from the list of built-inDOMException
names, and instead creates a class namedQuotaExceededError
that derives fromDOMException
and has the additional optional propertiesquota
andrequested
. We propose that all instances of specs that throw"QuotaExceededError"
DOMException
s get upgraded to instead throwQuotaExceededError
s. For now, such specs would leave thequota
andrequested
properties at their default value ofnull
, but they could eventually upgrade to include that data, if it's useful for their use case (and isn't, e.g., a privacy leak).Alternative considered
The most promising alternative considered was to add a new class that sits alongside
"QuotaExceededError"
DOMException
. Maybe it would be calledQuotaExceededErrorWithDetails
, or maybe we could even call itQuotaExceededError
despite the confusion this might cause. But it would be undesirable for the web platform to have two types of quota-exceeded errors, with different APIs giving different ones. So, because we believe the compat implications are not too bad, we're interested in trying this upgrade route instead.There are other possibilities, such as using custom bindings to sometimes add properties to base
"QuotaExceededError"
DOMException
instances, or trying to add some generic additional information capability to the baseDOMException
class. However, these don't fit well with how classes work on the web platform, with getters providing predefined data on a per-class basis. They would be hacky to maintain both in specs and implementations, and a bit surprising for web developers as well due to the mismatch with other web platform classes.Compat considerations
The following coding patterns will work unchanged if we upgrade all
"QuotaExceededError"
DOMException
s toQuotaExceedError
s:ex instanceof DOMException
ex.name === "QuotaExceededError"
DOMException.QUOTA_EXCEEDED_ERR === 22
(new DOMException("message", "QuotaExceededError")).name === "QuotaExceededError"
The following coding patterns will start giving different answers:
ex.constructor === DOMException
ex.constructor.name === "DOMException"
(new DOMException("message", "QuotaExceededError")).code === DOMException.QUOTA_EXCEEDED_ERR
(now it will be0
)We believe that these coding patterns are quite rare. See, for example, these GitHub search results, which show only a couple instances of
.constructor
testing (repeated in a few forks).The tests like
ex instanceof DOMException
andex.name === "QuotaExceededError"
are much more common, and commonly seen in documentation. (See, e.g., these GitHub search results.)Furthermore, since quotas being exceeded is a relatively rare thing to happen on the web, we suspect that the combination of these rare coding patterns with this rare type of
DOMException
means the impacted number of page views will be extremely small.We could add some use counters for these coding patterns, but they would be sloppy. In particular, we could count cases where
.constructor
is accessed, but not cases where it is compared toDOMException
, so any count would be inflated by generic constructor-accessing code, and not really tell us much about the problematic coding pattern.Nevertheless, there's definitely some compat risk. So the best rollout plan here would probably be for Chromium to cautiously take the lead and report back if it sticks, before necessarily merging changes to all the relevant specs.
Proposed commit message:
Upgrade QuotaExceededError to a DOMException derived interface
Closes #1463.
Labeling "do not merge yet" as we should also create PRs for these specs, and we probably don't want to merge until we see if this sticks in Chromium:
(See WHATWG Working Mode: Changes for more details.)
Preview | Diff