LibWeb/IDB: Implement possibly_update_the_key_generator

This commit is contained in:
stelar7 2025-04-11 11:27:22 +02:00 committed by Andrew Kaster
commit 1bdf519b60
Notes: github-actions[bot] 2025-04-23 18:37:27 +00:00
2 changed files with 25 additions and 0 deletions

View file

@ -1235,4 +1235,28 @@ ErrorOr<u64> generate_a_key(GC::Ref<ObjectStore> store)
return key;
}
// https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator
void possibly_update_the_key_generator(GC::Ref<ObjectStore> store, GC::Ref<Key> key)
{
// 1. If the type of key is not number, abort these steps.
if (key->type() != Key::KeyType::Number)
return;
// 2. Let value be the value of key.
auto temp_value = key->value_as_double();
// 3. Set value to the minimum of value and 2^53 (9007199254740992).
temp_value = min(temp_value, MAX_KEY_GENERATOR_VALUE);
// 4. Set value to the largest integer not greater than value.
u64 value = floor(temp_value);
// 5. Let generator be stores key generator.
auto generator = store->key_generator().value();
// 6. If value is greater than or equal to generators current number, then set generators current number to value + 1.
if (value >= generator.current_number())
generator.set(value + 1);
}
}