LibWeb/IDB: Use enum flags in IDBKeyRange

This commit is contained in:
stelar7 2025-05-13 09:16:06 +02:00 committed by Shannon Booth
commit a2ecafb968
Notes: github-actions[bot] 2025-05-13 10:50:35 +00:00
3 changed files with 23 additions and 13 deletions

View file

@ -17,16 +17,16 @@ GC_DEFINE_ALLOCATOR(IDBKeyRange);
IDBKeyRange::~IDBKeyRange() = default;
IDBKeyRange::IDBKeyRange(JS::Realm& realm, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, bool lower_open, bool upper_open)
IDBKeyRange::IDBKeyRange(JS::Realm& realm, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, LowerOpen lower_open, UpperOpen upper_open)
: PlatformObject(realm)
, m_lower_bound(lower_bound)
, m_upper_bound(upper_bound)
, m_lower_open(lower_open)
, m_upper_open(upper_open)
, m_lower_open(lower_open == LowerOpen::Yes)
, m_upper_open(upper_open == UpperOpen::Yes)
{
}
GC::Ref<IDBKeyRange> IDBKeyRange::create(JS::Realm& realm, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, bool lower_open, bool upper_open)
GC::Ref<IDBKeyRange> IDBKeyRange::create(JS::Realm& realm, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, LowerOpen lower_open, UpperOpen upper_open)
{
return realm.create<IDBKeyRange>(realm, lower_bound, upper_bound, lower_open, upper_open);
}
@ -71,7 +71,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> IDBKeyRange::only(JS::VM& vm, JS::Valu
return WebIDL::DataError::create(realm, "Value is invalid"_string);
// 3. Create and return a new key range containing only key.
return IDBKeyRange::create(realm, key, key, false, false);
return IDBKeyRange::create(realm, key, key, IDBKeyRange::LowerOpen::No, IDBKeyRange::UpperOpen::No);
}
// https://w3c.github.io/IndexedDB/#dom-idbkeyrange-lowerbound
@ -87,7 +87,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> IDBKeyRange::lower_bound(JS::VM& vm, J
return WebIDL::DataError::create(realm, "Value is invalid"_string);
// 3. Create and return a new key range with lower bound set to lowerKey, lower open flag set to open, upper bound set to null, and upper open flag set to true.
return IDBKeyRange::create(realm, key, {}, open, true);
return IDBKeyRange::create(realm, key, {}, open ? IDBKeyRange::LowerOpen::Yes : IDBKeyRange::LowerOpen::No, IDBKeyRange::UpperOpen::Yes);
}
// https://w3c.github.io/IndexedDB/#dom-idbkeyrange-upperbound
@ -103,7 +103,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> IDBKeyRange::upper_bound(JS::VM& vm, J
return WebIDL::DataError::create(realm, "Value is invalid"_string);
// 3. Create and return a new key range with lower bound set to null, lower open flag set to true, upper bound set to upperKey, and upper open flag set to open.
return IDBKeyRange::create(realm, {}, key, true, open);
return IDBKeyRange::create(realm, {}, key, IDBKeyRange::LowerOpen::Yes, open ? IDBKeyRange::UpperOpen::Yes : IDBKeyRange::UpperOpen::No);
}
// https://w3c.github.io/IndexedDB/#dom-idbkeyrange-bound
@ -130,7 +130,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> IDBKeyRange::bound(JS::VM& vm, JS::Val
return WebIDL::DataError::create(realm, "Lower key is greater than upper key"_string);
// 6. Create and return a new key range with lower bound set to lowerKey, lower open flag set to lowerOpen, upper bound set to upperKey and upper open flag set to upperOpen.
return IDBKeyRange::create(realm, lower_key, upper_key, lower_open, upper_open);
return IDBKeyRange::create(realm, lower_key, upper_key, lower_open ? IDBKeyRange::LowerOpen::Yes : IDBKeyRange::LowerOpen::No, upper_open ? IDBKeyRange::UpperOpen::Yes : IDBKeyRange::UpperOpen::No);
}
// https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes

View file

@ -21,9 +21,19 @@ class IDBKeyRange : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(IDBKeyRange, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(IDBKeyRange);
enum class LowerOpen {
No,
Yes,
};
enum class UpperOpen {
No,
Yes,
};
public:
virtual ~IDBKeyRange() override;
[[nodiscard]] static GC::Ref<IDBKeyRange> create(JS::Realm&, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, bool lower_open, bool upper_open);
[[nodiscard]] static GC::Ref<IDBKeyRange> create(JS::Realm&, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, LowerOpen lower_open, UpperOpen upper_open);
[[nodiscard]] JS::Value lower() const;
[[nodiscard]] JS::Value upper() const;
@ -42,7 +52,7 @@ public:
GC::Ptr<Key> upper_key() const { return m_upper_bound; }
protected:
explicit IDBKeyRange(JS::Realm&, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, bool lower_open, bool upper_open);
explicit IDBKeyRange(JS::Realm&, GC::Ptr<Key> lower_bound, GC::Ptr<Key> upper_bound, LowerOpen lower_open, UpperOpen upper_open);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Visitor& visitor) override;

View file

@ -1359,7 +1359,7 @@ WebIDL::ExceptionOr<GC::Ptr<Key>> store_a_record_into_an_object_store(JS::Realm&
// 3. If a record already exists in store with its key equal to key, then remove the record from store using delete records from an object store.
if (has_record) {
auto key_range = IDBKeyRange::create(realm, key, key, false, false);
auto key_range = IDBKeyRange::create(realm, key, key, IDBKeyRange::LowerOpen::No, IDBKeyRange::UpperOpen::No);
delete_records_from_an_object_store(store, key_range);
}
@ -1438,7 +1438,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> convert_a_value_to_a_key_range(JS::Rea
if (null_disallowed)
return WebIDL::DataError::create(realm, "Value is undefined or null"_string);
return IDBKeyRange::create(realm, {}, {}, false, false);
return IDBKeyRange::create(realm, {}, {}, IDBKeyRange::LowerOpen::No, IDBKeyRange::UpperOpen::No);
}
// 3. Let key be the result of converting a value to a key with value. Rethrow any exceptions.
@ -1449,7 +1449,7 @@ WebIDL::ExceptionOr<GC::Ref<IDBKeyRange>> convert_a_value_to_a_key_range(JS::Rea
return WebIDL::DataError::create(realm, "Value is invalid"_string);
// 5. Return a key range containing only key.
return IDBKeyRange::create(realm, key, key, false, false);
return IDBKeyRange::create(realm, key, key, IDBKeyRange::LowerOpen::No, IDBKeyRange::UpperOpen::No);
}
// https://w3c.github.io/IndexedDB/#count-the-records-in-a-range