* @fileoverview Javascript test code for verifying proper committing
* behaviour for transactions that are blocked when a tab is force
* closed.
*/
function test() {
if (document.location.hash === '#tab1') {
setUpBlockedTransactions();
} else if (document.location.hash === '#tab2') {
checkForCommit();
} else {
result('fail - unexpected hash');
}
}
function upgradeCallback() {
db = event.target.result;
deleteAllObjectStores(db);
db.createObjectStore('store');
}
async function setUpBlockedTransactions() {
const db = await
promiseDeleteThenOpenDb('blocked-explicit-commit', upgradeCallback);
db.transaction('store', 'readwrite').objectStore('store')
.put('auto', 'auto-key');
const blockingTransaction = db.transaction('store', 'readwrite');
const blockingRequest = blockingTransaction.objectStore('store')
.put('blocking', 'blocking-key');
blockingRequest.onsuccess = () => { result('transactions registered'); };
keepAlive(blockingTransaction, 'store');
const commitTransaction = db.transaction('store', 'readwrite');
commitTransaction.objectStore('store').put('explicit', 'explicit-key');
commitTransaction.commit();
db.transaction('store', 'readwrite').objectStore('store')
.put('blocked', 'blocked-key');
}
async function checkForCommit() {
const db = await promiseOpenDb('blocked-explicit-commit');
const transaction = db.transaction('store', 'readonly');
const objectStore = transaction.objectStore('store');
const autoRequest = objectStore.get('auto-key');
const blockingRequest = objectStore.get('blocking-key');
const explicitRequest = objectStore.get('explicit-key');
const blockedRequest = objectStore.get('blocked-key');
for (const request of [autoRequest, blockingRequest, explicitRequest,
blockedRequest]) {
request.onerror = unexpectedErrorCallback;
request.onblocked = unexpectedBlockedCallback;
}
transaction.oncomplete = () => {
if (autoRequest.result == 'auto' && blockingRequest.result == undefined
&& explicitRequest.result == 'explicit'
&& blockedRequest.result == undefined) {
result('transactions aborted and committed as expected');
} else {
result('fail - transactions did not abort and commit as expected');
}
};
}