mirror of
https://github.com/servo/servo.git
synced 2025-08-27 08:08:19 +01:00
script: Throw error when lower is greater than upper in IDBKeyRange (#38735)
IDBKeyRange::Bound doesn't check if the lower bound is greater than the upper bound. When this happens, it should throw DataError. Reference: Step 5 of <https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-bound> Testing: Passing WPT tests that were expected to fail before. --------- Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
This commit is contained in:
parent
ee781b71b4
commit
d490c5c06b
2 changed files with 17 additions and 7 deletions
|
@ -10,7 +10,7 @@ use script_bindings::codegen::GenericBindings::IDBKeyRangeBinding::IDBKeyRangeMe
|
|||
use script_bindings::root::DomRoot;
|
||||
use script_bindings::script_runtime::CanGc;
|
||||
|
||||
use crate::dom::bindings::error::Fallible;
|
||||
use crate::dom::bindings::error::{Error, Fallible};
|
||||
use crate::dom::bindings::import::module::SafeJSContext;
|
||||
use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
|
||||
use crate::dom::globalscope::GlobalScope;
|
||||
|
@ -109,8 +109,24 @@ impl IDBKeyRangeMethods<crate::DomTypeHolder> for IDBKeyRange {
|
|||
lower_open: bool,
|
||||
upper_open: bool,
|
||||
) -> Fallible<DomRoot<IDBKeyRange>> {
|
||||
// Step 1. Let lowerKey be the result of running the steps to convert a value to a key with
|
||||
// lower. Rethrow any exceptions.
|
||||
// Step 2. If lowerKey is invalid, throw a "DataError" DOMException.
|
||||
let lower_key = convert_value_to_key(cx, lower, None)?;
|
||||
|
||||
// Step 3. Let upperKey be the result of running the steps to convert a value to a key with
|
||||
// upper. Rethrow any exceptions.
|
||||
// Step 4. If upperKey is invalid, throw a "DataError" DOMException.
|
||||
let upper_key = convert_value_to_key(cx, upper, None)?;
|
||||
|
||||
// Step 5. If lowerKey is greater than upperKey, throw a "DataError" DOMException.
|
||||
if lower_key > upper_key {
|
||||
return Err(Error::Data);
|
||||
}
|
||||
|
||||
// Step 6. Create and return a new key range with lower bound set to lowerKey, lower open
|
||||
// flag set if lowerOpen is true, upper bound set to upperKey and upper open flag set if
|
||||
// upperOpen is true.
|
||||
let inner =
|
||||
IndexedDBKeyRange::new(Some(lower_key), Some(upper_key), lower_open, upper_open);
|
||||
Ok(IDBKeyRange::new(global, inner, CanGc::note()))
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
[idbkeyrange_incorrect.any.html]
|
||||
[IDBKeyRange.bound(lower, upper / lower > upper) - lower' is greater than 'upper'.]
|
||||
expected: FAIL
|
||||
|
||||
[IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float.]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idbkeyrange_incorrect.any.worker.html]
|
||||
[IDBKeyRange.bound(lower, upper / lower > upper) - lower' is greater than 'upper'.]
|
||||
expected: FAIL
|
||||
|
||||
[IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue