<html> <head> <link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> <script src="../../fast/js/resources/js-test-pre.js"></script> <script src="../../fast/js/resources/js-test-post-function.js"></script> <script src="resources/shared.js"></script> </head> <body> <p id="description"></p> <div id="console"></div> <script> description("Test closing a database connection in IndexedDB."); if (window.layoutTestController) layoutTestController.waitUntilDone(); function test() { shouldBeTrue("'webkitIndexedDB' in window"); shouldBeFalse("webkitIndexedDB == null"); request = evalAndLog("webkitIndexedDB.open('transaction-after-close')"); request.onsuccess = openSuccess; request.onerror = unexpectedErrorCallback; } function openSuccess() { debug("openSuccess():"); window.db = evalAndLog("db = event.target.result"); request = evalAndLog("request = db.setVersion('version 1')"); request.onsuccess = inSetVersion; request.onerror = unexpectedErrorCallback; } function inSetVersion() { deleteAllObjectStores(db); event.target.result.oncomplete = runFirstRegularTransaction; event.target.result.onabort = unexpectedAbortCallback; store = evalAndLog("store = db.createObjectStore('store')"); request = evalAndLog("request = store.put('x', 'y')"); request.onsuccess = onPutSuccess; request.onerror = unexpectedErrorCallback; } function onPutSuccess() { testPassed("Put success") } function runFirstRegularTransaction() { debug("running first transaction") currentTransaction = evalAndLog("currentTransaction = db.transaction([], webkitIDBTransaction.READ_WRITE)"); currentTransaction.onabort = unexpectedAbortCallback; currentTransaction.oncomplete = firstTransactionComplete; objectStore = currentTransaction.objectStore('store'); request = evalAndLog("objectStore.put('a', 'b')"); request.onerror = unexpectedErrorCallback; } function firstTransactionComplete() { evalAndLog("db.close()"); evalAndExpectException("db.transaction([], webkitIDBTransaction.READ_WRITE)", "webkitIDBDatabaseException.NOT_ALLOWED_ERR"); debug("") debug("verify that we can reopen the db after calling close") request = evalAndLog("webkitIndexedDB.open('transaction-after-close')"); request.onsuccess = onSecondOpen request.onerror = unexpectedErrorCallback; } function onSecondOpen() { second_db = evalAndLog("second_db = event.target.result"); currentTransaction = evalAndLog("currentTransaction = second_db.transaction([], webkitIDBTransaction.READ_WRITE)"); store = currentTransaction.objectStore('store'); request = evalAndLog("request = store.put('1', '2')"); request.onsuccess = onFinalPutSuccess; request.onerror = unexpectedErrorCallback; currentTransaction.oncomplete = done; currentTransaction.onabort = unexpectedAbortCallback; } function onFinalPutSuccess() { testPassed("final put success"); } var successfullyParsed = true; test(); </script> </body> </html>