80 lines
2.0 KiB
HTML
80 lines
2.0 KiB
HTML
<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> |