script: Implement QuotaExceededError WebIDL interface (#38507)

Implements the new WebIDL interface for QuotaExceededError and uses it
in appropriate places.

Testing: WPT tests. Now passing many more in
`tests/wpt/tests/WebCryptoAPI/getRandomValues.any.js` and
`tests/wpt/tests/webstorage/storage_session_setitem_quotaexceedederr.window.js`.
Fixes: #38489

---------

Signed-off-by: Rahul Menon <menonrahul02@gmail.com>
This commit is contained in:
Rahul Menon 2025-08-14 12:58:50 -05:00 committed by GitHub
parent fad247c802
commit b5932e5abf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 173 additions and 67 deletions

View file

@ -6,6 +6,7 @@ use js::error::throw_type_error;
use js::jsapi::JS_IsExceptionPending;
use crate::codegen::PrototypeList::proto_id_to_name;
use crate::num::Finite;
use crate::script_runtime::JSContext as SafeJSContext;
/// DOM exceptions that can be thrown by a native DOM method.
@ -55,7 +56,10 @@ pub enum Error {
/// NoModificationAllowedError DOMException
NoModificationAllowed,
/// QuotaExceededError DOMException
QuotaExceeded,
QuotaExceeded {
quota: Option<Finite<f64>>,
requested: Option<Finite<f64>>,
},
/// TypeMismatchError DOMException
TypeMismatch,
/// InvalidModificationError DOMException

View file

@ -11,7 +11,7 @@ use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use num_traits::Float;
/// Encapsulates the IDL restricted float type.
#[derive(Clone, Copy, Eq, JSTraceable, PartialEq)]
#[derive(Clone, Copy, Debug, Eq, JSTraceable, PartialEq)]
pub struct Finite<T: Float>(T);
impl<T: Float> Finite<T> {

View file

@ -0,0 +1,21 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://heycam.github.io/webidl/#quotaexceedederror
[
Exposed=(Window,Worker,Worklet,DissimilarOriginWindow),
// Serializable
]
interface QuotaExceededError : DOMException {
[Throws] constructor(optional DOMString message = "", optional QuotaExceededErrorOptions options = {});
readonly attribute double? quota;
readonly attribute double? requested;
};
dictionary QuotaExceededErrorOptions {
double quota;
double requested;
};