Files
ladybird/Tests/LibWeb/Text/input/indexeddb-abort-upgrade-reverts-handle-names.html
Zaggy1024 547d4eb1f5 LibWeb: Implement IndexedDB request/transaction reverts
To allow these to be reverted, we store mutation logs per object store
in the scope of a readwrite transaction to track the modifications that
were made by it. If a revert is needed, the log is played in reverse to
bring us back to the original state.
2026-03-20 23:59:35 -05:00

55 lines
2.0 KiB
HTML

<!DOCTYPE html>
<script src="include.js"></script>
<script>
asyncTest(done => {
setTimeout(() => {
spoofCurrentURL("https://example.com/indexeddb-abort-upgrade-reverts-handle-names.html");
// Steps 5-6 of "abort an upgrade transaction" require that object store
// and index handles revert their names when an upgrade is aborted, if the
// store/index existed before the transaction.
const dbName = "test-abort-revert-names-" + Date.now() + Math.random();
// Version 1: create a store with an index.
const req1 = indexedDB.open(dbName, 1);
req1.onupgradeneeded = (e) => {
const db = e.target.result;
const store = db.createObjectStore("original_store");
store.createIndex("original_index", "key");
};
req1.onsuccess = (e) => {
e.target.result.close();
// Version 2: rename store and index, then abort.
let storeHandle, indexHandle;
const req2 = indexedDB.open(dbName, 2);
req2.onupgradeneeded = (e) => {
const tx = e.target.transaction;
storeHandle = tx.objectStore("original_store");
indexHandle = storeHandle.index("original_index");
println("before rename: store=" + storeHandle.name + " index=" + indexHandle.name);
storeHandle.name = "renamed_store";
indexHandle.name = "renamed_index";
println("after rename: store=" + storeHandle.name + " index=" + indexHandle.name);
tx.abort();
};
req2.onerror = (e) => {
println("after abort: store=" + storeHandle.name + " index=" + indexHandle.name);
indexedDB.deleteDatabase(dbName);
done();
};
req2.onsuccess = () => {
println("FAIL: expected error, got success");
indexedDB.deleteDatabase(dbName);
done();
};
};
}, 0);
});
</script>