if (this.importScripts) { importScripts('../../../resources/js-test.js'); importScripts('shared.js'); } description("Test the basics of IndexedDB's IDBDatabase."); indexedDBTest(prepareDatabase, testSetVersionAbort); function prepareDatabase() { db = event.target.result; debug("Test that you can't open a transaction while in a versionchange transaction"); evalAndExpectException('db.transaction("doesntExist")', "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); shouldBe("db.version", "1"); shouldBeEqualToString("db.name", dbname); shouldBe("db.objectStoreNames", "[]"); shouldBe("db.objectStoreNames.length", "0"); shouldBe("db.objectStoreNames.contains('')", "false"); shouldBeUndefined("db.objectStoreNames[0]"); shouldBeNull("db.objectStoreNames.item(0)"); objectStore = evalAndLog('db.createObjectStore("test123")'); checkObjectStore(); } function checkObjectStore() { shouldBe("db.objectStoreNames", "['test123']"); shouldBe("db.objectStoreNames.length", "1"); shouldBe("db.objectStoreNames.contains('')", "false"); shouldBe("db.objectStoreNames.contains('test456')", "false"); shouldBe("db.objectStoreNames.contains('test123')", "true"); shouldThrow("db.objectStoreNames.contains()"); } function testSetVersionAbort() { evalAndLog("db.close()"); evalAndLog("request = indexedDB.open(dbname, 2)"); request.onupgradeneeded = createAnotherObjectStore; request.onblocked = unexpectedBlockedCallback; request.onsuccess = unexpectedSuccessCallback; } function createAnotherObjectStore() { evalAndLog("db = event.target.result"); shouldBe("db.version", "2"); shouldBeEqualToString("db.name", dbname); checkObjectStore(); objectStore = evalAndLog('db.createObjectStore("test456")'); var setVersionTrans = evalAndLog("setVersionTrans = event.target.transaction"); shouldBeNonNull("setVersionTrans"); setVersionTrans.oncomplete = unexpectedCompleteCallback; setVersionTrans.onabort = checkMetadata; evalAndLog("setVersionTrans.abort()"); } function checkMetadata() { shouldBe("db.version", "1"); checkObjectStore(); testClose(); } function testClose() { evalAndLog("db.close()"); debug("Now that the connection is closed, transaction creation should fail"); evalAndExpectException("db.transaction('test123')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); debug("Call twice, make sure it's harmless"); evalAndLog("db.close()"); finishJSTest(); }