mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
script: Add a Constraint DOMException
for IndexedDB (#37605)
Add Constraint DOMException to handle the name conflict error in `IDBDatabase::createObjectStore` method. Testing: `./mach test-wpt tests/wpt/tests/IndexedDB/`, but it seems there are many test failures even in main branch already ([related comment](https://github.com/servo/servo/pull/37605#issuecomment-2993889163)). Fixes: #37571 --------- Signed-off-by: iamlockon <xdddxyyyxzzz123@gmail.com>
This commit is contained in:
parent
12d262ec23
commit
204af81d2c
4 changed files with 9 additions and 2 deletions
|
@ -98,6 +98,7 @@ pub(crate) fn throw_dom_exception(
|
|||
Error::Operation => DOMErrorName::OperationError,
|
||||
Error::NotAllowed => DOMErrorName::NotAllowedError,
|
||||
Error::Encoding => DOMErrorName::EncodingError,
|
||||
Error::Constraint => DOMErrorName::ConstraintError,
|
||||
Error::Type(message) => unsafe {
|
||||
assert!(!JS_IsExceptionPending(*cx));
|
||||
throw_type_error(*cx, &message);
|
||||
|
|
|
@ -57,6 +57,7 @@ pub(crate) enum DOMErrorName {
|
|||
NotReadableError,
|
||||
OperationError,
|
||||
NotAllowedError,
|
||||
ConstraintError,
|
||||
}
|
||||
|
||||
impl DOMErrorName {
|
||||
|
@ -92,6 +93,7 @@ impl DOMErrorName {
|
|||
"NotReadableError" => Some(DOMErrorName::NotReadableError),
|
||||
"OperationError" => Some(DOMErrorName::OperationError),
|
||||
"NotAllowedError" => Some(DOMErrorName::NotAllowedError),
|
||||
"ConstraintError" => Some(DOMErrorName::ConstraintError),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -156,6 +158,9 @@ impl DOMException {
|
|||
r#"The request is not allowed by the user agent or the platform in the current context,
|
||||
possibly because the user denied permission."#
|
||||
},
|
||||
DOMErrorName::ConstraintError => {
|
||||
"A mutation operation in a transaction failed because a constraint was not satisfied."
|
||||
},
|
||||
};
|
||||
|
||||
(
|
||||
|
|
|
@ -213,8 +213,7 @@ impl IDBDatabaseMethods<crate::DomTypeHolder> for IDBDatabase {
|
|||
.iter()
|
||||
.any(|store_name| store_name.to_string() == name.to_string())
|
||||
{
|
||||
// TODO: Add constraint as an dom exception and throw that instead
|
||||
return Err(Error::InvalidState);
|
||||
return Err(Error::Constraint);
|
||||
}
|
||||
|
||||
// Step 7
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue