Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /IndexedDB/idbtransaction_abort.any.html - WPT Dashboard Interop Dashboard
- /IndexedDB/idbtransaction_abort.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/idbtransaction_abort.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/idbtransaction_abort.any.worker.html - WPT Dashboard Interop Dashboard
// META: title=IDBTransaction - abort
// META: global=window,worker
// META: script=resources/support.js
'use strict';
async_test(t => {
let db;
let aborted;
const record = {indexedProperty: 'bar'};
let open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = e.target.result;
let txn = e.target.transaction;
let objStore = db.createObjectStore('store');
objStore.add(record, 1);
objStore.add(record, 2);
let index =
objStore.createIndex('index', 'indexedProperty', {unique: true});
assert_true(index instanceof IDBIndex, 'IDBIndex');
e.target.transaction.onabort = t.step_func(function(e) {
aborted = true;
assert_equals(e.type, 'abort', 'event type');
});
db.onabort = function(e) {
assert_true(aborted, 'transaction.abort event has fired');
t.done();
};
e.target.transaction.oncomplete = fail(t, 'got complete, expected abort');
};
}, 'Abort event should fire during transaction');
indexeddb_test(
(t, db) => {
db.createObjectStore('blobs', {keyPath: 'id', autoIncrement: true});
},
(t, db) => {
const txn = db.transaction('blobs', 'readwrite');
const objectStore = txn.objectStore('blobs');
const data = new Blob(['test'], {type: 'text/plain'});
const putRequest = objectStore.put({id: 0, data: data});
putRequest.onsuccess = t.step_func(() => {
t.step_timeout(() => {
assert_throws_dom('InvalidStateError', () => {
txn.abort();
}, 'Abort should throw InvalidStateError on an auto-committing transaction.');
}, 0);
});
// Ensure the transaction completes.
txn.oncomplete = t.step_func(() => {
t.done();
});
// Abort should fail once the transaction has started committing.
txn.onabort = t.step_func((event) => {
assert_unreached('Unexpected transaction abort: ' + event.target.error);
});
t.add_cleanup(() => {
if (db) {
db.close();
}
});
},
`Abort during auto-committing should throw InvalidStateError.`);
indexeddb_test(
(t, db) => {
db.createObjectStore('blobs', {keyPath: 'id', autoIncrement: true});
},
(t, db) => {
const txn = db.transaction('blobs', 'readwrite');
const objectStore = txn.objectStore('blobs');
const data = new Blob(['test'], {type: 'text/plain'});
// Put the object into the store.
const putRequest = objectStore.put({id: 0, data: data});
// Handle transaction completion.
txn.oncomplete = t.step_func(() => {
assert_throws_dom('InvalidStateError', () => {
txn.abort();
}, 'Abort should throw InvalidStateError on a completed transaction.');
t.done();
});
// Handle transaction error.
txn.onerror = t.step_func((event) => {
assert_unreached('Unexpected transaction error: ' + event.target.error);
});
t.add_cleanup(() => {
if (db) {
db.close();
}
});
},
`Abort on completed transaction should throw InvalidStateError.`);