diff --git a/Libraries/LibWeb/IndexedDB/IDBFactory.cpp b/Libraries/LibWeb/IndexedDB/IDBFactory.cpp index 6897c86001a..8a7e7828e53 100644 --- a/Libraries/LibWeb/IndexedDB/IDBFactory.cpp +++ b/Libraries/LibWeb/IndexedDB/IDBFactory.cpp @@ -105,14 +105,14 @@ WebIDL::ExceptionOr> IDBFactory::open(String const& na WebIDL::ExceptionOr IDBFactory::cmp(JS::Value first, JS::Value second) { // 1. Let a be the result of converting a value to a key with first. Rethrow any exceptions. - auto a = convert_a_value_to_a_key(realm(), first); + auto a = TRY(convert_a_value_to_a_key(realm(), first)); // 2. If a is invalid, throw a "DataError" DOMException. if (a.is_error()) return WebIDL::DataError::create(realm(), "Failed to convert a value to a key"_string); // 3. Let b be the result of converting a value to a key with second. Rethrow any exceptions. - auto b = convert_a_value_to_a_key(realm(), second); + auto b = TRY(convert_a_value_to_a_key(realm(), second)); // 4. If b is invalid, throw a "DataError" DOMException. if (b.is_error()) diff --git a/Libraries/LibWeb/IndexedDB/IDBKeyRange.cpp b/Libraries/LibWeb/IndexedDB/IDBKeyRange.cpp index 3f1337d8c10..b9c9e5adcb2 100644 --- a/Libraries/LibWeb/IndexedDB/IDBKeyRange.cpp +++ b/Libraries/LibWeb/IndexedDB/IDBKeyRange.cpp @@ -64,7 +64,7 @@ WebIDL::ExceptionOr> IDBKeyRange::only(JS::VM& vm, JS::Valu auto& realm = *vm.current_realm(); // 1. Let key be the result of converting a value to a key with value. Rethrow any exceptions. - auto maybe_key = convert_a_value_to_a_key(realm, value); + auto maybe_key = TRY(convert_a_value_to_a_key(realm, value)); // 2. If key is invalid, throw a "DataError" DOMException. if (maybe_key.is_error()) @@ -82,7 +82,7 @@ WebIDL::ExceptionOr> IDBKeyRange::lower_bound(JS::VM& vm, J auto& realm = *vm.current_realm(); // 1. Let lowerKey be the result of converting a value to a key with lower. Rethrow any exceptions. - auto lower_key = convert_a_value_to_a_key(realm, lower); + auto lower_key = TRY(convert_a_value_to_a_key(realm, lower)); // 2. If lowerKey is invalid, throw a "DataError" DOMException. if (lower_key.is_error()) @@ -98,7 +98,7 @@ WebIDL::ExceptionOr> IDBKeyRange::upper_bound(JS::VM& vm, J auto& realm = *vm.current_realm(); // 1. Let upperKey be the result of converting a value to a key with upper. Rethrow any exceptions. - auto upper_key = convert_a_value_to_a_key(realm, upper); + auto upper_key = TRY(convert_a_value_to_a_key(realm, upper)); // 2. If upperKey is invalid, throw a "DataError" DOMException. if (upper_key.is_error()) @@ -114,14 +114,14 @@ WebIDL::ExceptionOr> IDBKeyRange::bound(JS::VM& vm, JS::Val auto& realm = *vm.current_realm(); // 1. Let lowerKey be the result of converting a value to a key with lower. Rethrow any exceptions. - auto lower_key = convert_a_value_to_a_key(realm, lower); + auto lower_key = TRY(convert_a_value_to_a_key(realm, lower)); // 2. If lowerKey is invalid, throw a "DataError" DOMException. if (lower_key.is_error()) return WebIDL::DataError::create(realm, "Value is invalid"_string); // 3. Let upperKey be the result of converting a value to a key with upper. Rethrow any exceptions. - auto upper_key = convert_a_value_to_a_key(realm, upper); + auto upper_key = TRY(convert_a_value_to_a_key(realm, upper)); // 4. If upperKey is invalid, throw a "DataError" DOMException. if (upper_key.is_error()) @@ -141,7 +141,7 @@ WebIDL::ExceptionOr IDBKeyRange::includes(JS::Value key) auto& realm = this->realm(); // 1. Let k be the result of converting a value to a key with key. Rethrow any exceptions. - auto k = convert_a_value_to_a_key(realm, key); + auto k = TRY(convert_a_value_to_a_key(realm, key)); // 2. If k is invalid, throw a "DataError" DOMException. if (k.is_error()) diff --git a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp index 9eeed50e519..ec1de4e3a12 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp +++ b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -194,7 +195,7 @@ bool fire_a_version_change_event(JS::Realm& realm, FlyString const& event_name, } // https://w3c.github.io/IndexedDB/#convert-value-to-key -ErrorOr> convert_a_value_to_a_key(JS::Realm& realm, JS::Value input, Vector seen) +WebIDL::ExceptionOr>> convert_a_value_to_a_key(JS::Realm& realm, JS::Value input, Vector seen) { // 1. If seen was not given, then let seen be a new empty set. // NOTE: This is handled by the caller. @@ -256,11 +257,7 @@ ErrorOr> convert_a_value_to_a_key(JS::Realm& realm, JS::Value input if (input.is_object() && is(input.as_object())) { // 1. Let len be ? ToLength( ? Get(input, "length")). - auto maybe_length = length_of_array_like(realm.vm(), input.as_object()); - if (maybe_length.is_error()) - return Error::from_string_literal("Failed to get length of array-like object"); - - auto length = maybe_length.release_value(); + auto length = TRY(length_of_array_like(realm.vm(), input.as_object())); // 2. Append input to seen. seen.append(input); @@ -274,30 +271,19 @@ ErrorOr> convert_a_value_to_a_key(JS::Realm& realm, JS::Value input // 5. While index is less than len: while (index < length) { // 1. Let hop be ? HasOwnProperty(input, index). - auto maybe_hop = input.as_object().has_own_property(index); - if (maybe_hop.is_error()) - return Error::from_string_literal("Failed to check if array-like object has property"); - - auto hop = maybe_hop.release_value(); + auto hop = TRY(input.as_object().has_own_property(index)); // 2. If hop is false, return invalid. if (!hop) return Error::from_string_literal("Array-like object has no property"); // 3. Let entry be ? Get(input, index). - auto maybe_entry = input.as_object().get(index); - if (maybe_entry.is_error()) - return Error::from_string_literal("Failed to get property of array-like object"); + auto entry = TRY(input.as_object().get(index)); // 4. Let key be the result of converting a value to a key with arguments entry and seen. - auto maybe_key = convert_a_value_to_a_key(realm, maybe_entry.release_value(), seen); - // 5. ReturnIfAbrupt(key). // 6. If key is invalid abort these steps and return invalid. - if (maybe_key.is_error()) - return maybe_key.release_error(); - - auto key = maybe_key.release_value(); + auto key = TRY(TRY(convert_a_value_to_a_key(realm, entry, seen))); // 7. Append key to keys. keys.append(key); @@ -311,7 +297,6 @@ ErrorOr> convert_a_value_to_a_key(JS::Realm& realm, JS::Value input } // - Otherwise - // 1. Return invalid. return Error::from_string_literal("Unknown key type"); } diff --git a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h index f3f899e8e19..980ec3366ad 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h +++ b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h @@ -19,7 +19,7 @@ using KeyPath = Variant>; WebIDL::ExceptionOr> open_a_database_connection(JS::Realm&, StorageAPI::StorageKey, String, Optional, GC::Ref); bool fire_a_version_change_event(JS::Realm&, FlyString const&, GC::Ref, u64, Optional); -ErrorOr> convert_a_value_to_a_key(JS::Realm&, JS::Value, Vector = {}); +WebIDL::ExceptionOr>> convert_a_value_to_a_key(JS::Realm&, JS::Value, Vector = {}); void close_a_database_connection(GC::Ref, bool forced = false); GC::Ref upgrade_a_database(JS::Realm&, GC::Ref, u64, GC::Ref); WebIDL::ExceptionOr delete_a_database(JS::Realm&, StorageAPI::StorageKey, String, GC::Ref);