blob: 8192c9dd26136f59d07915b1e4856385f11cacbb [file] [log] [blame]
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<script src="../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
<script>
var db = null;
const deleteDatabase = () => {
return new Promise((resolve, reject) => {
evalAndLog('dbname = "transaction-state-active-after-creation"');
let deleteRequest = evalAndLog('indexedDB.deleteDatabase(dbname)');
deleteRequest.onsuccess = () => resolve();
deleteRequest.onerror = () => reject();
});
}
const openDatabase = () => {
return new Promise((resolve, reject) => {
if (db) {
debug('database exists');
resolve();
} else {
let openRequest = evalAndLog('indexedDB.open(dbname)');
openRequest.onupgradeneeded = (event) => {
db = event.target.result;
db.createObjectStore('store');
}
openRequest.onsuccess = () => resolve();
openRequest.onerror = () => reject();
}
});
}
const prepareTransaction = async () => {
await openDatabase();
evalAndLog('transaction = db.transaction("store", "readwrite")');
}
const putRecord = (key) => {
return new Promise((resolve, reject) => {
try {
putRequest = evalAndLog('transaction.objectStore("store").put("value", "key")');
putRequest.onsuccess = () => resolve();
putRequest.onerror = (event) => reject(event);
} catch(e) {
reject(e);
}
});
}
const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
}
const asyncTest = async() => {
await deleteDatabase();
await prepareTransaction();
await putRecord();
debug('sleep 100ms');
await sleep(100);
await prepareTransaction();
putRecord()
.then(() => finishJSTest())
.catch((error) => {
testFailed('Failed to put record');
finishJSTest();
});
}
asyncTest();
</script>
</body>
</html>