if (this.importScripts) { importScripts('../../../resources/js-test.js'); importScripts('shared.js'); } description("Test that an aborted 'versionchange' transaction closes the connection."); indexedDBTest(prepareDatabase, onOpen, {version: 1}); function prepareDatabase(evt) { preamble(evt); evalAndLog("db = event.target.result"); evalAndLog("db.createObjectStore('store')"); } function onOpen(evt) { preamble(evt); evalAndLog("db = event.target.result"); evalAndLog("db.close()"); openAgain(); } function openAgain() { preamble(); evalAndLog("request = indexedDB.open(dbname, 2)"); request.onsuccess = unexpectedSuccessCallback; request.onblocked = unexpectedBlockedCallback; request.onupgradeneeded = onUpgradeNeeded; request.onerror = onOpenError; } function onUpgradeNeeded(evt) { preamble(evt); evalAndLog("db = event.target.result"); evalAndLog("transaction = event.target.transaction"); evalAndLog("sawTransactionAbort = false"); transaction.oncomplete = unexpectedCompleteCallback; transaction.onabort = onTransactionAbort; transaction.abort(); } function onTransactionAbort(evt) { preamble(evt); evalAndLog("sawTransactionAbort = true"); debug("creating a transaction should fail because connection is closed:"); evalAndExpectException("db.transaction('store')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); } function onOpenError(evt) { preamble(evt); shouldBeTrue("sawTransactionAbort"); debug("creating a transaction should fail because connection is closed:"); evalAndExpectException("db.transaction('store')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); finishJSTest(); }